excel - VBA 下标超出范围,名称解析问题?

标签 excel vba

尝试编写一个 VBA 函数,该函数将返回给定标题单元格字符串和工作表名称的列号,但我得到下标超出范围错误。
这是功能:

Public Function namedColumnNo(heading As String, shtName As String) As Long
' Return the column number with named header text'
' on given worksheet.
Dim r As Range
Dim wks As Worksheet

Debug.Print shtName
'Exit Function

Set wks = Sheets(shtName)
wks.Range("1:1").Select
With wks
    r = .Range("1:1").Find(heading, LookIn:=xlValue)
    If r Is Nothing Then
        namedColumnNo = -1
    Else: namedColumnNo = r.Column
    End If

End With

End Function

我正在使用这个测试子来调用函数:
Public Sub getCol()

Debug.Print "Find MidTemp on " & DataSht.RawDataSht
Debug.Print "Col " & namedColumnNo("MidTemp", DataSht.RawDataSht)

End Sub

我有一个用户定义的类型 DataSht,其中我有变量来命名工作表,例如
Public Type dataShtNames
    HeaderSht As String
    RawDataSht As String
    ResultDataSht As String
End Type
Public DataSht As dataShtNames

使用未注释的 Exit Function 语句,我得到的 debug.print 语句可以解决变量
Find MidTemp on RawData
RawData:MidTemp
Col 0

让函数运行错误发生在Set wks = Sheets(shtName)如果我将参数 shtName 替换为作为字符串“RawData”的实际工作表名称,则错误会向下移动到使用第二个参数 heading 的行.如果我在这里用字符串替换参数,错误仍然存​​在。
我在这里缺少什么吗?一些帮助将不胜感激。

最佳答案

遗憾的是无法发表评论,但您实际上得到了 out of range错误,因为它应该是 LookIn:=xlValues你在哪里 LookIn:=xlValue
正如@Mathieu 所指出的,您需要修复添加 Set r = Find(heading, LookIn:=xlValues)将范围设置为返回的值。

作为旁注 - 你应该放弃选择。它没有为你做任何事情。

With wks.Range("1:1")
   Set r = .Find(heading, LookIn:=xlValues)
    If r Is Nothing Then
        namedColumnNo = -1
    Else: namedColumnNo = r.Column
    End If

End With

关于excel - VBA 下标超出范围,名称解析问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54334691/

相关文章:

java - 如何获取 Excel 数据并将其转换为 JSON?

vba - 通过 GetTickCount 获取代码运行时并以特定方式格式化它

Excel VBA 匹配函数内的索引

excel - 使用 VBA 取消隐藏 Excel 中的行

excel - 在 VBA 中将 Excel 中的文本转换为数字

excel - 工作表中的 Active X 组合框

excel - Cells.Find() 引发 "Runtime Error 91: Object Variable or With Block Not Set"

Excel列表功能

excel - 如何计算 Excel 中两个数字之间的单元格数量?

vba - 使用 vba 地址用工作表函数结果填充 Excel 范围