online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon ichhabeinefrage vom 07.08.2019, 16:33 Options

Excel per Acces ausführen

Hi
Code:

Ich habe folgenden Code:

Sub mytests()
Dim oXcl As New Excel.Application, ws As Excel.Worksheet

With oXcl
' ab hier ist reines Excel, mit "." beginnen
.Workbooks.Open FileName:="C:\Dokumente und Einstellungen****.xlsm"
.Visible = True
.Run "Modul1.import"
.ActiveWorkbook.Save

.Quit
End With
End Sub

wie man sieht öffnet der eine excel datei, die ein makro ausführt.
aber ich möchte, das er eine neue excel datei anlegt, die ich dann mit einem späterm befehl wieder lösche.

und es würde mich auch interessieren, wie der code aussehen würde, wenn ich die excel tabelle gleich in access importieren würde


gruß, der der eine frage hat


Antwort schreiben

Antwort 1 von RalfH vom 08.08.2019, 06:59 Options

Hallo und guten Morgen Michele,
Hiermit öffnest Du eine Excel Instanz, und falls keine geöffnet ist, wird eine neue erstellt. Anschließend kannst Du mit Deinem Code weiterarbeiten. Verweiß auf Excel nicht vergessen.


Sub tr()


Dim Save As Boolean
Dim ExcelApp As Excel.Application
Dim wbNew As Excel.Workbook

Save = False '(bzw. True)

'Excel Objekt
On Error Resume Next

If Save Then
Set ExcelApp = New Excel.Application
Else
'Vorhandene Excel-Instanz nutzen
Set ExcelApp = GetObject(, "Excel.Application")

'Ansonsten neue Instanz erstellen
If Err.Number > 0 Then
Set ExcelApp = CreateObject("Excel.Application")
Err.Clear
End If

ExcelApp.Application.Visible = True
End If

'Neue Arbeitsmappe erstellen
ExcelApp.SheetsInNewWorkbook = 3
Set wbNew = ExcelApp.Workbooks.Add

If Save Then
'Arbeitsmappe speichern
wbNew.SaveAs "Output \ Datei.xls"
wbNew.Close Savechanges:=False
Set wbNew = Nothing

'Excel-Objekt freigeben
DoEvents
ExcelApp.DisplayAlerts = False
ExcelApp.Quit
ExcelApp.DisplayAlerts = True
End If

Set ExcelApp = Nothing

End Sub

Gruß Ralf

Antwort 2 von ichhabeinefrage vom 08.08.2019, 09:01 Options

Guten morgen Ralf,
der Code hat schonmal bewirkt, das Excel eine neue Mappe öffnet.
Das wollte ich ja auch. Danke

Aber, was bewirkt das hier?

DoEvents
ExcelApp.DisplayAlerts = False
ExcelApp.Quit
ExcelApp.DisplayAlerts = True
End If


Und jetzt hab ich noch eine Frage.
In meinen ersten Code hab ich ein Makro ausführen lasssen, was jetzt ja nicht mehr geht, da ich eine neue Mappe erstellt hab.

Wie führe diesen Makro aus oder gebe ihn weite an Excel


 ActiveWorkbook.XmlImport URL:= _
        "http://www.ecb.int/stats/eurofxref/eurofxref-hist.xml", _
        ImportMap:=Nothing, Overwrite:=True, Destination:=Range("$A$1")



Ich versteh den ganzen Code noch nicht ganz, aber bedeutet diese zeile
 wbNew.Close Savechanges:=False

dass er die Mappe nicht speichert, egal, ob ich was verändert hab?

Aber ich muss diese Mappe ja speichern, damit Access sie importieren kann und später muss ich sie wieder löschen.

Nochmal Danke

Antwort 3 von RalfH vom 09.08.2019, 06:37 Options

Guten Morgen Michele zum 2. ;-)

Im Code selbst kannst Du ja angeben, das er eine bestimmte Excel instanz öffnen soll
.Workbooks.Open FileName:="C:\Dokumente und Einstellungen****.xlsm" 
.Visible = True 
.Run "Modul1.import" 
, natürlich bevor die Überprüfung des Codes ausgeführt wird.

Sollte die Instanz nicht geöffnet sein, wird eine neue Instanz geöffnet.
Gruß Ralf

Antwort 4 von ichhabeinefrage vom 09.08.2019, 10:23 Options

Noch mal Danke Ralf und guten Morgen, hab trotzdem noch ein Problem.

Wenn ich mein Programm woanders ausprobiere, muss ich immer erst Verweise setzten. Kann ich die irgendwie automatsch setzten?
Und wenn nicht, was muss ich am folgenden Code ändern, damit es sich nicht auf die Excel bibliothek bezieht? (Weiß das dass geht ;-) )
Da ich den Code nicht selbstgemacht ab und an manchen stellen verstehe bekomm ich das nicht selber hin.

Sub excelstart()


Dim Save As Boolean
Dim ExcelApp As Excel.Application
Dim wbNew As Excel.Workbook



Save = False '(bzw. True)

'Excel Objekt
On Error Resume Next

If Save Then
Set ExcelApp = New Excel.Application
Else
'Vorhandene Excel-Instanz nutzen
Set ExcelApp = GetObject(, "Excel.Application")

'Ansonsten neue Instanz erstellen
If Err.Number > 0 Then
Set ExcelApp = CreateObject("Excel.Application")
Err.Clear
End If

ExcelApp.Application.Visible = False
End If

