隐藏工作表VBA - Excel错误?

时间:2016-06-26 16:44:31

标签: excel vba excel-vba

我目前正在做一个VBA代码,当Excel文件关闭时需要隐藏一些工作表,几乎一切都正常工作,当我执行以下步骤时:

  1. 在表格中进行一些更改/插入数据
  2. 点击保存按钮
  3. 进行另一项更改(我不想保存)
  4. 单击关闭文件,然后单击“不保存”
  5. 问题是我隐藏了工作表,但由于我不保存文件(因为我不想保存在步骤3中所做的更改),因此当我重新打开文件时,工作表不会被隐藏。我无法使用Workbook_open方法执行此操作,因为它不允许(在我的项目中)。

    为此,我将重写beforeclose方法,如下所示:

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Dim Msg As String
        Dim ireply As Integer
    
        If Not Me.Saved Then
            Msg = "Do you want to save the file?"
            ireply = MsgBox(Msg, vbQuestion + vbYesNoCancel)
    
            Select Case ireply
                Case vbYes
                    Call hidesheets
                    Me.Save
    
                Case vbNo
                    Me.Saved = True
                    Application.Quit
    
                Case vbCancel
                    Cancel = True
                    Exit Sub
              End Select
    
              Else
                Call hidesheets
                Me.Save
    
        End If
    End Sub
    
    Sub hidesheets()
        ThisWorkbook.Sheets("Cars").Visible = xlVeryHidden
        ThisWorkbook.Sheets("Brands").Visible = xlVeryHidden
        ThisWorkbook.Sheets("Models").Visible = xlVeryHidden
        ThisWorkbook.Sheets("Price").Visible = xlVeryHidden
    End Sub
    

    我的问题是,是否可以保存隐藏的纸张配置/设置而不保存用户更改/插入的信息/数据?

    PS:当我保存文件并进行任何更改时,代码工作正常,即隐藏工作表。

    提前谢谢大家 此致

2 个答案:

答案 0 :(得分:0)

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ThisWorkbook.Sheets("Cars").Visible = xlVeryHidden
    ThisWorkbook.Sheets("Brands").Visible = xlVeryHidden
    ThisWorkbook.Sheets("Models").Visible = xlVeryHidden
    ThisWorkbook.Sheets("Price").Visible = xlVeryHidden
End Sub

答案 1 :(得分:0)

你必须采取相反的方式

1)将您的工作簿设置为默认情况下隐藏的那四张

将它们设置为这样,然后保存工作簿以使其假定其默认配置

2)当你打开它时,你可以看到那些纸张

Private Sub Workbook_Open()
    ThisWorkbook.Sheets("Cars").Visible = True
    ThisWorkbook.Sheets("Brands").Visible = True
    ThisWorkbook.Sheets("Models").Visible = True
    ThisWorkbook.Sheets("Price").Visible = True
End Sub

3)关闭它时,将这些纸张设置为不可见

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    'Your code to be processed upon closing the sheet
    '...

    Call hidesheets '<--| hide your sheets
End Sub