VBA项目从Office 2007访问哪些表单控件?

Gar*_*ill 5 vba office-2007 ms-office userform

在VBA项目中,您可以使用工具箱窗口创建UserForm并向其添加控件.默认情况下,工具箱窗口包含简单的表单控件,如Label,TextBox,ListBox等.

如果它们已安装在您的计算机上,您可以添加其他控件:右键单击工具箱上的"其他控件"可显示整个控件的冗余部分.但是,这并未说明它们来自何处.

我很想知道在安装了Office 2007的计算机上可以保证哪些控件可用.它只是标准的,还是一些"附加控件"也保证可用(因为它们与Office 2007一起提供,或者因为它们存在于Office 2007将运行的所有Windows版本上)?

例如,我很惊讶即使在Office 2007中也没有树视图控件.在我的"其他控件"列表中,我看到"Microsoft TreeView Control v6",但我不知道我是否可以依赖于所有人我的Office 2007用户.

ray*_*ray 6

您看到的控件是FM20.DLL的一部分; 这是Office安装的一部分.

通过查看"其他控件"框的"位置"部分,您可以看到它们都是同一DLL的一部分.

在此输入图像描述

AFAIK,这些是大多数Office安装可用的唯一控件.

所以说,让我们看看你在评论中可以为你提出的每个控件专门做些什么:

  1. "网格"能力列表
  2. 分层树视图
  3. 日历控制

网格

这将取决于您的要求,但您可以使用列表框.VBA中的列表框有一些属性可以使它像Grid一样.

例如,假设Excel中的工作表如下所示:

ID001   Value 1 Description 1
ID002   Value 2 Description 2
ID003   Value 3 Description 3
Run Code Online (Sandbox Code Playgroud)

列表框支持多个列,因此您可以通过将listbox属性ColumnCount设置为3并编写以下代码来显示这些值:

    Me.ListBox1.ColumnWidths = "50;100;200"
    Me.ListBox1.RowSource = Sheet1.Range("A1:C3").Address
Run Code Online (Sandbox Code Playgroud)

你会得到这样的东西: 在此输入图像描述

想要隐藏一个列?没问题,将ColumnWidths属性的宽度更改为零以隐藏列:

Me.ListBox1.ColumnWidths = "50;0;200" 'Hide column 2
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果你不能从中选择东西,网格有什么用呢,对吧?

在列表框中,将ListStyle属性更改为frmListStyleOption,然后将MultiSelect更改为frmMultiSelect.

这将为您提供一个看起来更像网格的列表框:

在此输入图像描述


日历

08/17/2012更新:阅读这篇文章. 其中一个回答的人创建了自己的日历控件.

Office(mscal.ocx)存在日历控件:

在此输入图像描述

但是,必须满足适当的条件:

  1. 必须在客户端计算机上安装Access
  2. Office版本不能是Office 2010,因为它已使用此版本删除(请参阅从Microsoft Access中删除的功能)

您仍然可以使用日历控件来使用2010和/或非Access Office安装,但它需要在客户端的计算机上执行其他步骤.

  1. 下载mscal.ocx
  2. 将其解压缩到windows/system32目录
  3. 注册它

树视图

如果您的客户端可以安装某些EXE,则可以让它们安装Microsoft Visual Basic 6.0 Common Controls.这将为您提供TreeView控件.

在此输入图像描述

我愿意打赌,大多数机器(特别是Windows XP上的旧机器)已经安装了这些OCX; 因此可能没有必要安装.

最大的问题是您在客户端计算机上部署OCX,从支持的角度来看这令人沮丧.