在AHK脚本中的COM对象中,Cells.Find()方法的正确语法是什么

时间:2014-12-05 13:56:22

标签: excel-vba com autohotkey comobject com-object

我希望在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参数
  2. 时,第6行中的代码有效
  3. 第6行中的代码在Excel中作为VBA中的宏粘贴时起作用
  4. 使用宏录制器时,代码与Excel中VBA录制的内容类似(不包括某些参数)
  5. 运行Windows 7企业版,MS Excel 2010和Autohotkey 1.1.16.05。

1 个答案:

答案 0 :(得分:0)

常量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常量。