Excel 如何防止保存宏再次运行

Excel 如何防止保存宏再次运行,excel,vba,Excel,Vba,我有一个文件,许多员工用它来决定价格 完成后,他们会将文件名更改为他们想要的任何名称 领导层要求我们确保员工文件保存名称的第一部分是文件的原始名称(因此我们知道他们使用的版本),然后第二部分是用户想要的名称。Ex-File是一个名为“费率计算器v14”的组织。员工希望将文件命名为“加利福尼亚州洛杉矶-约翰·多伊” 然后,该文件应保存在特定文件夹中,名为“Rate Calculator v14 Los Angeles,CA-John Doe.xlsm” 无论是“保存”还是“另存为”,也无论是使用C

我有一个文件,许多员工用它来决定价格

完成后,他们会将文件名更改为他们想要的任何名称

领导层要求我们确保员工文件保存名称的第一部分是文件的原始名称(因此我们知道他们使用的版本),然后第二部分是用户想要的名称。Ex-File是一个名为“费率计算器v14”的组织。员工希望将文件命名为“加利福尼亚州洛杉矶-约翰·多伊”

然后,该文件应保存在特定文件夹中,名为“Rate Calculator v14 Los Angeles,CA-John Doe.xlsm”

无论是“保存”还是“另存为”,也无论是使用Ctrl+s快捷键还是使用功能区完成,都应该发生这种情况

当触发最后一行代码时,文件实际上已保存,但宏会循环返回并再次询问用户希望将文件保存为什么(尽管现在不会保存该文件,并且他们使用的另一个名称已保存)

我知道我还需要为文件名、文件名长度中使用不正确的字符建立一些错误处理,并确定用户,以便将其文件保存在正确的文件夹中

试试看

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim strFileName(0 To 1) As String, sPath As String

sPath = "M:\Sales\Rate Calculators\John\"
strFileName(0) = "Rate Calculator v14"
strFileName(1) = InputBox("What would you like to save the file as?")

ActiveWorkbook.SaveCopyAs Filename:=sPath & "\" & Join(strFileName) & ".xlsx"

End Sub
答复:

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dim strFileName(0 To 1) As String, sPath As String
    Application.EnableEvents = False
    Cancel = True

    sPath = "M:\Sales\Rate Calculators\John"
    strFileName(0) = "Rate Calculator v14"
    strFileName(1) = InputBox("What would you like to save the file as?")

    ActiveWorkbook.SaveAs Filename:=sPath & "\" & Join(strFileName), FileFormat:=xlOpenXMLWorkbookMacroEnabled
    Application.EnableEvents = True
End Sub

Cancel
设置为
True
,并将
Application.EnableEvents
设置为
False
我已尝试在activeworkbook.saveas行之前和之后添加这两个选项,但出现错误1004。我会认为enableevents=false位于代码的顶部,然后在activeworkbook.saveas行之后将其设置为true,然后是cancel=true行?只需尝试
应用程序。enableevents
false
在顶部和
true
结束子部分之前,这经过了一些修改。谢谢你的帮助。
Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dim strFileName(0 To 1) As String, sPath As String
    Application.EnableEvents = False
    Cancel = True

    sPath = "M:\Sales\Rate Calculators\John"
    strFileName(0) = "Rate Calculator v14"
    strFileName(1) = InputBox("What would you like to save the file as?")

    ActiveWorkbook.SaveAs Filename:=sPath & "\" & Join(strFileName), FileFormat:=xlOpenXMLWorkbookMacroEnabled
    Application.EnableEvents = True
End Sub