[英]Offset Match function in VBA/Userform
我正在嘗試建立一個用戶窗體,其中在組合框中選擇的值確定偏移量匹配函數的范圍。 查找值是在同一用戶窗體的文本框(TextBox1)中輸入的。
If ComboBox1 = "Something" Then
TryRun = Evaluate("Offset(Sheets('Sheet1').Range('B13'),MATCH(TextBox1.Value,Sheets('Sheet1').Range('B14:B33'),0),5)")
End If
當前,這將返回單元格G15的值,但是我需要做的就是簡單地選擇該單元格並將Textbox(TextBox2)的值粘貼到用戶窗體中。
Cells(TryRun).Value = TextBox2
似乎不起作用,因為它找不到為“ TryRun”定義的對象。 但是,看到這指的是一個單元格,我不知道將其定義為什么。
有人可以幫我嗎?
我已經嘗試過艾哈邁德(Ahmed)的U Vlookup解決方案來獲得此功能:
Private Sub OkButton_Click()
If Combobox1 = "Something" Then
TryRun = WorksheetFunction.VLookup(Val(Textbox1.Text), Range("B14:G33"), 6, False)
If IsEmpty(TryRun) Then
Msgbox "nope"
Textbox2.Text = "No Match found"
Else
Msgbox "almost..."
TextBox2.Value = TryRun
End If
End If
End Sub
這導致Textbox2在用戶窗體中返回值= 0,而沒有任何內容通過vlookup函數粘貼。
通過刪除on error
線上的代碼,代碼停止一起運行,錯誤行為TryRun = WorksheetFunction.VLookup(Val(Textbox1.Text), Sheets("Stuff").Range("B14:G33"), 6, False)
。 結果導致的錯誤是:錯誤424,需要對象。
編輯:
在刪除Dim TryRun As Long
我遇到了下一個絆腳石:目前,我返回的是“找不到匹配項”,而不是在指定單元格地址中返回Try Run的值。
編輯2:
不知何故,我現在在else
語句中返回第二個消息框。 雖然仍然沒有價值粘貼在TryRun中。
由於Evaluate用於運行工作表函數公式,而不是@Tim Williams注釋的VBA。 否則有很多方法可以解決問題
您可以嘗試WorksheetFunction.Match
Dim TryRun As Long
On Error Resume Next
TryRun = WorksheetFunction.Match(TextBox1.Value, Sheet1.Range("B14:B33"), 0)
On Error GoTo 0
If TryRun > 0 Then
TextBox2.Text = Sheet1.Range("G" & 13 + TryRun).Value
Else
TextBox2.Text = " No Match found"
End If
或嘗試WorksheetFunction.Vlookup
On Error Resume Next
TryRun = WorksheetFunction.VLookup(TextBox1.Text, Sheet1.Range("B14:G33"), 6, False)
' Vookup consider 1str column as 1, Col G will be 6
On Error GoTo 0
If IsEmpty(TryRun) Then
TextBox2.Text = " No Match found"
Else
TextBox2.Text = TryRun
End If
請注意,假設僅搜索文本類型數據。 對於數字類型的數據,請使用Val(TextBox1.Text)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.