我有两张数据表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
答案 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水平显示数据,那么:
ColumnHeads
设置为True
ColumnCount
设置为52 现在用以下代码替换For each cl...
代码:
Dim rng As Range
Set rng = Worksheets("Sheet3").Range("B" & rw & ":AZ" & rw)
Me.ListBox1.RowSource = rng.Address