在Outlook 2010中,我有一个带列表框的用户窗体。该列表框有4列,其中显示了附件列表(“文件名”,“文件类型”,“文件大小”和“目标目录”列。
不幸的是,列表框在布局功能上受到限制,用户无法在运行时调整列宽(因此,我必须通过设计指定列宽)。因为文件路径可以很安静,所以我将最后一列的宽度设置为999 Pt。
所以我的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的问题,这意味着我可以更改范围内的值,但不能更改范围的大小。我今天设法避免了这个问题,或者这是一个已修复的错误。
您可以看到显示了标题。列有点宽,但我认为它们是一个合理的第一近似值。更改宽度的选项很容易实现。
您要求的更改:
如果以上内容有趣,我可以向您展示所有代码,并指导您创建表格,以便您可以重复实验。或者,我只可以解释一下:如何将Outlook数据导入Excel,如何包括列标题以及如何设置列宽。
我找不到任何建议表明列表框可以实现更好的结果。
一种替代方法是使用标签网格。这样可以提供吸引人的外观,并且一列或多列可以右对齐。使用用户窗体的Controls属性,可以将网格视为二维数组。我很早以前就使用过这种技术,发现它很有吸引力,并不是特别困难。