closures工作簿时发生奇怪的行为

  • 工作工作簿被称为Main.xlsm
  • 它有两个名为Sheet1Sheet2
  • 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
  • selectcmb_list任何值, cmb_listcmd_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