2017-05-28 48 views
0

當我嘗試搜索特定列中的值時,VBA查找方法似乎失敗。 此代碼Excel VBA查找特定列的方法

Sub TargetR() 
Dim CLL As Range 
Dim TargetRange As Worksheet 
Dim R As Range 

Set CLL = ThisWorkbook.Worksheets(1).Range("J29") 
Set TargetRange = ThisWorkbook.Worksheets(1) 
Set R = TargetRange.Cells.Find(CLL.Value) 

If Not (R Is Nothing) Then 
    Debug.Print R.Address 
Else: Debug.Print "Empty" 
End If 

End Sub 

完美地工作。 雖然通過用關鍵字報頭中的列的限制搜索失敗:

Sub Target() 
Dim CLL As Range 
Dim TargetRange As Worksheet 
Dim targetColumn As Range 
Dim sColumn As Range 


Dim R As Range 

Set CLL = ThisWorkbook.Worksheets(1).Range("J29") 
Set TargetRange = ThisWorkbook.Worksheets(1) 
Set sColumn = TargetRange.Cells.Find("This Column") 
Set targetColumn = sColumn.EntireColumn 
Set R = targetColumn.Cells.Find(CLL.Value) 

If Not (R Is Nothing) Then 
    Debug.Print R.Address 
Else: Debug.Print "Empty" 
End If 

End Sub 

通過xlByColunm指定搜索方向沒有幫助

+0

是什麼'設置sColumn = TargetRange.Cells.Find(「這列」)'給你?你還需要檢查'sColumn'是否分配給'targetColumn'之前什麼都沒有。 –

+0

我剛剛測試了代碼。這個對我有用。 BTW'.Find'保留最後的設置。確保您設置所有參數。例如,'LookIn:= xlFormulas,_ LookAt:= xlPart,SearchOrder:= xlByRows,SearchDirection:= xlNext,_ MatchCase:= False,SearchFormat:= False' –

回答

2

嘗試下面的代碼(該代碼作爲註釋內說明):

Option Explicit 

Sub Target() 

Dim CLL As Range 
Dim TargetRange As Worksheet 
Dim sColumn As Range 
Dim R As Range 

Set CLL = ThisWorkbook.Worksheets(1).Range("J29") 
Set TargetRange = ThisWorkbook.Worksheets(1) 

Set sColumn = TargetRange.Cells.Find("This Column") 
If Not sColumn Is Nothing Then ' <-- make sure Find was successful 
    Set R = sColumn.EntireColumn.Find(what:=CLL.Value, LookIn:=xlValues, lookat:=xlWhole)   
    If Not R Is Nothing Then 
     Debug.Print R.Address 
    Else: Debug.Print "Empty" 
    End If 
Else ' Find failed to find "This Column" 
    MsgBox "Unable to find 'This Column'" 
End If 

End Sub 
0

正如我想的那樣,如果需要查找的值包含在合併單元格中,並且Find methoud僅應用於包含該合併單元的一部分的最左列,則Find方法無法正常工作。對於我的VBA代碼能夠正常工作,一些額外的合併檢查,搜索區域的後續擴展他回答

If sColumn.MergeCells Then 
       Set sColumn = Column.Resize(,Column.MergeArea.Columns.Count)