带有ThemeColorScheme和后期绑定的VBA用户表单

时间:2013-09-27 22:53:06

标签: vba excel-vba excel

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

我用代码bolow显示我的表单。 我应该如何声明变量并为这些变量赋值?

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

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. 当我尝试在没有“Option Explicit”的情况下运行我的宏时,它不起作用(Err.Description: "Value is out of range"Err.Number: -2147024809
  3. 当我尝试使用早期绑定运行我的宏(通过VBE中的工具/参考引用“MS Office对象库”)时,一切都可以完美地使用(和没有)“Option Explicit”。

1 个答案:

答案 0 :(得分: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 Object Library这是有道理的。这是我在我的XLSB文件中保留引用的少数几个库之一,所以我的困惑是因为我认为我使用了适当的后期绑定,但我确实使用了早期绑定。