VBA /用户表单中的偏移匹配功能

时间:2018-10-16 21:32:55

标签: excel vba

我正在尝试建立一个用户窗体,其中在组合框中选择的值确定偏移量匹配函数的范围。查找值是在同一用户窗体的文本框(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之后,我遇到了下一个绊脚石:目前,我返回的是“找不到匹配项”,而不是在指定的单元格地址中返回“尝试运行”的值。

编辑2:

不知何故,我现在在else语句中返回第二个消息框。仍然没有任何价值粘贴在TryRun中。

1 个答案:

答案 0 :(得分:0)

“评估”用于运行工作表函数公式,而不是@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)