'Neue Arbeitsmappe erstellen
ExcelApp.SheetsInNewWorkbook = 3
Set wbNew = ExcelApp.Workbooks.Add
ExcelApp.Run import()

'If Save Then
'Arbeitsmappe speichern
ExcelApp.ActiveWorkbook.SaveAs ("UpdateDatei.xls")
'ExcelApp.SaveWorkspace '"Output \ Datei.xls"
'wbNew.SaveAs "Output \ Datei.xls"
'wbNew.Close Savechanges:=True
Set wbNew = Nothing

'Excel-Objekt freigeben
DoEvents
ExcelApp.DisplayAlerts = False
ExcelApp.Quit
ExcelApp.DisplayAlerts = True
'End If

Set ExcelApp = Nothing

End Sub

Antwort 5 von RalfH vom 09.08.2019, 14:02 Options

Hallo,
Was meinst Du mit woanders ausprobiere?
Im Netzwerk! Standalone Rechner ?
Ralf

Antwort 6 von ichhabeinefrage vom 09.08.2019, 14:41 Options

Na ja beides, im Netzwerk für meine Arbeitskollegen und alleine für mich oder jemand anderes. Wenns nicht anders geht, musss ich wohl jedes mal die Bibliothek freichschalten -.-


Gruß der der eine frage hat

Antwort 7 von RalfH vom 09.08.2019, 14:52 Options

Servus Michele,

Warum teilst Du nicht die Datenbank auf, und stellst das Backend auf nem Server zu verfügung?
Gruß Ralf

Antwort 8 von ichhabeinefrage vom 09.08.2019, 15:39 Options

Hi Ralf,
also mal zur meiner Datenbank, ich habe einen Währungsumrechner gebastelt ( am 1. August hatte meine Ausbildung angefangen).
Dieser Währungsumrechner erstellt (fast) jedes mal eine Excel Mappe.
In diese Excel Mappe lädt er sich automatisch die aktuellen Währungskurse runter (aus einer xml Datei)
Die Excel Datei mit der Tabelle importiert er in Access in eine Tabelle, namens tbl_001_valuetable.
Aus diser Tabelle heraus funktionieren meine Formulare.

Zuallererst versteh ich noch nicht mal wo mein backend ist, wen ich überhaupt eins hab, da der währungsrechner bei jedem start die tbl_001_value erneuert bzw löscht und wieder erstellt.
Un selbst wenn ich einen server machen würde, hilft mir das dann weiter bei meinem Problem mit dem Verweisen?


Übrigens wegen Aufteilen, ich hatte schon mal ausprobiert, das meine Datenbank einfach die Daten aus einer Excel Tabelle holt(ohne sie in Access zu importieren.
Das Resultat war, das er knapp 2 minuten gerechnet hat.

Du musst dir vorstellen, diese DAtenbank hat währungskurse bis 1999!!!
Für jeden Tag 37 Währungen!!!
Kein wunder, das er so lange braucht wenn er die Daten woanders herruft, ist die Tabelle intern geht das so schnell wie ein Flitze-bogen^^

Gruß ichhabeinefrage

Antwort 9 von ichhabeinefrage vom 10.08.2019, 09:12 Options

so ich hab dass mit den verweisen jetzt mal über last binding ausprobiert.
Ich verstehe aber noch nicht ganz die Last binding methode:

Was muss ich hier ändern:

Set ExcelApp = New Excel.Application

Antwort 10 von RalfH vom 10.08.2019, 09:14 Options

Guten Morgen Michele,

Grundsätzlich sollte man eine Datenbank aufteilen, wenn mehrere User daran arbeiten.
Bei MS Access ist das wirklich sehr einfach, da man dafür einen Assistenten hat ( Extras-Datenbank Dienstprogramm-Assistent zur Datenbank Aufteilung).

Die Datenbank wird in ein sogenanntes Frontend und einem Backend aufgeteilt.

Das Backend beinhaltet die Tabellen, Tabellenstrukturen.

Das Frontend beinhaltet die Formulare, Berichte, VBA Codes.

So hat man mit MS Access zum Beispiel die Möglichkeit, sehr Komfortabel sogar, auf ein anderes Datenbanksystem z.B. MS SQL, MySQL,PostgreSQL, usw. zuzugreifen, und mit Access die Frontends zu erstellen.

Das Frontend kann ich an die User verteilen, und alle greifen auf die selbe Tabelle zu.

Was hilft es Dir wenn Du z.B. 5 ganze DB`s verteilt hast, und hast 5 verschiedene Datenbestände ?

So kann man z.B. prüfen lassen, ob die Tabelle tbl_001_valuetable schon Heute aktualisiert wurde, und wenn ja, müssen die anderen das Prozedere nicht mehr machen, da sie ja mit ihrem Frontend auf dieselbe Tabelle zugreifen.

Sollte die Tabelle mal defekt sein, kannst du in Sekunden schnelle eine Sicherungs-Kopie ( die Du hoffentlich anlegen läst einspielen), und die anderen können sofort wieder darauf zugreifen.

Gruß Ralf

Ähnliche Themen

Excel Makro erscheint nicht in Makroliste
H.E.N.K  01.02.2007 - 218 Hits - 1 Antwort

acces point gefunden doch seiten laden nicht
schnuppe  02.08.2007 - 61 Hits - 3 Antworten

importieren einer xml datei
ichhabeinefrage  07.08.2007 - 75 Hits - 2 Antworten

SUPER encoder: Fehelr: Acces denied
TByte  29.04.2008 - 30 Hits - 3 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026