closures工作簿时发生奇怪的行为
- 工作工作簿被称为
Main.xlsm
- 它有两个名为
Sheet1
和Sheet2
-
Sheet1
有一个叫做cmd_btn
的命令cmd_btn
-
Sheet2
目前是xlVeryHidden
在Module1
我有以下代码:
Sub Macro1() With Workbooks("Main.xlsm").Sheets("Sheet2") .Visible = True .Copy .Visible = xlVeryHidden End With End Sub
此代码使Sheet2
可见,将其复制为新的工作簿(popup一个新的工作簿),然后再次将其设置为xlVeryHidden
。 在这一点上,Main.xlsm在后面,新创build的工作簿在前面。
当我直接运行Macro1
:
- 我单击Main.xlsm的X(closures)button,Main.xlsm尝试closures,因为它应该是。
当我从cmd_btn
运行Macro1
时:
- 这次excel窗口闪烁几次。 当我单击Main.xlsm的X(closures)button时,新打开的Excel工作簿(Book#.xlsx)将尝试closures。
问:这可能是什么原因?
PS:如果您在尝试以上时不会发生这种情况,请尝试以下操作,您将会遇到同样的情况:
- 在
Sheet1
上创build一个名为cmb_list
的combobox - 使用“Copy Sheet2”和“Copy Sheet3”填充
cmb_list
- 创build另一个名为
Sheet3
表,并将其设置为xlVeryHidden
- select
cmb_list
任何值,cmb_list
从cmd_btn
运行以下代码
Sub Macro3() With Workbooks("Main.xlsm") If cmb_list.Value = "Copy Sheet2" Then .Sheets("Sheet2").Visible = True .Sheets("Sheet2").Copy .Sheets("Sheet2").Visible = xlVeryHidden ElseIf cmb_list.Value = "Copy Sheet3" Then .Sheets("Sheet3").Visible = True .Sheets("Sheet3").Copy .Sheets("Sheet3").Visible = xlVeryHidden End If End With End Sub
我尝试了你提供的所有步骤,不能像你的代码那样重复你的代码
(你有Workbook_BeforeClose()事件中的任何其他代码?)
我优化了一下代码,它仍然有效:
Sheet1 VBA模块:
Option Explicit Private Sub cmd_btn_Click() Application.ScreenUpdating = False CopyWorkSheet Right(cmb_list.Value, 1) Application.ScreenUpdating = True End Sub
ThisWorkbook VBA模块:
Option Explicit Private Sub Workbook_Open() populateCmb End Sub
模块1 :
Option Explicit Public Sub populateCmb() With Workbooks("Main.xlsm").Sheets("Sheet1").cmb_list .AddItem "Copy Sheet2" .AddItem "Copy Sheet3" End With End Sub Public Sub CopyWorkSheet(ByVal wsID As Long) With Workbooks("Main.xlsm") With .Sheets("Sheet" & wsID) .Visible = True .Copy .Visible = xlVeryHidden End With .Close False 'Closes Main.xlsm, without saving it End With End Sub