如何 运行 excel 中的宏 VBA 仅在 "Save-as" 而不是正常 "Save"

How to run a macro in excel VBA only on "Save-as" but not on normal "Save"

我有一份每天更新并通过电子邮件发送的工作表格。我从一个主表格(“Passdown Report 3rd Shift”)打开,并在每天离开之前保存为按日期分隔的单独副本(“Passdown Report 3rd Shift 2022-01-19”)。

表格中填满了根据日期和工作簿中其他工作表的刺激自动更新的公式,因此我添加了一个宏来将范围内的所有公式转换为它们的值。

我想 运行 在将表格保存为每日文件之前使用此宏,但在我只是更新和保存主文件时不需要。这是我能做的吗?

您可以在 ThisWorkbook 上使用 BeforeSave 函数。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI then
    'Your code
    end if
End Sub

在微软文档中写的是 SaveAs 的弹出窗口,将执行此代码并且标志 SaveAsUI 将为真。

https://docs.microsoft.com/en-us/office/vba/api/excel.workbook.beforesave

注意:如果要保存宏,则需要将其设为 .xlsm 文件...

运行 关闭工作簿前的宏

  • 希望你SaveAs作为后备。
  • 只有在关闭备份时,IF(StrComp... 才会记下不同的文件名,您的宏会运行 并且在关闭前会再次保存备份。
  • 有点笨拙,但应该能保证原件的安全。
  • BeforeSave 的问题在于您可以执行 If SaveAsUI = True Then,但您也可能不小心在原件上执行了 SaveAs 并得到了 'destroyed'。我觉得太冒险了。
Option Explicit

Private ClosingBackup As Boolean

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    Const sFileName As String = "Passdown Report 3rd Shift.xlsm"
    
    If Not ClosingBackup Then
        With Me
            ' Compare if you're closing the original or the backup.
            If StrComp(.Name, sFileName, vbTextCompare) <> 0 Then ' backup
                MyMacro
                ClosingBackup = True
                ' Here it will again call this sub but will exit because
                ' 'ClosingBackup' is set to True ('If Not ClosingBakup Then').
                .Close SaveChanges:=True
            'Else ' ClosingBackup = False i.e. closing the original; do nothing
            End If
        End With
    'Else ' ClosingBackup = True; closing the backup which was saved; do nothing
    End If

End Sub