Discussion:
mit vbs eine db öffnen und ein makro starten
(zu alt für eine Antwort)
Thom
2009-08-19 12:35:47 UTC
Permalink
Hallo liebe NG

Ich müsste via VBS Code eine Access DB öffnen und dort ein Import Prozedur
bzw. Makro starten.

Die DB ist unter folgendem Pfad: c:\temp\test.mdb
Das Makro ist mit dem Namen "m_000_Datenimport" in der DB abgelegt

Das Script müsste in etwa so aussehen:

- öffne test.mdb
- starte Makro "m_000_Datenimport"
- starte VBA-Makro "btnCreaBarClose_Click" um die DB Datei wieder zu
schliessen

Ich habs im Internet versucht zu googlen. Verstehe jedoch zu wenig davon.

Danke im Voraus für mögliche Tipps.

Gruss Thom
Henry Habermacher
2009-08-19 12:50:54 UTC
Permalink
Hallo Thom
Post by Thom
Ich müsste via VBS Code eine Access DB öffnen und dort ein Import Prozedur
bzw. Makro starten.
In diesem Fall musst Du Access starten, nicht nur die DB per DAO öffnen. Nur
Access selber kann die Makros ausführen.
Da Du nun Access öffnen musst, musst Du sicherstellen, dass da kein Autoexec
Makro oder ein Startformular geöffnet wird, sonst geht das schief. Am
einfachsten klemmst Du das in der Anwendung ab, indem Du das UserControl
Property des Application Objekts kontrollierst und das Startformular oder
Makro sofort wieder schliesst (oder gar nicht öffnest), wenn die Anwendung
gestartet wird.

Zum Beispiel beim Form_Open Ereignis des Start Formulars

Private Sub Form_Open(Cancel As Integer)
If Application.UserControl = False Then
Cancel = True
Exit Sub
End If
End Sub

Zudem ist natürlich nun Voraussetzung, dass Access auf diesem Rechner
installiert ist.
Post by Thom
Die DB ist unter folgendem Pfad: c:\temp\test.mdb
Das Makro ist mit dem Namen "m_000_Datenimport" in der DB abgelegt
- öffne test.mdb
- starte Makro "m_000_Datenimport"
- starte VBA-Makro "btnCreaBarClose_Click" um die DB Datei wieder zu
schliessen
Versuch mal sowas (ungetestet):

Option Explicit
Dim objAccess
Set objAccess = CreateObject("Access.Application")
objAccess.OpenCurrentDB = "c:\temp\test.mdb"
objAccess.DoCmd.RunMacro "m_00_Datenimport"
objAccess.Quit 2 '2=acSaveNone
MsgBox "So, das wars."

Gruss
Henry
--
AEK 12 - Anmeldung bei www.donkarl.com/?AEK
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Thom
2009-08-19 14:01:25 UTC
Permalink
Danke. Gruss Thom
Post by Henry Habermacher
Hallo Thom
Post by Thom
Ich müsste via VBS Code eine Access DB öffnen und dort ein Import Prozedur
bzw. Makro starten.
In diesem Fall musst Du Access starten, nicht nur die DB per DAO öffnen.
Nur Access selber kann die Makros ausführen.
Da Du nun Access öffnen musst, musst Du sicherstellen, dass da kein
Autoexec Makro oder ein Startformular geöffnet wird, sonst geht das
schief. Am einfachsten klemmst Du das in der Anwendung ab, indem Du das
UserControl Property des Application Objekts kontrollierst und das
Startformular oder Makro sofort wieder schliesst (oder gar nicht öffnest),
wenn die Anwendung gestartet wird.
Zum Beispiel beim Form_Open Ereignis des Start Formulars
Private Sub Form_Open(Cancel As Integer)
If Application.UserControl = False Then
Cancel = True
Exit Sub
End If
End Sub
Zudem ist natürlich nun Voraussetzung, dass Access auf diesem Rechner
installiert ist.
Post by Thom
Die DB ist unter folgendem Pfad: c:\temp\test.mdb
Das Makro ist mit dem Namen "m_000_Datenimport" in der DB abgelegt
- öffne test.mdb
- starte Makro "m_000_Datenimport"
- starte VBA-Makro "btnCreaBarClose_Click" um die DB Datei wieder zu
schliessen
Option Explicit
Dim objAccess
Set objAccess = CreateObject("Access.Application")
objAccess.OpenCurrentDB = "c:\temp\test.mdb"
objAccess.DoCmd.RunMacro "m_00_Datenimport"
objAccess.Quit 2 '2=acSaveNone
MsgBox "So, das wars."
Gruss
Henry
--
AEK 12 - Anmeldung bei www.donkarl.com/?AEK
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Peter Doering
2009-08-19 12:55:34 UTC
Permalink
Hallo,
Post by Thom
Ich müsste via VBS Code eine Access DB öffnen und dort ein Import Prozedur
bzw. Makro starten.
Die DB ist unter folgendem Pfad: c:\temp\test.mdb
Das Makro ist mit dem Namen "m_000_Datenimport" in der DB abgelegt
- öffne test.mdb
- starte Makro "m_000_Datenimport"
- starte VBA-Makro "btnCreaBarClose_Click" um die DB Datei wieder zu
schliessen
Fuer den Start gibt es mehrere Moeglichkeiten, die einfachste ist wohl, das
zu startende Makro AutoExec zu nennen. Am Ende des Makros kannst du ein
Application.Quit setzen.

Eine andere Start-Moeglichkeit waere, per Aufrufparameter den Makronamen
mitzugeben, z.B.:

<PfadZuAccess>\MSAccess.Exe <PfadZurMDB>\Deine.mdb /x <makroname>

