更改列表框的样式

问题描述 投票:0回答:1

在Outlook 2010中,我有一个带列表框的用户窗体。该列表框有4列,其中显示了附件列表(“文件名”,“文件类型”,“文件大小”和“目标目录”列。

不幸的是,列表框在布局功能上受到限制,用户无法在运行时调整列宽(因此,我必须通过设计指定列宽)。因为文件路径可以很安静,所以我将最后一列的宽度设置为999 Pt。

所以我的ListBox有一个水平滚动条

我想对我的列表框进行以下布局更改:

  1. 添加列标题
  2. 将列的对齐方式更改为右对齐
  3. 可选:允许用户按任何列对列表进行排序
  4. 可选:允许用户排序​​以更改任何列的宽度
  5. 可选:在列表框中显示网格

对于1.,我发现一些答案,这很复杂,应该在列表上方使用静态标签。这是不可能的,因为我的ListBox可以水平滚动。

ListBox是否真的受到如此限制,或者#1和#2可能以某种方式出现?

我知道有可用的国外组件,但我不允许购买任何组件。

而且我的解决方案也应该在我的同事那里工作,因此他们也必须安装这些组件。

vba outlook listbox outlook-vba
1个回答
0
投票

我一直在尝试解决您问题的方法。我想我已经尽可能多地使用了列表框方法,所以我将分享我发现的内容。

我在网上找不到任何东西,建议任何人都相信您可以拥有列表框列标题,而无需使用属性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加载数据”。我不清楚您表单上的数据,因此我从装满垃圾邮件的文件夹中导入了选定的详细信息,然后将其写入工作表。我调整了列表框的列大小以匹配工作表的列。结果是:

Scrollable listbox with column headings

文本有点小,但我认为它是可读的。底部的列表框使我可以选择不同时期的电子邮件。很久以前,我遇到了RowSource的问题,这意味着我可以更改范围内的值,但不能更改范围的大小。我今天设法避免了这个问题,或者这是一个已修复的错误。

您可以看到显示了标题。列有点宽,但我认为它们是一个合理的第一近似值。更改宽度的选项很容易实现。

您要求的更改:

  • 添加列标题。完成
  • 将列的对齐方式更改为右对齐。可能但困难。您需要在文本前加上适当数量的前导空格。
  • 可选:允许用户按任何列对列表进行排序。数据在工作表中非常容易。
  • 可选:允许用户更改任何列的宽度。我已经在运行时设置了列宽以表明可能。
  • 可选:在列表框中显示一个网格。不可能。

如果以上内容有趣,我可以向您展示所有代码,并指导您创建表格,以便您可以重复实验。或者,我只可以解释一下:如何将Outlook数据导入Excel,如何包括列标题以及如何设置列宽。

我找不到任何建议表明列表框可以实现更好的结果。

一种替代方法是使用标签网格。这样可以提供吸引人的外观,并且一列或多列可以右对齐。使用用户窗体的Controls属性,可以将网格视为二维数组。我很早以前就使用过这种技术,发现它很有吸引力,并不是特别困难。

© www.soinside.com 2019 - 2024. All rights reserved.