【问题标题】:Excel VBA: Displaying table data using drop down listExcel VBA:使用下拉列表显示表格数据
【发布时间】:2020-11-26 11:55:05
【问题描述】:

我是 VBA 的初学者。我在 Excel 中有一个工作表,其中创建了每个月的表格来计算每个月的总工时。这些表位于工作表的不同列中。此表中的数据使用手动输入的数据填充到每个月创建的各个工作表中。

目前,这是手动完成的,并且列表变得很长。我想通过创建一个下拉列表过滤器并从每个月和年检索相应的数据并以日历的形式显示它来改进这一点。谁能指导我如何做到这一点?

这是我要编译的工作表示例:

我希望它看起来像这样,其中数据的数据将根据我从各个月份检索的数据而变化。月份和年份将以下拉列表的形式显示。

工作簿将每天更新。所涉及的工作表的名称将以如下格式命名:Jul'19、Aug'19、Sept'20 等。随着时间的推移,将会创建更多工作表。

【问题讨论】:

  • “创建一个下拉列表过滤器并从每个月和每个年检索相应的数据并以日历的形式显示”并没有说太多。您是否确切知道看起来像日历的表格应该是什么样子?如果是,最好也向我们展示您的想法……我不明白要做什么。
  • 嗨@FaneDuru 我已经做出了改变。谢谢
  • 好的。但是这种方法的目的是什么?您想在表单上进行输入,还是仅以您向我们展示的方式查看?为了看到它,创建一个 listBox 并用适当的月份情况填充它就足够了。如果您想/需要在表单而不是表格中输入数据,事情就会变得更加复杂。而问题又来了,为什么你觉得会比直接在sheet中输入数据更好?
  • @FaneDuru 我只需要像我在这里展示的那样展示它。这是因为此处提供的数据是其他相应工作表中其他几个组件的计算总和。另外,我如何在程序中指定它,以便如果选择 8 月和 2020 年,它将查找工作表“Aug'20”,如果选择了 7 月和 2020 年,那么它将查找“Jul'20”,反之亦然反之亦然?
  • 让我们首先明确什么是down。那么怎么做... 那么,您是否只想在特定月份加载它们,但无法修改任何内容?如果是,我将向您解释我如何看待此类任务的解决方案。如果我有时间,我可能会创建一段代码,解释表单上应该存在哪些控件。但是,这些表的名称到底是什么?我可以在你的照片中看到“May-19”、“Jul-19”等,并且以你向我们展示“September”这个词和另一个保持“2020”的组合的形式。

标签: excel vba


【解决方案1】:

请创建一个表单并将下一个代码放入其模块中:

Option Explicit

Private Sub UserForm_Initialize()
    Dim sh As Worksheet, wb As Workbook
    
    Set wb = ActiveWorkbook
    For Each sh In wb.Sheets
        Me.cbMonth.AddItem sh.Name
    Next sh
End Sub

Private Sub cbMonth_Change()
  Dim wb As Workbook, sh As Worksheet, Tbl As ListObject
  Set wb = ActiveWorkbook
  Set sh = wb.Sheets(Me.cbMonth.Value)
  Set Tbl = sh.ListObjects(1)
  arr = Tbl.Range.Value
   With Me.ListBox1
        .ColumnCount = UBound(arr, 2)
        .ColumnWidths = "40;25;22;23;22;22;22;48;40"
        .list = arr
   End With
End Sub

因此,您必须放置一个名为cbMonth 的组合框和一个名为“ListBox1”的列表框。

在表单 Initialize 事件中,组合框会填充工作表名称。

在组合框Change 事件中,“ListBox1”将填充所选工作表名称的第一个表格范围。因此,在每张表中应该只存在一个表,或者,如果有多个表,则必须是第一个。

您还可以使用其DblClick 事件在列表框中输入数据。系统会询问用户要输入数据的日期,然后表单也可以更新...

【讨论】:

  • 抱歉回复晚了,我刚试过这个,效果很好!非常感谢!!
  • @jqy:很高兴我能帮上忙!但是您不喜欢使用表格列表框来填写时间吗?当然,更新表格也是...
  • 啊,是的!将来也会研究这些实现!
  • @jqy:如果您对这个问题提出新问题,发布现有代码并标记我(这里),我可以提供帮助。关于要完成的方式,我脑子里有些东西......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2015-05-22
  • 1970-01-01
相关资源
最近更新 更多