excel - Excel VBA:使用下拉列表显示表格数据
问题描述
我是VBA的初学者。我在 Excel 中有一个工作表,其中创建了每个月的表格来计算每个月的总工时。这些表位于工作表的不同列中。此表中的数据使用手动输入的数据填充到每个月创建的各个工作表中。
目前,这是手动完成的,并且列表变得很长。我想通过创建一个下拉列表过滤器并从每个月和年检索相应的数据并以日历的形式显示它来改进这一点。谁能指导我如何做到这一点?
这是我要编译的工作表的示例:
我希望它看起来像这样,其中数据的数据将根据我从各个月份检索到的数据而变化。月份和年份将以下拉列表的形式显示。
该工作簿将每天更新。所涉及的工作表的名称将以如下格式命名:Jul'19、Aug'19、Sept'20 等。随着时间的推移,将会创建更多工作表。
解决方案
请创建一个表单并将下一个代码放入其模块中:
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
因此,您必须放置一个名为“ListBox1”的组合框cbMonth
和一个名为“ListBox1”的列表框。
在表单Initialize
事件中,组合框将填充工作表名称。
在组合框Change
事件中,“ListBox1”填充了所选工作表名称的第一个表格范围。因此,在每个工作表中应该只存在一个表,或者,如果有更多表,则必须是第一个表。
您还可以使用其DblClick
事件在列表框中输入数据。将询问用户要输入数据的日期,然后也可以更新工作表......
推荐阅读
- mysql - 无法为复制更改表创建目标表
- linux - 将 xUnit 与 .NET 二进制文件一起使用
- reporting-services - 如何将聚合列中的记录传递给子报表 SSRS
- python - KeyError 异常的值用单引号括起来
- node.js - 嵌套元素中的 Geo JSON (Mongoose)
- azure-web-app-service - .Net 5 Api System.NotSupportedException:不支持“System.Type”实例的序列化和反序列化
- lda - “解压的值太多(预期为 2)”错误
- wpf - 在 WPF 中将 CMYK tif 图像打印到 CMYK pdf 会失去颜色
- google-chrome-extension - 更新服务工作者的本地存储,Chrome 扩展
- java - 删除文档文件后 takePersistableUriPermission 访问丢失