Ich habe eine Excel-Datei, sagen Plano.xlsx
und ich versuche, ein VBA-Makro-Skript mit Autohotkey darauf folgen die Anweisungen here. Ich möchte nicht das Excel während dieses Prozesses sichtbar sein. Der VBA-Code soll am ersten Blatt den Wert 99 in der Zelle C1 eintragen. Nach Stunden der Versuch und Irrtum, das Autohotkey-Skript läuft reibungslos ohne Fehler, d. H. Es öffnet einen Excel-Prozess im Hintergrund angeblich Bearbeitung der Excel-Datei und dann beendet. Das Problem ist, dass sich die Excel-Datei nicht ändert. Der VBA-Code funktioniert einwandfrei, wenn ich ihn manuell in ein neues VBA-Modul in Excel einfügen, ohne Autohotkey zu verwenden. HierAutohotkey führt Excel VBA-Makro, aber Änderungen werden nicht angewendet
ist der Code:
#SingleInstance force
#Include Acc.ahk
VBcode=
(
Sub myFunction()
Worksheets(1).Select
Worksheets(1).Range("C1").Select
Selection.Value = 99
End Sub
)
Excel_Run("myFunction")
Excel_Run(sFunction){
FilePath = C:\Users\KostasK\Desktop\Plano.xlsx
oExcel := ComObjCreate("Excel.Application")
Excel_ImportCode(VBcode)
oWorkbook := oExcel.Workbooks.Open(FilePath)
Excel_Get().Run(sFunction)
oWorkbook.Save
oExcel.Quit
}
Excel_ImportCode(VBcode){
if fileexist(A_ScriptDir . "\tempvbcode.txt")
FileDelete, %A_ScriptDir%\tempvbcode.txt
FileAppend, %VBcode%, %A_ScriptDir%\tempvbcode.txt
Excel_Get().ActiveWorkbook.VBProject
.VBComponents.Import(A_ScriptDir . "\tempvbcode.txt")
}
Excel_Get(WinTitle="ahk_class XLMAIN") { ; by Sean and Jethrow, minor modification by Learning one
ControlGet, hwnd, hwnd, , Excel71, %WinTitle%
if !hwnd
return
Window := Acc_ObjectFromWindow(hwnd, -16)
Loop
try
Application := Window.Application
catch
ControlSend, Excel71, {esc}, %WinTitle%
Until !!Application
return Application
}
Um die Acc.ahk Bibliothek zu erhalten, die im Skript enthalten ist, wenden Sie sich bitte here sehen. Meine Autohotkey-Version ist v.1.1.23.05 und ich benutze Excel 2013. Ich habe nicht genauer betrachtet Excel_Get()
Funktion, aber ich habe es anstelle von ComObjActive("Excel.Application")
verwendet, weil letztere Fehler erzeugt. Dort gibt einige nützliche Informationen darüber here. Beachten Sie bitte, dass ich die folgenden Optionen in Excel Trust Center aktiviert habe: Enable all macros (not recommended, potentially dangerous code can run)
und Trust access to the VBA project object model
. Außerdem wird im Add-Ins-Bereich in COM-Add-Ins nichts überprüft (ich weiß nicht, ob das wichtig ist). Schließlich führe ich das Skript immer als Administrator aus.