我有一个Excel文件,比如Plano.xlsx
,我正在尝试按照说明here的说明使用Autohotkey在其上运行VBA宏脚本。
我不希望Excel在此过程中可见。假设VBA代码在第一张纸上的单元格C1中输入值99。
经过数小时的反复试验,Autohotkey脚本可以顺利运行而不会出现错误,即它会在后台打开Excel进程
编辑Excel文件然后退出。问题是Excel文件根本没有变化。如果我手动粘贴它,VBA代码可以正常工作
在Excel中的新VBA模块中,不使用Autohotkey。
以下是代码:
#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
}
要获取脚本中包含的Acc.ahk库,请参阅here。我的Autohotkey版本是v.1.1.23.05,我使用Excel 2013.我没有
仔细研究一下Excel_Get()
函数,但我使用它而不是ComObjActive("Excel.Application")
,因为后者会产生错误。那里
是关于here的一些有用信息。最后,请注意我在Excel信任中心启用了以下选项:
Enable all macros (not recommended, potentially dangerous code can run)
和Trust access to the VBA project object model
。另外,在加载项部分
在COM加载项中没有检查任何内容(我不知道这是否重要)。最后,我总是以管理员身份运行脚本。
答案 0 :(得分:0)
这可以在没有VBA宏的情况下完成,同时文件被关闭。
FilePath = C:\Users\KostasK\Desktop\Plano.xlsx
oExcel := ComObjGet(FilePath)
oExcel.Worksheets("Sheet1").Range("C1").VALUE := "99" ; you can put actual sheet name instead "sheet1"
oExcel.Save
oExcel.Quit
oExcel :=