HTA和查找functionExcel VBA

Sub search Set objExl = CreateObject("Excel.Application") Set objWb = objExl.Workbooks objWb.Open("C:\Documents and Settings\user\Desktop\book.xls") Set strbol = objWb("C:\Documents and Settings\user\Desktop\book.xls").Sheets(1).Cells.Find(document.getElementById("q").Value, Range("A1"), xlValues, xlPart, xlByRows, xlNext, False, False) Set objDiv = document.getElementById("content") objDiv.innerText = "Result: " & objWb.Sheets(1).Cells(strbol.Row,strbol.Column).Offset(0,-4).Value objWb("C:\Documents and Settings\user\Desktop\book.xls").Close Set objWb = Nothing Set objExl = Nothing End Sub 

以上是HTA代码,它从HTA文本框中获取查询词,在excel中find该词,并在名为div的内容中返回/显示结果偏移行值。 我可以成功运行脚本,直到打开excel文件。 但是脚本给出错误:Set strbol。 。 。 错误消息:下标超出范围。

我在excel vba中testing了find方法,但是在HTA中没有注意到:从IE6发布,所以请注意缩进和格式化错误。

你必须完全符合这个范围。

我也用它们的值replace了xlValues, xlPart, xlByRows, xlNext 。 我不确定在hta ,就像在VBS中一样,你可以在代码的顶部定义一个常量

试试这个(未testing, 因为我从来没有在hta工作 )。

 Sub search() Set objExl = CreateObject("Excel.Application") Set objWb = objExl.Workbooks.Open("C:\Documents and Settings\user\Desktop\book.xls") Set strbol = objWb.Sheets(1).Cells.Find(document.getElementById("q").Value, objWb.Sheets(1).Range("A1"), -4163, 2, 1, 1, False, False) Set objDiv = document.getElementById("content") objDiv.innerText = "Result: " & objWb.Sheets(1).Cells(strbol.Row, strbol.Column).Offset(0, -4).Value objWb.Close Set objWb = Nothing Set objExl = Nothing End Sub 

额外的说明

既然你正在使用.Find ,你还需要捕获代码,看看你是否真的find了一个匹配objDiv.innerText = "Result: " & objWb.Sheets(1).Cells(strbol.Row, strbol.Column).Offset(0, -4).Value 。值将失败。

就像是

 If Not strbol Is Nothing Then objDiv.innerText = "Result: " & _ objWb.Sheets(1).Cells(strbol.Row, strbol.Column).Offset(0, -4).Value End If 

跟随(从下面的评论)

代码在VBS中testing。 我创build一个文件C:\Sample.xlsx并在Cell N95键入“Sid”,然后运行具有以下代码的VBS文件。 它工作没有错误,并给我一个消息框$N$95

 Dim objExl, objWb, strbol Set objExl = CreateObject("Excel.Application") Set objWb = objExl.Workbooks.Open("C:\Sample.xls") Set strbol = objWb.Sheets(1).Cells.Find("Sid", objWb.Sheets(1).Range("A1"), _ -4163, 2, 1, 1, False, False) msgbox strbol.address objWb.Close Set objWb = Nothing Set objExl = Nothing