【发布时间】:2016-12-01 23:55:44
【问题描述】:
我正在编写 VBA 代码以在关闭工作簿之前更改按钮颜色。我的代码是在“Microsoft Excel 对象”-“ThisWorkbook”下编写的。我有两个选项卡,一个称为“User Interface_OneStep”,另一个称为“User Interface_UserSupervised”。我想在关闭工作簿时更改两个工作表上的按钮颜色。
我现在遇到的问题是,如果我在关闭工作簿时停留在“User Interface_OnseStep”中,一切正常。但是如果我停留在“User Interface_UserSupervised”工作表中,当我尝试关闭这本书时会弹出“对象不支持此属性或方法”的错误消息。我的代码如下:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ReDim ButtonNumberArray(14) As Variant
ButtonNumberArray(0) = "Rectangle 95"
ButtonNumberArray(1) = "Rectangle 92"
ButtonNumberArray(2) = "Rectangle 98"
ButtonNumberArray(3) = "Rectangle 104"
ButtonNumberArray(4) = "Rectangle 105"
ButtonNumberArray(5) = "Rectangle 106"
ButtonNumberArray(6) = "Rectangle 103"
ButtonNumberArray(7) = "Rectangle 96"
ButtonNumberArray(8) = "Rectangle 114"
ButtonNumberArray(9) = "Rectangle 89"
ButtonNumberArray(10) = "Rectangle 120"
ButtonNumberArray(11) = "Rectangle 123"
ButtonNumberArray(12) = "Rectangle 128"
ButtonNumberArray(13) = "Rectangle 122"
ButtonNumberArray(14) = "Rectangle 137"
For Each var In ButtonNumberArray
WorksheetName = "User Interface_OneStep"
Call ResetColorTemplate
Next var
ReDim ButtonNumberArray(18) As Variant
ButtonNumberArray(0) = "Rectangle 84"
ButtonNumberArray(1) = "Rectangle 89"
ButtonNumberArray(2) = "Rectangle 2"
ButtonNumberArray(3) = "Rectangle 12"
ButtonNumberArray(4) = "Rectangle 88"
ButtonNumberArray(5) = "Rectangle 13"
ButtonNumberArray(6) = "Rectangle 14"
ButtonNumberArray(7) = "Rectangle 15"
ButtonNumberArray(8) = "Rectangle 40"
ButtonNumberArray(9) = "Rectangle 16"
ButtonNumberArray(10) = "Rectangle 81"
ButtonNumberArray(11) = "Rectangle 17"
ButtonNumberArray(12) = "Rectangle 57"
ButtonNumberArray(13) = "Rectangle 86"
ButtonNumberArray(14) = "Rectangle 62"
ButtonNumberArray(15) = "Rectangle 65"
ButtonNumberArray(16) = "Rectangle 67"
ButtonNumberArray(17) = "Rectangle 64"
ButtonNumberArray(18) = "Rectangle 74"
For Each var In ButtonNumberArray
WorksheetName = "User Interface_UserSupervised"
Call ResetColorTemplate
Next var
End Sub
颜色模板宏是这样的(写在modules下):
Option Explicit
Public ButtonNumberArray() As Variant
Public WorksheetName As String
Sub ResetColorTemplate()
ThisWorkbook.Worksheets(WorksheetName).Shapes.Range(ButtonNumberArray()).Select
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset22
With Selection.ShapeRange.TextFrame2.TextRange.Font.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
.Transparency = 0
.Solid
End With
End Sub
错误出现在这一行:
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset22
当发生错误时,WorksheetName = User Interface_OneStep。为什么当我切换到另一个选项卡时,Excel 不能修改其他选项卡的属性?
提前致谢!
【问题讨论】:
-
您需要将
WorksheetName定义为全局,通过在模块级别将其标记为Public WorksheetName as String,这样模块中的所有Subs 都会识别它。或者,您可以将其传递给Sub ResetColorTemplate() -
对不起,我确实定义了变量。这里忘记贴了。谢谢提醒。