5

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

如果您的机器上安装了其他控件,您可以添加它们:右键单击工具箱上的“附加控件”会显示一整套控件。然而,这并没有说明他们来自哪里。

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

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

4

1 回答 1

6

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

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

在此处输入图像描述

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

话虽如此,让我们看看可以针对您在评论中询问的每个控件专门执行哪些操作:

  1. “网格”功能列表
  2. 层次树视图
  3. 日历控件

网格

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

例如,假设 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

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

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

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

在此处输入图像描述

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

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

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

在此处输入图像描述


日历

2012 年 8 月 17 日更新:阅读这篇文章其中一位回答的人创建了自己的日历控件。

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,从支持的角度来看,这令人沮丧。

于 2012-07-25T14:59:51.143 回答