2017-06-14 79 views
1

我想使用vba代碼在另一個工作表中搜索一個值並返回行號,以便可以用一個字符串填充相鄰的單元格。問題是「findrow」返回空白。當我嘗試運行並將鼠標懸停在該部分上時,「.find(findrng)」顯示爲14/01/17。VBA查找函數不工作

如果我將Findrng更改爲諸如「Home」之類的單詞並在文件中輸入此代碼返回正確的行數,所以這個問題必須與日期。任何人都可以使用.Find的日期幫助?

Private Sub Enter_Click() 
Dim FindWor As Range 
Dim Findrng As String 
Dim FindRowNumber As Long 

Findrng = Me.Date1 
With Worksheets("Data").Range("$A:$A") 
Set FindWor = .Find(what:=Findrng) 
FindRowNumber = FindWor.Row 

.Cells(FindRowNumber, 2).Value = Me.Event1 
End With 

End Sub 

感謝

史蒂芬

+0

我不明白你是什麼問題,但你可以改變你的變量名稱查找.. –

+0

我編輯了信息,我的問題是findrow在運行代碼時是空白的。當我走出VBA並手動嘗試查找信息時,它已經填充到查找框中。這可能是日期問題嗎?數據選項卡的列A基本上是從01/01/17開始的兩年的日期 –

+0

嘗試'Set FindWor = .Find(what:= Find)'。此外,我建議不要使用'Find'作爲變量名稱,因爲它是Excel中的函數,使用類似'findRng'的東西... – BruceWayne

回答

1

此:

Set FindWor = .Find(what:=Findrng) 

Findrng是一個字符串,並且數據有日期,所以它肯定會返回任何結果。

如果你不知道什麼會你的代碼搜索天氣字符串或日期,先找到值的字符串,如果沒有找到將其轉換爲日期,並做一個搜索再次

Set FindWor = .Find(what:=Findrng) 

    if FindWor is nothing then 
      Set FindWor = .Find(what:=cdate(Findrng)) 
    end if 
+0

這正是我所需要的。現在工作。謝謝您的幫助。 –

1

您必須Dim FindRowNumber爲

2

Find方法有許多可選參數,它們沒有預定義的默認值,而是默認爲上次使用的值,無論是通過代碼還是通過Excel用戶界面。 您應明確聲明所有參數以獲得一致和預期的行爲

Range.Find方法被定義爲:

Function Find(What, Optional After, Optional LookIn, Optional LookAt, Optional SearchOrder, Optional SearchDirection As XlSearchDirection = xlNext, Optional MatchCase, Optional MatchByte, Optional SearchFormat) As Range

您需要爲的這些參數都提供值,即使它們標記爲Optional

Find方法也如果找不到匹配項,則返回Nothing參考,因此您在檢查屬性之前需要測試Nothing。例如:

Set FindRow = .Find(Find) 
If Not FindRow Is Nothing Then 
    FindRowNumber = FindRow.Row 
End If 
+0

對不起,我不確定我明白你的意思。我在我的文本中添加了一個格式,我希望找到,這會有幫助嗎?我可以添加一些代碼來返回評論框,我沒有發現任何值。我沒有想到那麼謝謝。 –

+0

嗨@ThunderFrame,我已經改變了我的代碼,以包括可選的細節,但這帶來了更多的問題,我認爲這是由於可選後,因爲我不是開始在工作表上,我想搜索,但我從用戶表單。我的主要問題看起來是因爲我正在尋找一個日期,因爲上面的代碼適用於「Word」。你能推薦什麼搜索日期嗎? –