[英]VBA: How do I write an If statement using a true/false method and VLookup code?
我很難用措辭來表達問題的標題,對不起。 我創建了一個 VBA 表單。 在linebx
組合 bx 我有以下代碼,預填充PilotBx
和TailBx
文本框。
我的問題是,當 linebx 填充的值不在該 linebx 下拉列表中(不在 VLookup 范圍內)時,它會發送錯誤消息
“運行時錯誤‘1004’:無法獲取 worksheetFunction 類的 VLookup 屬性”
我知道這意味着什么,我只是不知道如何解決它。
我需要代碼來PilotBx
和TailBx
文本框,如果LineBx
匹配,下拉(VLookup 范圍),如果不需要,我需要它接受輸入的LineBx
編號並將PilotBx
和TailBx
文本框留空。
如果您有任何問題或我可以提供幫助的詳細信息,請告訴我。 提前感謝您的幫助!
這是我創建的表單的視覺效果:
Dim z As Double
Dim h As Double
Dim k As String
z = LineBx.Value
h = Application.WorksheetFunction.VLookup(LineBx.Value, Sheets("StepBrief").Range("A2:E43"), 1, False)
If h = z Then
k = True
Else
k = False
End If
If k = True Then
TailBx.Text = Application.WorksheetFunction.VLookup(z, Sheets("StepBrief").Range("A2:E43"), 3, False)
PilotBx.Text = Application.WorksheetFunction.VLookup(z, Sheets("StepBrief").Range("A2:E43"), 2, False)
Else
TailBx.Value = ""
PilotBx.Value = ""
End If
你可以去:
Dim h As Double
Dim k As String
z = LineBx.Value
h = -1
on error resume next
h = Application.WorksheetFunction.VLookup(LineBx.Value, Sheets("StepBrief").Range("A2:E43"), 1, False)
on error goto 0
它執行您的查找,在找不到查找時不會引發錯誤。 h 將是 -1 不等於 z。 您可以使用任何值將 h 設置為,只要它不等於 z 就可以了。
我通過在頂部添加On Error Resume Next
並“清除”了PilotBx
和TailBx
來抑制錯誤消息,我覺得這是一種解決問題的廉價方法,但它確實有效。
z = LineBx.Value
On Error Resume Next
TailBx.Value = ""
PilotBx.Value = ""
TailBx.Text = Application.WorksheetFunction.VLookup(z, Sheets("StepBrief").Range("A2:E43"), 3, False)
PilotBx.Text = Application.WorksheetFunction.VLookup(z, Sheets("StepBrief").Range("A2:E43"), 2, False)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.