如何从两张excel中提取数据并在VB表单域中显示

我有两张表中的数据excel说sheet2和sheet3和两列的column1中的值是相同的。 所以我创build了一个下拉菜单(Combobox1),4个文本框和1个列表框。

下拉select从sheet2的列1(例如A2:20)的数据,然后一旦select一个值,它应分别在文本框中显示相应的行值,例如:从sheet2对应的col-2应显示在textbox1,col-3 in textbox2,col4 in textbox3,col5 in textbox4。 而从sheet3应该匹配column1值匹配从下拉列表中select的值(combobox)和所有相应的值(在Col 2 – Col52)应该显示在用户窗体ListBox1中的行。 我是新来的VBA和Excel,所以在谷歌的帮助下,我终于能够执行上面提到的一些任务,但我没有得到任何头和尾如何连接选定的范围值的文本框和列表框。 任何帮助将不胜感激,对我来说将是一个很好的学习课程。 这里是我创build的一半,而不是工作代码。

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 

这可能会使你走上正确的道路:

 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

现在更换For each cl...代码aboe与:

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