从组合框vlookup设置单元格值

时间:2019-01-21 18:50:28

标签: excel vba

通过组合框查找并返回第二列值有效

Private Sub ComboBox1_Change()
    Dim x As Variant   
    x = Me.ComboBox1.Value
    myLookupValue = x
    Set myTableArray = Worksheets("material pricing").Range("matprice")
    myVLookupResult = Application.WorksheetFunction.VLookup(x, myTableArray.Value, 2, False)
    MsgBox "Product " & x & " is " & Format(myVLookupResult, "#,##0")
    End Sub

更改返回值= textbox14给出错误

Private Sub CommandButton4_Click()
Worksheets("material pricing").Range(myVLookupResult).Value = TextBox14.Value
End Sub

1 个答案:

答案 0 :(得分:1)

myVLookupResult对于UserForm_Initialize()过程而言是本地的:它在此处定义,存在于此,并且没有其他地方。一旦执行离开了过程的范围,局部变量将不复存在:它消失了,并且其值不可访问。

Option Explicit未被指定也没有帮助。

Private Sub ComboBox1_Change()
    Dim x As Variant   
    x = Me.ComboBox1.Value
    myLookupValue = x
    Set myTableArray = Worksheets("material pricing").Range("matprice")
    myVLookupResult = Application.WorksheetFunction.VLookup(x, myTableArray.Value, 2, False)

这里myVLookupResult与您在UserForm_Initialize中使用的变量不同:它是另一个ComboBox1_Change过程本地的局部变量,只是没有声明-唯一的方法是合法,是因为未指定Option Explicit是允许的。

因此,将在该过程中即时创建名为myVLookupResult的局部变量,并在遇到End Sub时死亡。

因此,当CommandButton4_Click处理程序运行时:

Private Sub CommandButton4_Click()
Worksheets("material pricing").Range(myVLookupResult).Value = TextBox14.Value
End Sub

myVLookupResult是另一个新的局部变量,这次是CommandButton4_Click过程的局部变量-除外,它没有值,所以它是Variant/Empty,并且不是有效的{{ 1}}地址,因此您得到的错误是运行时错误1004:Range不合法。

Worksheet.Range(Empty)放在模块(以及您编写的每个模块!)的顶部。这将阻止VBA成功编译未声明其变量的代码(这可以防止意外的输入错误!)。

然后,将Option Explicit的声明移至模块级,如下所示:

myVLookupResult

现在,此操作解决了Option Explicit Private myVLookupResult As Long 问题……但并没有使Variant/Empty的调用变得更加合法。

说变量包含Range

42

我不确定您要在此处分配哪个特定的单元格,但是Worksheets("material pricing").Range(42).Value = TextBox14.Value 必须是有效的单元格引用。假设您要写入单元格42,则可以将F4242连接起来,如下所示:

"F"

那应该可行。