python VBA
Verfasst: Donnerstag 10. August 2006, 21:05
Wie kann ich ein Python script in eine VBA Applikation einbinden?
GruessDM
GruessDM
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Hi DM!DatenMetzgerX hat geschrieben:Wie kann ich ein Python script in eine VBA Applikation einbinden?
Code: Alles auswählen
'***************************************************************************************************
'* Erstellt von: Gerold Penz Am: 02.06.2005 22:58:23
'* Beschreibung: Führt dieses Tool aus
'* Rückgabe: eTrue = Wenn Rückgabe des externen Tools = OK_Returnvalue
'* eFalse = Wenn Rückgabe des externen Tools <> OK_Returnvalue
'* eErrorMisc = Fehler
'***************************************************************************************************
Public Function Execute(Optional ByRef objParentForm As Object) As Enum_TrueFalseError
If Not (modFehler.bgFbAus) Then On Error GoTo Fehlerbereich
Dim sCommand As String
Dim sResult As String
Dim AppWinStyle As VbAppWinStyle
Dim vTaskID As Variant
Dim sTempFileName As String
Dim sZeile As String
' Prüfen ob überhaupt ein Kommando übergeben wurde
If Trim(Me.Command) = "" Then
MsgBox "Dieses Tool besitzt kein zugewiesenes Kommando das ausgeführt " & _
"werden könnte.", vbInformation, "Kein Kommando"
GoTo Exitbereich
End If
' working directory
If Me.WorkDir <> "" Then
If DirectoryExists(Me.WorkDir) Then
ChDrive Left(Me.WorkDir, 3)
ChDir Me.WorkDir
End If
End If
' Hidden
If Me.Hidden Then
AppWinStyle = vbHide
Else
AppWinStyle = vbNormalFocus
End If
' Command parsen und Parameter ersetzen
sCommand = ParseCommand(Me.Command)
' Show Result
If Me.ShowResult Then
' Temp-Filename generieren
sTempFileName = GetTempFilenameVB
' Ausführen mit Pipe in Temp-File mit ">"
sCommand = "%ComSpec% /C " & sCommand & " > " & sTempFileName
If CStr(ShellWait(sCommand, AppWinStyle)) = Me.OK_Returnvalue Then
Execute = eTrue
Else
Execute = eFalse
End If
' Temp-File auslesen und das Ergebnis anzeigen
If FileExist(sTempFileName) Then
Open sTempFileName For Input As #1
Do While Not EOF(1)
sResult = sResult & Input(1, #1)
Loop
Close #1
If sResult = "" Then
MsgBox "Keine Daten als Ergebnis.", vbInformation, "Kein Ergebnis"
Else
Call ShowResultForm(sResult, objParentForm)
End If
Else
MsgBox "Keine Daten als Ergebnis.", vbInformation, "Kein Ergebnis"
End If
Else
'Das Ergebnis nicht anzeigen -->
'WaitMode
If Me.Wait Then
If CStr(ShellWait(sCommand, AppWinStyle)) = Me.OK_Returnvalue Then
Execute = eTrue
Else
Execute = eFalse
End If
Else
' Ausführen
Call Shell(sCommand, AppWinStyle)
Execute = eTrue
End If
End If
Exitbereich:
On Error Resume Next
If sTempFileName <> "" Then
If FileExist(sTempFileName) Then
Kill sTempFileName
End If
End If
' Wenn die Rückgabe ignoriert werden soll, dann OK zurück liefern
If Me.IgnoreReturnvalue Then Execute = eTrue
Exit Function
Fehlerbereich:
Call modFehler.FehlerProzedur( _
Err, _
"Tool", _
"Execute", _
"", _
Nothing, _
Nothing, _
Nothing)
'Kommandos im Fehlerbereich
Execute = eErrorMisc
'Fehler abschliessen
Resume Exitbereich
End Function
Dann starte ich eine vorbereitete Excel-Mappe, die beim Öffnen automatisch ein Startscript ausführt. Das Startscript wiederumselect
A1
Hallo Welt
fg
3
bg
43