Details zu Aufrufparametern siehe http://support.microsoft.com/kb/209207

Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Thom
2009-08-19 14:01:36 UTC
Permalink
Danke. Gruss Thom
Post by Peter Doering
Hallo,
Post by Thom
Ich müsste via VBS Code eine Access DB öffnen und dort ein Import Prozedur
bzw. Makro starten.
Die DB ist unter folgendem Pfad: c:\temp\test.mdb
Das Makro ist mit dem Namen "m_000_Datenimport" in der DB abgelegt
- öffne test.mdb
- starte Makro "m_000_Datenimport"
- starte VBA-Makro "btnCreaBarClose_Click" um die DB Datei wieder zu
schliessen
Fuer den Start gibt es mehrere Moeglichkeiten, die einfachste ist wohl, das
zu startende Makro AutoExec zu nennen. Am Ende des Makros kannst du ein
Application.Quit setzen.
Eine andere Start-Moeglichkeit waere, per Aufrufparameter den Makronamen
<PfadZuAccess>\MSAccess.Exe <PfadZurMDB>\Deine.mdb /x <makroname>
Details zu Aufrufparametern siehe http://support.microsoft.com/kb/209207
Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Jürgen Volke
2009-08-19 12:55:49 UTC
Permalink
Hallo Thom
Post by Thom
Ich müsste via VBS Code eine Access DB öffnen und dort ein Import
Prozedur bzw. Makro starten.
Die DB ist unter folgendem Pfad: c:\temp\test.mdb
Das Makro ist mit dem Namen "m_000_Datenimport" in der DB abgelegt
- öffne test.mdb
- starte Makro "m_000_Datenimport"
- starte VBA-Makro "btnCreaBarClose_Click" um die DB Datei wieder zu
schliessen
Ich habs im Internet versucht zu googlen. Verstehe jedoch zu wenig davon.
ich würde Import + Close in ein Makro fassen und dann im Script durch
folgenden
Aufruf ausführen:

Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("C:\Programme\Microsoft
Office\Office10\MSACCESS.Exe C:\temp\test.mdb /X m_000_Datenimport")


HTH Jürgen
Thom
2009-08-19 14:05:53 UTC
Permalink
Hallo Jürg

Danke. Funktioniert soweit. Jetzt müsste ich nur noch das VBA Marko
"btnCreaBarClose" nach dem import starten.

Gruss Thom
Post by Henry Habermacher
Hallo Thom
Post by Thom
Ich müsste via VBS Code eine Access DB öffnen und dort ein Import
Prozedur bzw. Makro starten.
Die DB ist unter folgendem Pfad: c:\temp\test.mdb
Das Makro ist mit dem Namen "m_000_Datenimport" in der DB abgelegt
- öffne test.mdb
- starte Makro "m_000_Datenimport"
- starte VBA-Makro "btnCreaBarClose_Click" um die DB Datei wieder zu
schliessen
Ich habs im Internet versucht zu googlen. Verstehe jedoch zu wenig davon.
ich würde Import + Close in ein Makro fassen und dann im Script durch
folgenden
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("C:\Programme\Microsoft
Office\Office10\MSACCESS.Exe C:\temp\test.mdb /X m_000_Datenimport")
HTH Jürgen
Henry Habermacher
2009-08-19 14:36:33 UTC
Permalink
Hallo Thom
Post by Thom
Danke. Funktioniert soweit. Jetzt müsste ich nur noch das VBA Marko
"btnCreaBarClose" nach dem import starten.
Post by Jürgen Volke
ich würde Import + Close in ein Makro fassen und dann im Script durch
folgenden
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("C:\Programme\Microsoft
Office\Office10\MSACCESS.Exe C:\temp\test.mdb /X m_000_Datenimport")
Das ist eben der Nachteil dieser Lösung. Du hast keine Kontrolle über
Access, wie mit einer OLE Automatisierung. Wenn das "VBA Makro" (wir nennen
das Prozedur, nicht Makro) eine Public Function ist, dann kannst Du dieses
in der OLE Automatisierung über

objAccess.Run "btnCleaBarClose"

starten.

Im Fall hier müsstest Du nun das Makro "m_00_Datenimport" erweitern und dort
am Schluss halt dann eben die Funktion aus dem Makro über den entsprechenden
Makrobefehl ausführen.

Gruss
Henry
--
AEK 12 - Anmeldung bei www.donkarl.com/?AEK
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Thom
2009-08-19 17:47:13 UTC
Permalink
Tach Henry

Alles klar. Danke dir. Habs im importmakro angepasst.

Gruss Thom
Post by Henry Habermacher
Hallo Thom
Post by Thom
Danke. Funktioniert soweit. Jetzt müsste ich nur noch das VBA Marko
"btnCreaBarClose" nach dem import starten.
Post by Jürgen Volke
ich würde Import + Close in ein Makro fassen und dann im Script durch
folgenden
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("C:\Programme\Microsoft
Office\Office10\MSACCESS.Exe C:\temp\test.mdb /X m_000_Datenimport")
Das ist eben der Nachteil dieser Lösung. Du hast keine Kontrolle über
Access, wie mit einer OLE Automatisierung. Wenn das "VBA Makro" (wir
nennen das Prozedur, nicht Makro) eine Public Function ist, dann kannst Du
dieses in der OLE Automatisierung über
objAccess.Run "btnCleaBarClose"
starten.
Im Fall hier müsstest Du nun das Makro "m_00_Datenimport" erweitern und
dort am Schluss halt dann eben die Funktion aus dem Makro über den
entsprechenden Makrobefehl ausführen.
Gruss
Henry
--
AEK 12 - Anmeldung bei www.donkarl.com/?AEK
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Loading...