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

时间:2012-07-17 15:53:48

标签: vba ms-office office-2007 userform

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

如果您的计算机上安装了其他控件,则可以添加其他控件:右键单击工具箱上的“其他控件”可显示整个控件的冗余部分。但是,这并没有说明它们来自何处。

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

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

1 个答案:

答案 0 :(得分:6)

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

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

enter image description here

AFAIK,这些是大多数Office安装所保证的唯一控件。

如上所述,让我们看一下您在评论中可以针对每个控件做些什么:

  1. “grid”能力列表
  2. 分层树视图
  3. 日历控件

  4. 网格

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

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

    ID001   Value 1 Description 1
    ID002   Value 2 Description 2
    ID003   Value 3 Description 3
    

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

        Me.ListBox1.ColumnWidths = "50;100;200"
        Me.ListBox1.RowSource = Sheet1.Range("A1:C3").Address
    

    你会得到这样的东西: enter image description here

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

    Me.ListBox1.ColumnWidths = "50;0;200" 'Hide column 2
    

    enter image description here

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

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

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

    enter image description here


    日历

    08/17/2012更新: 阅读this post。已回答的One of the guys创建了自己的日历控件。

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

    enter image description here

    但是,必须满足正确的条件:

    1. 必须在客户端计算机上安装Access
    2. Office版本不能为Office 2010,因为它已使用此版本删除(请参阅从Microsoft Access中删除的功能
    3. 您仍然可以使用日历控件来使用2010和/或非Access Office安装,但它会在客户端的计算机上执行其他步骤。

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

      4. 的TreeView

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

        enter image description here

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

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