如何从 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 表单字段中的主要内容,如果未能解决你的问题,请参考以下文章

比较excel文件中多张工作表的列标题并将其提取到R

从数据库中提取 pdf 并将其显示在我的 cshtml 上

我如何提取合并的数据并将其放入不同的工作表中?

使用 Python 提取和合并 Excel 数据

Excel - 将相关数据从一个表提取到另一个表

使用公共 API 从站点中提取 JSON 数据并将其异步显示在页面上