【发布时间】:2023-01-11 17:37:52
【问题描述】:
我正在尝试使用下面的代码来限制保存和另存为以使用宏保存文件。代码放在“ThisWorkbook”中。
我的主要目标是创建一个带有宏的模板供其他人使用,但是当他们打开模板时,通常会忘记用宏保存它,因为默认设置是 .xlsx 格式。
excel 模板以只读形式放置在 Sharepoint 中。人们然后将副本保存在共享点或服务器上自己的文件夹中。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Declare variables.
Dim FileName As String
Dim FileLocation As String
' Check if the Save As command is being used.
If SaveAsUI = True Then
' Create a FileDialog object.
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogSaveAs)
' Set the file filter.
fd.FilterIndex = 2
fd.Filters.Clear
fd.Filters.Add "Excel Macro-Enabled Workbook", "*.xlsm"
fd.Filters.Add "Excel Macro-Enabled Template", "*.xltm"
' Display the file dialog box.
If fd.Show = -1 Then
FileName = fd.SelectedItems(1)
Else
Cancel = True
Exit Sub
End If
' Save the workbook or template with macros.
Application.DisplayAlerts = False
If Right(FileName, 5) = ".xlsm" Then
ActiveWorkbook.SaveAs Filename:=FileName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
Else
ActiveWorkbook.SaveAs Filename:=FileName, FileFormat:=xlOpenXMLTemplateMacroEnabled
End If
Application.DisplayAlerts = True
Cancel = True
End If
End Sub
【问题讨论】:
-
我希望您会发现这是一场艰苦的斗争。对于至少某些人来说,Sharepoint 和/或网络设置中的宏可能在默认情况下被禁用,因此他们需要既允许宏又另存为 .xlsm。在处理这样的组时,尝试“万无一失”工作簿似乎总是浪费大量时间,因为有太多方法可以绕过所使用的任何过程。我发现最简单的过程通常也是最简单的,因此 MsgBox 弹出窗口也可能起到同样的作用。
-
所以你会创建一个在保存和保存之前弹出的消息框,它只是提醒人们用宏保存?
-
我可能会创建一个 BeforeSave 函数,它只检查保存文件名的扩展名,如果它不是“.xltm”或“.xlsm”,则取消保存并弹出提醒。
-
你能帮我写代码吗?
-
FileDialog(msoFileDialogSaveAs)不接受过滤器...您应该使用GetSaveAsFilename。我将放置一个与这部分严格相关的答案。