【发布时间】:2016-02-02 05:58:47
【问题描述】:
我正在尝试减少 .xlsm 工作簿中的一些重复编码。为此,我在“Workbook Open”区域中创建了许多子程序,现在从工作表 1 中的子程序调用这些子程序。(最初在这两个程序中都有重复的代码段)。这一切都很好!
我的问题是这个...
Sheet 1 中的代码是否可以知道它正在被 Workbook Open 事件激活?
例如,我有一个由 Workbook_open 事件填充的组合框,然后触发工作表 1 组合框“更改”事件。但是,我只希望用户在打开工作簿后触发此更改事件。
我尝试在 Workbook Open 中设置一个全局变量,但这仅在此事件中具有作用域。
这里最好的解决方法是什么?
我可以使用工作簿模块吗?
我是否应该将变量写入工作表中的单元格并在事件结束时将其清除?
其他解决方案?
部分工作簿打开代码..
Private Ws_Open As Boolean
Private Sub Workbook_Open()
'
' set up drop down filter list
'
Range("A1").Select
With ThisWorkbook.Worksheets(1).Cmb_filter
.Clear
.AddItem "None"
.AddItem "60% or less"
.AddItem "70% or less"
.AddItem "80% or less"
.AddItem "90% or less"
.ListIndex = 0
End With
Sheet 1 代码的一部分...
Private Sub Cmb_filter_Change()
Dim intvalue As Integer
Cmb_filter.BackColor = vbWhite
Application.Run "'" & ThisWorkbook.Name & "'!Thisworkbook.clear_it"
..etc
【问题讨论】:
-
把全局变量放在一个普通的代码模块中,而不是工作簿模块中。另外,尝试传递变量,而不是使用全局变量。
-
谢谢@vacip。这是导致问题的变量的传递。我过去处理过很多用户表单,并且知道如何在此处传递变量,但不清楚如何在工作簿打开事件和连接的工作表之间实现这一点。有没有关于这个的文章?