VBA Aufruf eines Programms / dll

Hallo

Wie rufe ich unter VBA (Excel) ein anderes Programm auf?
Desgleichen für eine .dll ?

Kann mir da jemand weiterhelfen?

Besten Dank

Hallo,

Wie rufe ich unter VBA (Excel) ein anderes Programm auf?

wie in VB6 auch, sollte in VBA Shell(„Pfad\Programm Parameter“) funktionieren.

Desgleichen für eine .dll ?

Das hängt von der Dll ab.
Beispiel GetAsyncKeyState:

Private Declare Function GetAsyncKeyState Lib „user32“ (ByVal vKey As Long) As Integer

Kann mir da jemand weiterhelfen?

Wenn Du verrätst, welche Dll und was Du möchtest, eventuell.

Gruß Rainer

Hallo Rainer

Erstmal vielen Dank für die prompte Hilfe.
Der Hintergrund ist:
Ich möchte aus VBA heraus über Netcat mit einem Messgerät über TCP/IP sprechen.
Inzwischen bin ich soweit, dass ich auf Konsolenebene mit Netcat das Messgerät zu einer Messung veranlassen kann.
Wermutstropfen: Nach Rückmeldung der Ergebnisse bleibt das Netcat stehen.
Wenn ich aber Netcat aus VBA aufrufe, passiert gar nichts.

Die Netcat Befehle:

Echo Trigger | nc IP-Adresse Port löst eine Messung aus
Echo Testresult | nc IP-Adresse Port schiebt die Ergebnisse rüber.

Haste da ne Idee ?
Geht da vieleicht was über die winsock.dll ?

Gruss

Ratz

Hallo,

Haste da ne Idee ?

ich habe mal nach Netcat gegoogelt:
http://www.jfranken.de/homepages/johannes/vortraege/…

Und auch in ZD-Net noch etwas darüber gefunden. Da steht überall deutlich: Kommandozeile!

Geht da vieleicht was über die winsock.dll ?

Eher nicht. Das ist ausdrücklich für die Kommandozeile geschrieben.

Entweder abreitest Du mit einer Batch-Datei und leitest die Ausgaben in eine Textdatei um, oder Du rufst mit VB eine Konsole auf und arbeitest mit dieser in VB integrierten Konsole dann mit Netcat, weil Du dann auch die Rückmeldungen im VB bekommst.

Ob das aber mit VBA realisierbar ist?

Der Code für VB6:

http://www.activevb.de/tipps/vb6tipps/tipp0342.html

Mit VBA kann ich das nicht testen, ich habe kein VBA.

Gruß Rainer

1 Like

Hallo Rainer

Danke (* geb)

Entweder abreitest Du mit einer Batch-Datei und leitest die
Ausgaben in eine Textdatei um

Auch mit ner Batch-Datei funzt das (noch) nicht :frowning:

Der Code für VB6:

http://www.activevb.de/tipps/vb6tipps/tipp0342.html

Den angegebenen Quellcode habe ich unter VBA zum laufeb gebracht :smile:
Aber wie schicke ich jetzt Kommandozeilen zur Ausführung?

Gruss

Ratz

Hallo,

Den angegebenen Quellcode habe ich unter VBA zum laufeb
gebracht :smile:

Na wunderbar! Den musst du nur noch ein wenig verändern.

Aber wie schicke ich jetzt Kommandozeilen zur Ausführung?

Dazu sehen wir uns einfach mal die Funktion an und betrachen, was da passiert.

Private Function CreateConsole() As String
 Dim szUserInput As String

 Call AllocConsole
 Call SetConsoleTitle("VB Console")

 hConsoleIn = GetStdHandle(STD\_INPUT\_HANDLE)
 hConsoleOut = GetStdHandle(STD\_OUTPUT\_HANDLE)
 hConsoleErr = GetStdHandle(STD\_ERROR\_HANDLE)

 Call SetConsoleTextAttribute(hConsoleOut, FOREGROUND\_RED Or \_
 FOREGROUND\_GREEN Or FOREGROUND\_BLUE Or \_
 FOREGROUND\_INTENSITY Or BACKGROUND\_BLUE)

Das waren die Vorbereitungen, die Konsole ist nun offen.

 Call ConsolePrint("VB Konsole" & vbCrLf)
 Call SetConsoleTextAttribute(hConsoleOut, FOREGROUND\_RED Or \_
 FOREGROUND\_GREEN Or FOREGROUND\_BLUE)

 Call ConsolePrint("Gebe hier Deinen Namen ein: ")

Mit 'Call ConsolePrint(„Auszugegender Text“) wird also ein Text, Befehl, was immer Du willst an die Cosole gesendet. Hier kommt das hin, was Du sonst in der Eingabeaufforderung eintippst.

 szUserInput = ConsoleRead()

Hier wird anschließend die Ausgabe der Console gelesen und an eine Variable übergeben.

 If Not szUserInput = vbNullString Then
 Call ConsolePrint("Hallo, " & szUserInput & "!" & vbCrLf)
 Else
 Call ConsolePrint("Hallo, wer immer Du auch bist!" & vbCrLf)
 End If

 Call ConsolePrint("Betaetigen Sie Enter um die " & \_
 "VB-Konsole zu schliessen")

 Call ConsoleRead
 Call FreeConsole

Und hier wird mit ‚Call FreeConsole‘ das Fenster wieder geschlossen.

 CreateConsole = szUserInput
End Function

Das nun zu zerlegen, in verschiedenen Prozeduren unterzubringen, so daß man 1.) Die Konsole öffnet. 2.) Etwas in die Konsole schreibt, das Ergebnis empfängt und auswertet. 2.) bis man nicht mehr möchte. 3.) Die Konsole wieder schließt. Ist ja nicht schwer. Oder? Einfach drei Prozeduren, Klickereignisse von drei Buttons.

Gruß Rainer

1 Like

Danke
Hallo Rainer

Vielen Dank für deine Hilfe.
Ich habs zum laufen gekriegt.

Und zwar mit dem Aufruf Ergebnis = Shell(„cmd /c D:\Magnatest\nc11nt\Messung.bat“)

Gruss

Ratz

Hi Ratz,

Ich habs zum laufen gekriegt.

Und zwar mit dem Aufruf Ergebnis = Shell(„cmd /c
D:\Magnatest\nc11nt\Messung.bat“)

freut mich, daß Dein Problem gelöst ist!

Gruß Rainer