【发布时间】:2015-01-16 17:55:22
【问题描述】:
在 .ahk 脚本中为当前活动的 Excel 工作表创建句柄的最简单方法是:
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”的消息框。
有什么办法让它与第一张纸保持联系吗?当然假设可以将 Excel 文件以 COM 可以引用的专有名称保存到硬盘。
【问题讨论】:
-
你能添加一些代码来解决这个问题吗?一种方法是在再次使用 ComObjActive 之前将获得的 COM 对象存储在另一个新变量中。但是请发布一些代码,以便我们可以帮助您指出如何在您的情况下执行此操作
-
添加了一些代码。存储听起来很有趣,但非常感谢指定工作簿名称的解决方案。
标签: excel com autohotkey