根据组合框值填充文本框

时间:2019-11-06 19:13:58

标签: excel vba combobox userform

我试图根据我在组合框上所做的选择填充文本框。基本上,它将查找组合框值,并从我选择的列(第3个)中返回分配的值。我完成了一些代码,但返回类型不匹配错误

Private Sub UserForm_Initialize()
ComboBox1.List = Sheets(1).Range("C15:C39").Value
End Sub

Private Sub ComboBox1_Change()
TextBox1.Text = Application.VLookup(ComboBox1.Value, Worksheets("sheet1").Range("A15:K39"), 3, False)
End Sub

任何人都可以让我知道这是怎么回事,以及是否有更好的解决方法?

3 个答案:

答案 0 :(得分:0)

假设您的组合不是多选的,则将其与所有范围一起加载,并仅显示您感兴趣的列。使ComboBox中的列数与范围中的列数相同。

ComboBox1.List = Sheets(1).Range("A15:K39").Value
ComboBox1.ColumnCount=11
ComboBox.ColumnWidths="0,0,100,0,0,0,0,0,0,0,0"
TextBox1.Value=ComboBox1.List(ComboBox.ListIndex,2) 'the columns are zero-based

答案 1 :(得分:0)

尝试一下:

TextBox1.Text = Application.WorksheetFunction.VLookup(ComboBox1.List(ComboBox1.ListIndex, 0), Range("C15:K39"), 1, False)

答案 2 :(得分:0)

谢谢你们, 我最终选择了这个

Private Sub ComboBox1_Change()
Dim myRange As Range, f As Range

    Set myRange = Worksheets("Sheet2").Range("A2:B26")

    Set f = myRange.Find(What:=ComboBox1.Value, LookIn:=xlValues, Lookat:=xlWhole, MatchCase:=False) '<--| try and find combobox selected value
    If f Is Nothing Then
        TextBox1.Value = ""
    Else '<--| ... otherwise...
        TextBox1.Value = f.Offset(, 1)
        TextBox2.Value = f.Offset(, 2)
        TextBox3.Value = f.Offset(, 3)
    End If
End Sub

一旦从组合框选择了一个选项,我就有3个文本框,其中填充了三个不同的列。

我想要做的是有两个最后的文本框,我最终将在其中输入数字,这将自动更新相应的单元格。

我面临的问题是更新与组合框中输入的值相关的单元格。 下面的代码非常基本,我想知道是否应该手动执行相同的操作。代码的第一部分填充了三个第一个文本框,第二部分应该根据组合框的选择,使用输入的值填充相应的单元格。如果我不够清楚,请告诉我。

Private Sub OK_Click()
    Sheets("Sheet1").Range("C9") = TextBox4.value
    Sheets("Sheet1").Range("D9") = TextBox5.value
End Sub