簡體   English   中英

VBA /用戶表單中的偏移匹配功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM