1

我想运行一个带有状态栏的用户表单。

我用下面的代码显示我的表单。我应该如何声明变量并为这些变量分配新值?

非常重要:我必须在我的项目中使用后期绑定

Sub RunMyUserForm()

With MyUserForm
    .LabelProgress.Width = 0
    .TextBox1 = 1
    'to make the progress bar color match the workbook's current theme:
    .LabelProgress.BackColor = ActiveWorkbook.Theme.ThemeColorScheme.Colors(msoThemeAccent1)
    .Show vbModeless
End With

End Sub

预先感谢您的帮助!

更新信息:

  1. 当我尝试使用“Option Explicit”运行我的宏时,它不起作用(Compile error: Variable not defined- 部分代码msoThemeAccent1标记为黄色)。这就是为什么我在定义变量时寻求帮助。
  2. 当我尝试在没有“选项显式”的情况下运行宏时,它不起作用(Err.Description: "Value is out of range",,Err.Number: -2147024809
  3. 当我尝试使用早期绑定运行我的宏时(通过 VBE 中的工具/参考引用“MS Office 对象库”),在使用(和不使用)“选项显式”的情况下,一切都可以完美运行。
4

1 回答 1

1

您的编译器将msoThemeAccent1其视为变量,并且未声明。这就是为什么您的代码无法运行的Option Explicit原因,也是您的代码在禁用时引发错误的原因Option Explicit.Colors是一个基于 1 的集合 (?) 所以当你打电话时:

ActiveWorkbook.Theme.ThemeColorScheme.Colors(msoThemeAccent1)

它正在编译为:

ActiveWorkbook.Theme.ThemeColorScheme.Colors(0)

这引发了一个预期的,尽管是神秘的错误。

我使用了一些代码来检查这个常量的值,但事后看来我应该只是参考文档:

http://office.microsoft.com/en-us/excel-help/HV080559557.aspx

这应该为您解决

ActiveWorkbook.Theme.ThemeColorScheme.Colors(5)

或者,如果您需要在代码中的多个位置依赖此值,您可以声明一个变量(公共或私有,范围取决于您需要它的用途)。

Public Const myAccentColor1 as Long = 5

然后,在您的代码中,您可以:

ActiveWorkbook.Theme.ThemeColorScheme.Colors(myAccentColor1)

修改

我现在明白了,如果不参考 MS Office 对象库,这是有道理的。这是我在 XLSB 文件中维护引用的为数不多的库之一,所以我的困惑是因为我认为我使用了适当的后期绑定,但实际上我使用的是早期绑定。

于 2013-09-30T21:53:15.867 回答