关闭工作簿时出现奇怪的行为

时间:2017-08-08 19:36:26

标签: excel vba excel-vba

  • 工作工作簿称为Main.xlsm
  • 它有两张名为Sheet1Sheet2
  • 的表格
  • Sheet1有一个名为cmd_btn
  • 的命令按钮
  • Sheet2目前为xlVeryHidden

Module1我有以下代码:

Sub Macro1()
With Workbooks("Main.xlsm").Sheets("Sheet2")
    .Visible = True
    .Copy
    .Visible = xlVeryHidden
End With
End Sub

此代码使Sheet2可见,将其复制为新工作簿(弹出新工作簿),然后再次xlVeryHidden。此时,Main.xlsm落后,新创建的工作簿就在前面。

直接运行Macro1时:

  • 我单击Main.xlsm的X(关闭)按钮,Main.xlsm尝试 尽可能接近。

当我从Macro1运行cmd_btn时:

  • 这次excel窗口闪烁了几次。当我点击X Main.xlsm的(关闭)按钮,新打开的excel工作簿 (Book#.xlsx)试图关闭。

问题:这可能是什么原因?

PS:如果您在尝试上述操作时没有发生这种情况,请尝试以下操作,您将遇到同样的事情:

  • 在名为Sheet1
  • cmb_list上创建一个组合框
  • 使用“Copy Sheet2”和“Copy Sheet3”填充cmb_list
  • 创建另一个名为Sheet3的工作表,并将其设为xlVeryHidden
  • 选择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

1 个答案:

答案 0 :(得分:0)

我尝试了您提供的所有步骤,并且无法复制您的代码问题,因为是 (你在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