Попытка написать функцию 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 переменные разрешаются OK с помощью операторов debug.print, которые я получаю
Find MidTemp on RawData
RawData:MidTemp
Col 0
Выход из функции для запуска из-за ошибки происходит в Set wks = Sheets(shtName)
Если язамените аргумент shtName на фактическое имя листа в виде строки «RawData», затем ошибка переместится вниз на строку, используя второй аргумент heading
.Если я заменит параметр на строку здесь, ошибка не исчезнет.Есть что-то, чего я здесь не хватаетНекоторая помощь будет высоко ценится.