Excel 自动热键';将活动句柄复制到特定工作表
在.ahk脚本中创建当前活动Excel工作表句柄的最简单方法是:Excel 自动热键';将活动句柄复制到特定工作表,excel,com,autohotkey,Excel,Com,Autohotkey,在.ahk脚本中创建当前活动Excel工作表句柄的最简单方法是: Xl := ComObjActive("Excel.Application") 尽管如此,如果一个工作簿切换到另一个工作簿,这将成为新的“当前活动工作表”,AutoHotkey会尝试通过COM在新工作簿上使用工作表和单元格的方法:当然,设计用于处理特定工作表和单元格的脚本在其他工作簿上不再工作 您知道如何为特定工作簿而不是当前活动工作表创建COM句柄吗 目标应该是允许用户在工作簿之间循环,而不会使Xl对象丢失其以前的句柄并转到新
Xl := ComObjActive("Excel.Application")
尽管如此,如果一个工作簿切换到另一个工作簿,这将成为新的“当前活动工作表”,AutoHotkey会尝试通过COM在新工作簿上使用工作表和单元格的方法:当然,设计用于处理特定工作表和单元格的脚本在其他工作簿上不再工作
您知道如何为特定工作簿而不是当前活动工作表创建COM句柄吗
目标应该是允许用户在工作簿之间循环,而不会使Xl
对象丢失其以前的句柄并转到新的句柄
示例
从头开始打开Excel工作簿,在名为“Sheet1”的工作表的单元格A1中键入1234
;然后使用以下内容创建一个新的.ahk脚本:
#Persistent
Xl := ComObjActive("Excel.Application")
SetTimer, xlRead, 5000
Return
xlRead:
{
value := Xl.Sheets("Sheets1").Range("A1").Value
MsgBox, %value%
}
Return
上面的脚本应每隔5秒在消息框中显示“1234”
运行时,打开一个新工作簿,在名为“Sheet1”的工作表A1单元格中键入5678
,并等待5秒钟:根据我的试验,AutoHotkey应将手柄切换到新的活动工作表,并显示一个内容为“5678”的消息框
有没有办法把它链接到第一张纸上?当然,假设可以使用COM可以引用的专有名称将Excel文件保存到硬盘上。一种方法是将活动工作簿对象存储在如下变量中
#Persistent
oExcel := ComObjActive("Excel.Application")
this_book := oExcel.ActiveWorkbook
SetTimer, xlRead, 10000
Return
xlRead:
{
value := this_book.Sheets(1).Range("A1").Value
MsgBox, %value%
}
Return
第二种方法是使用带有活动工作簿全名的ComObjGet,如果您事先知道它,则不需要ControlGetText命令,只需使用工作簿全名即可
#Persistent
SetTitleMatchMode, 2
ControlGetText, WorkBookName, Excel71, Microsoft Excel
oWorkbook := ComObjGet(WorkBookName)
SetTimer, xlRead, 10000
Return
xlRead:
{
value := oWorkbook.Sheets(1).Range("A1").Value
MsgBox, %value%
}
Return
您还可以将ComObjGet与excel文件的完整路径一起使用,它将返回工作簿对象
#Persistent
fileselectfile, path
oWorkbook := ComObjGet(path)
SetTimer, xlRead, 10000
Return
xlRead:
{
value := oWorkbook.Sheets(1).Range("A1").Value
MsgBox, %value%
}
Return
希望这能帮助您完成所需的工作您能添加一些代码来解决此问题吗?一种方法是在再次使用ComObjActive之前,将获得的COM对象存储在另一个新变量中。但是,请发布一些代码,以便我们可以通过指出如何在您的案例中这样做来提供帮助。添加了一些代码。存储听起来很有趣,不过如果能找到一个指定工作簿名称的解决方案,我们将不胜感激。