【问题标题】:What's the correct syntax for Cells.Find() method within COM Objects in AHK scriptsAHK 脚本中 COM 对象中 Cells.Find() 方法的正确语法是什么
【发布时间】:2015-02-03 17:13:12
【问题描述】:

我希望使用 AHKscript 中的 COM 对象将 Excel 工作表中包含的数据行复制/粘贴到 Web 表单中。我无法提取 Excel 工作表中包含的数据的最后一行,以便我可以告诉脚本仅循环包含数据的行。

我正在使用 stackflow herehere 上的答案来计算最后一行,但很难让代码正常工作:

filepath := "C:\.....\test.xlsx"
X1 := ComObjCreate("Excel.Application")  
X1.Visible := 1  
X1.Workbooks.Open(filepath)  
X1.ActiveWorkbook.Sheets("Input").Activate  
Rows := X1.ActiveSheet.Cells.Find(What:="*", After:=X1.ActiveSheet.Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
MsgBox % "value is" . Rows
Return

代码在第 6 行中断(行 := ...),返回 0x800200005 - 专门使用“查找”方法的类型不匹配错误。

让我不解的是:

  1. 当我删除 SearchOrder 和 SearchDirection 参数时,第 6 行中的代码有效
  2. 第 6 行中的代码在 Excel 中作为宏粘贴到 VBA 中时有效
  3. 代码与使用宏记录器时Excel在VBA中记录的代码类似(不包括一些参数)

运行 Windows 7 Enterprise、MS Excel 2010 和 Autohotkey 1.1.16.05。

【问题讨论】:

  • xlByRows 和 xlPrevious 是 excel 内容,ahk 不知道它们,你需要在脚本中定义它们
  • 如果您找到正确答案,请发布并接受。

标签: excel vba com autohotkey


【解决方案1】:

常量xlByRowsxlPrevious 对AutoHotkey 没有任何意义,它们是空白变量。 需要在脚本第 6 行之前的某个位置为它们分配数值。

在脚本中适当的地方包含这些行:
xlByRows := 1
xlPrevious := 2

来源:
Microsoft Excel 常量 [Excel 2003 VBA 语言参考]
https://msdn.microsoft.com/en-us/library/office/aa221100(v=office.11).aspx

注意:可以通过以下行从 Excel VBA 中(即不通过 AutoHotkey)适当地检索常量,例如:
MsgBox xlByRows & " " & xlPrevious

注意:要查看正在运行的 AutoHotkey 脚本的变量,您可以右键单击其托盘图标并单击 Open,然后在菜单栏上导航到 View, Variables and their contents, 然后检查任何尚未分配数字的 xl 常量。

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 2021-12-26
    • 1970-01-01
    • 2010-10-03
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2010-10-15
    相关资源
    最近更新 更多