如何从2张excel中提取数据并在VB表单字段中显示它们

时间:2011-05-14 06:38:43

标签: excel vba excel-vba

我有两张数据表excel表示sheet2和sheet3,两张表的column1中的值相同。所以我创建了一个带有1个下拉列表(Combobox1),4个文本框字段和1个列表框字段的用户表单。

下拉列表从sheet2的第1列(例如A2:20)中选择数据,然后一旦选择了值,它应分别在文本框中显示相应的行值 例如: 从sheet2对应的col-2应显示在textbox1中,col-3显示在textbox2中,col4显示在textbox3中,col5显示在textbox4中。 而来自sheet3的它应匹配column1值与下拉列表(组合框)中所选值匹配的行,并且所有相应的值(在Col 2 - Col52中)应显示在userform ListBox1中。 我是vba的新手并且在谷歌的帮助下表现出色,最后我能够执行上面提到的一些任务,但我没有得到任何头和尾如何将选定的范围值连接到文本框和列表框。 任何帮助将受到高度赞赏,对我来说将是一个很好的学习课程。 这是我创建的一半而不是工作代码。

Private Sub ComboBox1_Change()

Application.ScreenUpdating = False


Dim CL As Object

Worksheets(2).Select

For Each CL In Worksheets(2).Range("A2:A20")
If CL = ComboBox1.Text Then
Range(ActiveCell, ActiveCell.Offset(0, 4)).Copy Destination:=ActiveCell.Offset(0, 5)

End If
Next
Worksheets(2).Select
End Sub



Private Sub UserForm_Activate()
ComboBox1.RowSource = "A2:A20"
End Sub

1 个答案:

答案 0 :(得分:1)

这可能会让你走上正轨:

Private Sub ComboBox1_Change()
    Dim rw As Long, cl As Range

    rw = WorksheetFunction.Match(Me.ComboBox1.Value, Worksheets("Sheet2").Range("A1:A20"), 0)
    TextBox1 = Worksheets("Sheet2").Range("A" & rw).Offset(0, 1)
    TextBox2 = Worksheets("Sheet2").Range("A" & rw).Offset(0, 2)
    TextBox3 = Worksheets("Sheet2").Range("A" & rw).Offset(0, 3)
    TextBox4 = Worksheets("Sheet2").Range("A" & rw).Offset(0, 4)

    ListBox1.Clear

    For Each cl In Worksheets("Sheet3").Range("B" & rw & ":AZ" & rw) //Here AZ is column 52 in worksheet
        ListBox1.AddItem cl
    Next cl
End Sub

Private Sub UserForm_Activate()
    ComboBox1.RowSource = "A1:A20"
End Sub

<强>更新

如果您希望ListBox水平显示数据,那么:

  1. 在ListBox属性中将ColumnHeads设置为True
  2. 在ListBox属性中,将ColumnCount设置为52
  3. 现在用以下代码替换For each cl...代码:

    Dim rng As Range
    Set rng = Worksheets("Sheet3").Range("B" & rw & ":AZ" & rw)
    Me.ListBox1.RowSource = rng.Address
    
相关问题