尝试编写一个 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/