如何从 2 张 excel 中提取数据并将其显示在 VB 表单字段中
Posted
技术标签:
【中文标题】如何从 2 张 excel 中提取数据并将其显示在 VB 表单字段中【英文标题】:How to Extract data from 2 sheets of excel and display them in VB form fields 【发布时间】:2011-05-14 06:38:43 【问题描述】:我有 2 张 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 中)应该显示在用户表单 ListBox1 中。 我是 vba 和 excel 的新手,所以在谷歌的帮助下,我终于能够执行上述一些任务,但我没有得到任何头尾如何将选定的范围值连接到文本框和列表框。 任何帮助都将受到高度赞赏,对我来说将是一个很好的学习课程。 这是我创建的一半但不起作用的代码。
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】:这可能会让你走上正轨:
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 水平显示数据,那么:
-
在 ListBox 属性中将
ColumnHeads
设置为True
在 ListBox 属性中设置 ColumnCount
equel 为 52
现在将For each cl...
code aboe 替换为:
Dim rng As Range
Set rng = Worksheets("Sheet3").Range("B" & rw & ":AZ" & rw)
Me.ListBox1.RowSource = rng.Address
【讨论】:
@mark - 没问题。假设您对解决方案感到满意,您是否能够接受答案? 是的,它 100% 正常工作,正是我想要的。刚才我正在调整它,就像 ComboBox1.RowSource = "A2:A20" 正在从当前(qny)打开的工作表而不是 sheet2 中挑选数据 嗨,Remnant,你能帮我再问一个问题吗?在 sheet3 步骤中 ListBox1.AddItem cl 垂直显示值,但我希望它显示为在 excel 表中显示,即第一行应该选择从 B1-AZ1 范围内的标题,然后列表框项目应该出现在相应的列标题下方抱歉这么多问题:) 但我拼命想弄清楚这一点以上是关于如何从 2 张 excel 中提取数据并将其显示在 VB 表单字段中的主要内容,如果未能解决你的问题,请参考以下文章