我正在爲我的工作場所(即大型科學中心的Outreach部門)開發數據庫。我們有很多學校違反了我們(非常具體)的合同,所以我們希望追蹤並減少這些違規行爲。我想要用戶(進入一所新學校時)拉起用戶表單,輸入學校名稱,然後單擊搜索按鈕以填充與他們輸入的學校名稱匹配的列表框。如果他們點擊該列表中的一所學校,該表單將使用該名稱作爲學校名稱。如果沒有,它會提示他們輸入一個新的學校名稱。VBA Range.Find程序 - 找不到類型不匹配
我的代碼現在很基本。我正在嘗試使用FindNext過程來提取學校名稱的所有實例,但我得到了類型不匹配錯誤(#13)和我目前使用的代碼,並且找不到可能會出現的錯誤從。我已經檢查過沒有變量或Userform對象拼寫錯誤。
我希望Find函數僅返回第一個單元格的Range,以便我可以根據需要將它轉換爲.Address或.Value。
Option Explicit
Private Sub cbtnSearchSchool_Click()
Dim lrow As Long
Dim schoolmatch As Range
'defines "lrow" as the last completely empty row in the table
lrow = Cells.find(What:="", _
After:=Range("A1"), _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False).Row
Range("A1").Activate
'defines "schoolmatch" variable as the first school in the list that
'matches what was entered in the text box.
Set schoolmatch = Range("SchoolName").find(What:=txtbSchoolName.Value, _
After:=ActiveCell, _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
'returns value of first found cell to check for accuracy
MsgBox schoolmatch.Value
This is a photo of the Userform if anybody would like to see it.
編輯:對不起,我其實尺寸schoolmatch的範圍和原來只是改變它,而我是調試對象 - 我之前和改變之後得到了同樣的錯誤。
它向我顯示我得到的錯誤 - 這是Set schoolmatch = Range.Find
操作,但我無法弄清楚我會混淆數據類型的任何地方。我有一個SchoolName範圍,我已經仔細檢查過,並且檢查了拼寫錯誤的所有其他變量名稱。
隨着時間的推移,這個列表中會有成千上萬的學校,所以這個搜索功能對於用戶在表單上選擇一所學校之前過濾一些結果是必要的。
lRow被定義爲「Long」,但您試圖將其設置爲等於「Range」對象。 – braX
@braX如何和在哪裏? – sktneer
@braX你的陳述是錯誤的,因爲'range'末尾有'.Row',這使得它是數字而不是範圍,誰應該低估自己的投票權 – Ibo