Соответствие строки из массива в диапазон Excel VBA - PullRequest
0 голосов
/ 05 августа 2011

У меня есть следующий Public sub:

Public Sub HowToSort()
Dim i As Long, j As Long, h As Long, curCell As Range, cellBelow(1 To 10) As Variant
Dim sortOrder(1 To 10), colIsString(1 To 10) As Variant

For i = 1 To hdrCount
    'Find location of a cell
    Set curCell = Application.WorksheetFunction.Match(headRow(i), Range("a1:z1"))    ' Eventually extend outwards?
    cellBelow(i) = curCell.Offset(0, 1).Value
    If IsNumeric(cellBelow(i)) = False Then
        colIsString(i) = True
        sortOrder(i) = Application.InputBox(prompt:="Alphabetical = 'True' or Reverse Alphabetical = 'False' sorting for " & headRow(i), Type:=4)
    ElseIf IsNumeric(cellBelow(i)) = True Then
        colIsString(i) = False
        sortOrder(i) = Application.InputBox(prompt:="Ascending = True or Descending = False for " & headRow(i), Type:=4)
    Else
        MsgBox ("Program does not recognize value contained in column" & headRow(i))
        End
    End If
Next i
End Sub

, который использует глобальную переменную с именем headRow, содержащую массив строк имен строки заголовка в верхней части рабочего листа.Я пытаюсь использовать функцию соответствия, чтобы найти адрес ячейки, в которой расположен заголовок:

Set curCell = Application.WorksheetFunction.Match(headRow(i), Range("a1:z1"))
cellBelow(i) = curCell.Offset(0, 1).Value

Затем я хочу использовать этот адрес, сместить его вниз на одну ячейку, чтобы найти тип данныхвведены, эти данные будут введены в массив colIsString.Однако функция .Match не работает, ссылаясь на ошибку «Несоответствие типов».Я не знаю, как это могло быть?Из моего предыдущего исследования выяснилось, что команда .Match принимает диапазон, а затем ищет этот диапазон, чтобы соответствовать значению ячейки.Я пробовал несколько воплощений команды .Match безуспешно.Ваши мысли оценили ...

H3lue

1 Ответ

3 голосов
/ 05 августа 2011

Вместо этого используйте Find ():

Set curCell = Range("a1:z1").Find(headRow(i), , xlValues, xlWhole)
If Not curCell Is Nothing Then
    'found the header
    cellBelow(i) = curCell.Offset(0, 1).Value
    'etc etc
Else
    MsgBox "Header '" & headRow(i) & "' not found!"
End If

sortOrder и colIsString выйдут из области видимости, как только ваша подпрограмма выйдет ...

...