2011-08-05 49 views
0

私は、次のパブリック・サブを持っている:一致する文字列

の上部にヘッダー行の名前の文字列の配列を含む、headRowという名前のグローバル変数を使用しています
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 

ワークシート私は、ヘッダが配置されているセルのアドレスを見つけるために、match関数を使用しようとしています:

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

私は、このアドレスを使用したい、入力されたデータの種類を見つけるために、下方向に一つのセルを、それをオフセット、このデータは配列colIsStringに入力されます。しかし、.Match関数は動作しておらず、「型の不一致」というエラーを挙げています。私はこれがどうなるか分からない?私の以前の研究から、.Matchコマンドは範囲を取り込み、その範囲を検索してセルの値と一致するように見えます。 .Matchコマンドのいくつかの実装を成功させて試しました。あなたの考え感謝...

H3lue

答えて

3

使用ではなく)(検索:

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はしかし、すぐにあなたのサブ出るようスコープの外に行こう...

+0

感謝をあなたはそれを助けた! – H3lue