vba - 更改列表框的样式
问题描述
在 Outlook 2010 中,我有一个带有 ListBox 的用户窗体。这个 ListBox 有 4 列,我在其中显示附件列表(列“文件名”、“文件类型”、“文件大小”和“目标目录”。
不幸的是,ListBox 的布局功能受到限制,用户无法在运行时调整列宽(因此我必须通过设计指定列的宽度)。因为文件路径可以很长,所以我将最后一列的宽度设置为 999 Pt。
所以我的 ListBox 有一个水平滚动条。
我想对我的 ListBox 进行以下布局更改:
- 添加列标题
- 将列的对齐方式更改为右对齐
- 可选:允许用户按任何列对列表进行排序
- 可选:允许用户排序改变任何列的宽度
- 可选:在 ListBox 中显示一个网格
对于 1. 我找到了一些答案,这很复杂,我应该使用列表上方的静态标签。这是不可能的,因为我的 ListBox 可以水平滚动。
ListBox 真的那么受限制还是#1 和#2 可能以某种方式?
我知道有外国元件可用,但我不能购买任何元件。
我的解决方案也应该适用于我的同事,所以他们也必须安装这些组件。
解决方案
我一直在尝试解决您的问题的可能方法。我想我已经尽可能地采用了列表框方法,所以我将分享我的发现。
我在网上找不到任何建议有人认为您可以在不使用属性 RowSource 的情况下拥有列表框列标题。要使用 RowSource,请将其设置为 Excel 范围。
我让 Outlook 创建一个 Excel 工作簿并向其中写入一些数据。不幸的是,我找不到任何让 Outlook 用户表单访问 Excel 范围的方法。设置 RowSource 的语法是:
ListBox1.RowSource = "Emails!A2:D20"
这不是范围的标准语法,我没有发现任何扩展它以包含工作簿名称的方法。
Jonah_Hess 在https://stackoverflow.com/a/43381634/973283中描述了一种有趣的方法。他有两个列表框。一个是包含标题的单行列表框,另一个包含数据。这两个列表框设置为相同数量的具有相同宽度的列。这提供了一个有吸引力的外观,但如果您滚动数据列表框,标题列表框不会随之滚动。这与将标签放在单个列表框上方并没有什么不同。
我尝试将标题和数据列表框放在一个框架中并滚动框架,但无法让它工作。我在 VB 用户表单中使用了框架,但功能非常不同,因此没有任何经验教训可以带到 VBA 用户表单中。也许更熟悉 VBA 框架的人可以使用这种方法。
我放弃了尝试在 Outlook 中获得解决方案。Excel 宏可以访问 Outlook 数据,所以我尝试了这种方法。
我创建了一个启用宏的工作簿。在其中,我有两个表格,它们都填满了屏幕以隐藏工作表。第一个表单只是说:“我正在从 Outlook 加载数据,请稍候”。我不清楚您表单上的数据,所以我从一个充满垃圾邮件的文件夹中导入了选定的详细信息,这些邮件是我写到工作表中的。我调整了列表框列的大小以匹配工作表的列。结果是:
文字有点小,但我认为它是可读的。底部的列表框允许我选择不同时期的电子邮件。很久以前,我遇到了 RowSource 问题,这意味着我可以更改范围内的值,但无法更改范围的大小。我今天要么设法避免了这个问题,要么这是一个已修复的错误。
您可以看到标题已显示。列有点宽,但我认为它们是合理的第一近似值。更改宽度的选项很容易实现。
您要求的更改:
- 添加列标题。完毕
- 将列的对齐方式更改为右对齐。可能但困难。您需要用适当数量的前导空格填充文本。
- 可选:允许用户按任何列对列表进行排序。数据在工作表中非常容易。
- 可选:允许用户更改任何列的宽度。我在运行时设置了列宽以显示它是可能的。
- 可选:在 ListBox 中显示一个网格。不可能。
如果以上内容很有趣,我可以向您展示我的所有代码并指导您创建表单,以便您可以复制我的实验。或者,我可以解释一下:如何将 Outlook 数据导入 Excel,如何包含列标题以及如何设置列宽。
我找不到任何建议可以使用列表框实现更好的效果。
另一种方法是使用标签网格。这可以提供有吸引力的外观,并且一列或多列可以右对齐。使用用户窗体的 Controls 属性,您可以将网格视为二维数组。我很久以前就使用过这种技术,发现它很有吸引力并且不是特别困难。
推荐阅读
- python - Python:记住过程序列中的状态
- android - Kotlin 中具有 2 个以上构造函数的 init 块
- python - 从 PyCharm 连接到正在运行的 Spark-Session
- powershell - 用于服务器 2008 的 Powershell 脚本,用于获取 MSMQ 安全属性值
- java - Hibernate 6 自定义验证器消息如何从属性文件中显示?
- powershell - export-csv 是否有跳过重复条目?
- python - 带有 % 的 Flask URL 参数未正确处理
- javascript - 如何跟踪调用的方法
- html - 引导响应式图标和图像
- angular - ngrx - 确保所有 http 调用都已完成并存储在商店中