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 中找到该单词,并在名为 div 的内容中返回/显示结果偏移行值。 我可以成功运行脚本直到打开 Excel 文件。 但脚本在以下行给出错误:Set strbol 。 。 。 错误消息:下标超出范围。
我在 Excel VBA 中测试了 find 方法,它有效,但在 HTA 中无效 注意:从 IE6 发布,因此请原谅缩进和格式错误。
最佳答案
您必须完全限定该范围。
我还用它们的值替换了xlValues、xlPart、xlByRows、xlNext
。我不确定在 hta
中,就像在 VBS 中一样,您可以在代码顶部定义一个常量
试试这个(未经测试,因为我从未在 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
,因此您还需要捕获代码以查看是否确实找到了匹配项 else 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 中测试。我创建一个文件 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
关于vba - HTA 和查找函数 Excel VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042366/