PDA

Vollständige Version anzeigen : MS Access aus VB starten und warten bis wieder beendet, dann erst weiter ???


AWSW
16.05.2001, 19:00
Hallo Leute,
ich bin leider noch ein VB-DAU :D

Ich bin grade dabei eine Batchdatei gegen eine EXE auszutauschen.

Über einem Button soll folgendes aufgerufen werden:
MS Access soll eine .mde Datei mit dem AccessSchalter /x (Makro) aufrufen und so lange warten, bis Access wieder geschlossen ist. Danach werden aus der AccessDB exportierte .txt Dateien in ein Verzeichnis kopiert.

Das Kopieren der .txt Dateien habe ich schon gelöst. So viel wusste ich grade noch... FileCopy "Start","Ziel" :D

Mein Problem ist, dass ich nicht festlegen kann, das die MSAccess.exe immer im selben Verzeichnis liegt und die Prozedur nicht solange wartet, bis die Abarbeitung des Markos erfolgt ist und dann vom Makro beendet ist :( Ich weis leider nicht wie dieser Aufruf genau aussehen muss. Bei mir klappt das mangels ausreichendem VB-Wissen nur mit Komplettangabe des MSAccess.exe - Pfades :( Wenn ich: „MSAccess C:\Pfad zur MDE\x.mde /x Makorname“ in den Windows-Ausführen-Dialog eintrage geht das doch auch. Liegt schätze ich mal an der registrierten Anwendung....


Ich hatte eigentlich gedacht, das das mit: Shell "MSAccess.exe C:\Pfad zur MDE\x.mde /x Makorname" geht... Aber das tut es halt nicht... Auch wartet die Prozedur nicht auf die Beendigung von Access...

Ich hoffe Ihr könnt mir helfen :D

IM VORRAUS VIELEN DANK VON EINEM ABSOLUTEN VB ANFÄNGER :D

Stefan Kulpa
17.05.2001, 06:14
<font face="Verdana" size="2">
Hallo,

das ist in zwei Schritten möglich:

Schritt 1:
Herausfinden, wo sich Access befindet.
Voraussetzung: Du weist, wo sich die Datenbank "aufhält"; dann findest Du hier ein Beispiel:
<a href="http://www.kulpa-online.de/tipps/visualbasic/102.htm" target="_blank">FAQ 1.2: Wie erhalte ich das ausführbare Programm für eine Datei? </a>

Schritt 2:
Du startest Access mit den entsprechenden Parametern und "wartest"; ein Beispiel findest Du hier:
<a href="http://support.microsoft.com/support/kb/articles/Q129/7/96.asp" target="_blank">HOWTO: 32-Bit App Can Determine When a Shelled Process Ends</a>

Die hier beschriebene Methode ExecCmd() erhält einen String-Parameter.
Zunächst würde ich probieren, ob es reicht, das gesamte Kommando in diesem String zu übergeben, also z.B.:</font>

<font face="Courier New" size="2">sCmd = "C:\Programme\Microsoft Office\Office\MSAccess.exe C:\Pfad zur MDE\x.mde /x Makroname"
Call ExecCmd(sCmd)</font>

<font face="Verdana" size="2">Die Routine wartet dann solange, bis Access wieder beendet wird.

Gruß</font>

AWSW
17.05.2001, 06:59
Guten Morgen & VIELEN DANK Stefan,
ich habe mich gestern noch sehr lange mit dem VB6 befasst und muss sagen, ich bin begeistert, welche Möglichkeiten, man im Vergleich noch zu VBA man hat. Ich werde mich damit in Zukunft viel mehr beschäftigen :D

Leider bin ich halt noch ein totaler Anfänger, was das betrifft...

Könntest Du mir einen Tipp geben, in welchen Zeilen der beiden Scripts ich denn die MSAccess.exe angebe ??? In dem 2. muesste ich doch die Variable des Ergebnisses aus dem ersten übergeben - oder ???
Ich verstehe zwar schon einiges innerhalb der Listings, aber habe eben in beiden nicht diese Zeile gefunden...

Eine weitere Frage tut sich da bei mir auf, wo schreibe ich diese Funktionen hin ??? In das Clickereignis des Buttons ?...

Hier das erste Script:

Option Explicit

Public Declare Function GetShortPathName Lib "kernel32" Alias _
"GetShortPathNameA" (ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, _
ByVal cchBuffer As Long) As Long

Public Declare Function FindExecutable Lib "shell32.dll" Alias _
"FindExecutableA" (ByVal lpFile As String, _
ByVal lpDirectory As String, _
ByVal lpResult As String) As Long

Public Function vbFindExecutable (ByVal sPath As String) As String
'// -----------------------------------------------------------------
'// Methode: | Ausführbares Programm für eine Datei ermitteln
'// -----------------------------------------------------------------
'// Parameter: | sPath - gültiger Dateipfad
'// -----------------------------------------------------------------
'// Rückgabe: | Pfad zum "zuständigen" Programm
'// -----------------------------------------------------------------
Dim sFile As String
Dim sChar As String
Dim sBuffer As String
Dim sShortPath As String
Dim sDirectory As String
Dim sBugfixedPath As String
Dim lResult As Long
Dim lOffset As Long
'// ======================================================================
'// DOS-Pfad ermitteln
'// ======================================================================
sShortPath = VBA.String(260, 0)
If GetShortPathName(sPath, sShortPath, Len(sShortPath)) Then
sPath = VBA.Left(sShortPath, VBA.InStr(sShortPath, vbNullChar) - 1)
End If
'// ======================================================================
'// Datei- und Ordner aus dem Gesamtpfad ermitteln (rudimentäre Methoden)
'// ======================================================================
sFile = VBA.Mid$(sPath, VBA.InStrRev(sPath, "\") + 1)
sDirectory = VBA.Left$(sPath, Len(sPath) - Len(sFile))
'// ======================================================================
'// Zuständige Applikation ermitteln
'// ======================================================================
sBuffer = Space(260)
FindExecutable sFile, sDirectory, sBuffer
'// ======================================================================
'// Bugfixing durchführen, da es u.U. fehlerhafte Registry-Einträge gibt
'// ======================================================================
sBuffer = Trim$(sBuffer)
If Len(sBuffer) > 0 Then
If InStr(sBuffer, vbNullChar) > 0 Then
For lOffset = 1 To Len(sBuffer)
sChar = Mid(sBuffer, lOffset, 1)
If sChar <> vbNullChar Then
sBugfixedPath = sBugfixedPath + sChar
Else
sBugfixedPath = sBugfixedPath + " "
End If
Next lOffset
Else
sBugfixedPath = sBuffer
End If
End If
If Len(sBugfixedPath) > 0 Then
lOffset = InStr(UCase(sBugfixedPath), UCase(sPath))
If lOffset > 1 Then
sBugfixedPath = Left(sBugfixedPath, lOffset - 1)
End If
If Asc(Right(sBugfixedPath, 1)) = 34 Then '// Anführungszeichen
sBugfixedPath = Left(sBugfixedPath, Len(sBugfixedPath) - 1)
End If
End If
vbFindExecutable = Trim$(sBugfixedPath)

End Function


Hier das zweite Script:

Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
lpApplicationName As String, ByVal lpCommandLine As String, ByVal _
lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, _
lpStartupInfo As STARTUPINFO, lpProcessInformation As _
PROCESS_INFORMATION) As Long

Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long

Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&

Public Function ExecCmd(cmdline$)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO

' Initialize the STARTUPINFO structure:
start.cb = Len(start)

' Start the shelled application:
ret& = CreateProcessA(vbNullString, cmdline$, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc)

' Wait for the shelled application to finish:
ret& = WaitForSingleObject(proc.hProcess, INFINITE)
Call GetExitCodeProcess(proc.hProcess, ret&)
Call CloseHandle(proc.hThread)
Call CloseHandle(proc.hProcess)
ExecCmd = ret&
End Function

Sub Form_Click()
Dim retval As Long
retval = ExecCmd("notepad.exe")
MsgBox "Process Finished, Exit Code " & retval
End Sub


Der zur Pfad zur MDE ist statisch: C:\Tool2000\Tool2000.mde /x Makroname

Es wäre SUPER nett, wenn Du mir da weiter helfen könntest, ich habe heute Nacht noch so einige Zeit davor gesessen und habe irgendwie nicht so den Durchblick erhalten...

VIELEN DANK & VIELE GRUESSE Axel

Stefan Kulpa
17.05.2001, 07:27
Hallo,

so sollte es funktionieren (s. Sub Test);
ich hab's allerdings nicht testen können:

<PRE><FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Option</FONT> <FONT COLOR=#000080>Explicit</FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Const</FONT> NORMAL_PRIORITY_CLASS <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT> = &H20&
<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Const</FONT> INFINITE <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT> = -1&

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Type</FONT> STARTUPINFO
cb <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
lpReserved <FONT COLOR=#000080>As String</FONT>
lpDesktop <FONT COLOR=#000080>As String</FONT>
lpTitle <FONT COLOR=#000080>As String</FONT>
dwX <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
dwY <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
dwXSize <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
dwYSize <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
dwXCountChars <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
dwYCountChars <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
dwFillAttribute <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
dwFlags <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
wShowWindow <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Integer</FONT>
cbReserved2 <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Integer</FONT>
lpReserved2 <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
hStdInput <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
hStdOutput <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
hStdError <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Type</FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Type</FONT> PROCESS_INFORMATION
hProcess <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
hThread <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
dwProcessID <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
dwThreadID <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Type</FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> WaitForSingleObject <FONT COLOR=#000080>Lib</FONT> "kernel32" _
(<FONT COLOR=#000080>ByVal</FONT> hHandle <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> dwMilliseconds <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> CreateProcessA <FONT COLOR=#000080>Lib</FONT> "kernel32" _
(<FONT COLOR=#000080>ByVal</FONT> lpApplicationName <FONT COLOR=#000080>As String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpCommandLine <FONT COLOR=#000080>As String</FONT>, <FONT COLOR=#000080>ByVal</FONT> _
lpProcessAttributes <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpThreadAttributes <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> bInheritHandles <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> dwCreationFlags <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpEnvironment <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpCurrentDirectory <FONT COLOR=#000080>As String</FONT>, _
lpStartupInfo <FONT COLOR=#000080>As</FONT> STARTUPINFO, _
lpProcessInformation <FONT COLOR=#000080>As</FONT> _
PROCESS_INFORMATION) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> CloseHandle <FONT COLOR=#000080>Lib</FONT> "kernel32" _
(<FONT COLOR=#000080>ByVal</FONT> hObject <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> GetExitCodeProcess <FONT COLOR=#000080>Lib</FONT> "kernel32" _
(<FONT COLOR=#000080>ByVal</FONT> hProcess <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>, _
lpExitCode <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> GetShortPathName <FONT COLOR=#000080>Lib</FONT> "kernel32" <FONT COLOR=#000080>Alias</FONT> _
"GetShortPathNameA" (<FONT COLOR=#000080>ByVal</FONT> lpszLongPath <FONT COLOR=#000080>As String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpszShortPath <FONT COLOR=#000080>As String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> cchBuffer <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> FindExecutable <FONT COLOR=#000080>Lib</FONT> "shell32.dll" <FONT COLOR=#000080>Alias</FONT> _
"FindExecutableA" (<FONT COLOR=#000080>ByVal</FONT> lpFile <FONT COLOR=#000080>As String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpDirectory <FONT COLOR=#000080>As String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpResult <FONT COLOR=#000080>As String</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Function</FONT> vbFindExecutable(<FONT COLOR=#000080>ByVal</FONT> sPath <FONT COLOR=#000080>As String</FONT>) <FONT COLOR=#000080>As String</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#008000>'// Methode: | Ausführbares Programm für eine Datei ermitteln</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#008000>'// Parameter: | sPath - gültiger Dateipfad</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#008000>'// Rückgabe: | Pfad zum "zuständigen" Programm</FONT>
<FONT COLOR=#008000>'// -----------------------------------------------------------------</FONT>
<FONT COLOR=#000080>Dim</FONT> sFile <FONT COLOR=#000080>As String</FONT>
<FONT COLOR=#000080>Dim</FONT> sChar <FONT COLOR=#000080>As String</FONT>
<FONT COLOR=#000080>Dim</FONT> sBuffer <FONT COLOR=#000080>As String</FONT>
<FONT COLOR=#000080>Dim</FONT> sShortPath <FONT COLOR=#000080>As String</FONT>
<FONT COLOR=#000080>Dim</FONT> sDirectory <FONT COLOR=#000080>As String</FONT>
<FONT COLOR=#000080>Dim</FONT> sBugfixedPath <FONT COLOR=#000080>As String</FONT>
<FONT COLOR=#000080>Dim</FONT> lResult <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#000080>Dim</FONT> lOffset <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#008000>'// ======================================================================</FONT>
<FONT COLOR=#008000>'// DOS-Pfad ermitteln</FONT>
<FONT COLOR=#008000>'// ======================================================================</FONT>
sShortPath = VBA.String(260, 0)
<FONT COLOR=#000080>If</FONT> GetShortPathName(sPath, sShortPath, Len(sShortPath)) <FONT COLOR=#000080>Then</FONT>
sPath = VBA.Left(sShortPath, VBA.InStr(sShortPath, vbNullChar) - 1)
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#008000>'// ======================================================================</FONT>
<FONT COLOR=#008000>'// Datei- und Ordner aus dem Gesamtpfad ermitteln (rudimentäre Methoden)</FONT>
<FONT COLOR=#008000>'// ======================================================================</FONT>
sFile = VBA.Mid$(sPath, VBA.InStrRev(sPath, "\") + 1)
sDirectory = VBA.Left$(sPath, Len(sPath) - Len(sFile))
<FONT COLOR=#008000>'// ======================================================================</FONT>
<FONT COLOR=#008000>'// Zuständige Applikation ermitteln</FONT>
<FONT COLOR=#008000>'// ======================================================================</FONT>
sBuffer = Space(260)
FindExecutable sFile, sDirectory, sBuffer
<FONT COLOR=#008000>'// ======================================================================</FONT>
<FONT COLOR=#008000>'// Bugfixing durchführen, da es u.U. fehlerhafte Registry-Einträge gibt</FONT>
<FONT COLOR=#008000>'// ======================================================================</FONT>
sBuffer = Trim$(sBuffer)
<FONT COLOR=#000080>If</FONT> Len(sBuffer) > 0 <FONT COLOR=#000080>Then</FONT>
<FONT COLOR=#000080>If</FONT> InStr(sBuffer, vbNullChar) > 0 <FONT COLOR=#000080>Then</FONT>
<FONT COLOR=#000080>For</FONT> lOffset = 1 <FONT COLOR=#000080>To</FONT> Len(sBuffer)
sChar = Mid(sBuffer, lOffset, 1)
<FONT COLOR=#000080>If</FONT> sChar <> vbNullChar <FONT COLOR=#000080>Then</FONT>
sBugfixedPath = sBugfixedPath + sChar
<FONT COLOR=#000080>Else</FONT>
sBugfixedPath = sBugfixedPath + " "
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#000080>Next</FONT> lOffset
<FONT COLOR=#000080>Else</FONT>
sBugfixedPath = sBuffer
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#000080>If</FONT> Len(sBugfixedPath) > 0 <FONT COLOR=#000080>Then</FONT>
lOffset = InStr(UCase(sBugfixedPath), UCase(sPath))
<FONT COLOR=#000080>If</FONT> lOffset > 1 <FONT COLOR=#000080>Then</FONT>
sBugfixedPath = Left(sBugfixedPath, lOffset - 1)
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#000080>If</FONT> Asc(Right(sBugfixedPath, 1)) = 34 <FONT COLOR=#000080>Then</FONT> <FONT COLOR=#008000>'// Anführungszeichen</FONT>
sBugfixedPath = Left(sBugfixedPath, Len(sBugfixedPath) - 1)
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
vbFindExecutable = Trim$(sBugfixedPath)

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Function</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Function</FONT> ExecCmd(sCmdLine <FONT COLOR=#000080>As String</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>

<FONT COLOR=#000080>Dim</FONT> uProcInfo <FONT COLOR=#000080>As</FONT> PROCESS_INFORMATION
<FONT COLOR=#000080>Dim</FONT> uStartup <FONT COLOR=#000080>As</FONT> STARTUPINFO
<FONT COLOR=#000080>Dim</FONT> lReturn <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>

<FONT COLOR=#008000>'// Struktur STARTUPINFO initialisieren</FONT>
uStartup.cb = Len(uStartup)

<FONT COLOR=#008000>'// Programm aufrufen</FONT>
lReturn = CreateProcessA(vbNullString, sCmdLine$, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, vbNullString, uStartup, uProcInfo)

<FONT COLOR=#008000>'// Warten, bis das Programm beendet ist</FONT>
lReturn = WaitForSingleObject(uProcInfo.hProcess, INFINITE)
<FONT COLOR=#000080>Call</FONT> GetExitCodeProcess(uProcInfo.hProcess, lReturn&)
<FONT COLOR=#000080>Call</FONT> CloseHandle(uProcInfo.hThread)
<FONT COLOR=#000080>Call</FONT> CloseHandle(uProcInfo.hProcess)

<FONT COLOR=#008000>'// Funktionsergebnis zurückgeben</FONT>
ExecCmd = lReturn

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Function</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Sub</FONT> Test()

<FONT COLOR=#000080>Const</FONT> csDBPATH <FONT COLOR=#000080>As String</FONT> = "C:\Tool2000\Tool2000.mde"
<FONT COLOR=#000080>Const</FONT> csSUFFIX <FONT COLOR=#000080>As String</FONT> = " /x Makroname"

<FONT COLOR=#000080>Dim</FONT> sAccessPath <FONT COLOR=#000080>As String</FONT>
<FONT COLOR=#000080>Dim</FONT> sCommand <FONT COLOR=#000080>As String</FONT>

sAccessPath = vbFindExecutable(csDBPATH)
<FONT COLOR=#000080>If</FONT> Len(sAccessPath) > 0 <FONT COLOR=#000080>Then</FONT>
sCommand = sAccessPath & " " & csDBPATH & csSUFFIX
ExecCmd sCommand
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080></FONT>

</FONT></PRE>

Gruß

P.S.: Hätte ich beinahe vergessen:
Wo und wann Du den Aufruf durchführst, ist eigentlich egal; z.B. im Button_Click-Ereignis.

AWSW
17.05.2001, 07:39
VIELEN DANK & EIN RIESEN LOB :D STEFAN !!!

Ich werde es gleich testen...

Ich kann nur immer wieder betonen, DIESES FORUM IST KLASSE :D

AWSW
17.05.2001, 09:20
Help :D

Nach dieser Zeile:

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

bringt mir VB beim Kompilieren diesen Fehler:
"Nach End Sub, End Property oder End Function können nur Kommentare stehen."

>>> ???

Ich habe den Text des Betrages 1zu1 übernommen und nur die Zeilensprünge ( _ ), die beim Hineinkopieren bemängelt wurden korrigiert...


Bitte schau doch noch mal rein :D

Stefan Kulpa
17.05.2001, 09:31
Hallo,

ich habe dir soeben das Beispiel per Mail zugeschickt.

Gruß

AWSW
17.05.2001, 09:35
Danke - wird sofort getestet :)

AWSW
17.05.2001, 11:48
Sorry das ich noch mal störe,
aber ich erhalte immer noch den gleichen Fehler... ???

Wäre toll, wenn Du Dir das mal ansehen würdest: p1.zip

<font size="1" face="Century Gothic">Moderatorenanmerkung: Überarbeitung, durch den Wechsel der Forensoftware zum 01.01.2003 verursacht: in diesem Beitrag Link(s) korrigiert.
jinx – 09.07.2003</font>

Vielen Dank & Gruß Axel

AWSW
17.05.2001, 15:07
VIELEN DANK & Super RIESEN LOB - Klappt 1a