vba - HTA 和查找函数 Excel VBA

标签 vba excel hta

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/

相关文章:

vba - 如何自动停止VBA宏?

Excel:Interior.ColorIndex 为同一索引生成不同的值

excel - 避免工作簿的副作用。打开 .csv 文件

c# - 尝试使用 File.Move 移动文件时出现 FileNotFound 异常

javascript - 如何在HTA中浏览文本文件并在文本区域中显示数据

hta - 如何在 HTA 文件上播放声音

vba - 在 VBA 中设置新的特定范围

excel - 在单元格中查找字符串

c# - 在 VBA 中使用从 C# 构建的 .xll/.dll

hta - 更改 HTA 应用程序窗口大小