Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel:确定是否使用“保存”或“另存为”_Excel_Vba - Fatal编程技术网

Excel:确定是否使用“保存”或“另存为”

Excel:确定是否使用“保存”或“另存为”,excel,vba,Excel,Vba,我正在使用下面链接中的外接程序代码版本来检查我试图保存的任何文件的文件名中是否有“模板”;但是,如果单击“另存为”,我不希望出现消息框。是否有方法确定正在执行的保存类型?谢谢你的帮助 链接: 我已将类模块的一部分更新如下: Private Sub xlApp_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim UserInput As String

我正在使用下面链接中的外接程序代码版本来检查我试图保存的任何文件的文件名中是否有“模板”;但是,如果单击“另存为”,我不希望出现消息框。是否有方法确定正在执行的保存类型?谢谢你的帮助

链接:

我已将类模块的一部分更新如下:

 Private Sub xlApp_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Dim UserInput As String 
    If LCase(ActiveWorkbook.Name) Like "*template*" Then 
        UserInput = MsgBox("Are you sure you want to over-write the Template?", vbYesNo) 
        If UserInput <> vbYes Then 
            Cancel = True 
        End If 
    End If 
 End Sub 
Private Sub xlApp_工作簿保存前(ByVal Wb作为工作簿,ByVal SaveAsUI作为布尔值,Cancel作为布尔值)
Dim UserInput作为字符串
如果LCase(ActiveWorkbook.Name)像“*template*”那么
UserInput=MsgBox(“是否确实要重写模板?”,vbYesNo)
如果用户输入vbYes,则
取消=真
如果结束
如果结束
端接头

如果代码的操作方式与Excel的
工作簿\u BeforeSave
事件类似,则如果用户正在执行另存为(即,如果调用了另存为用户界面,因此包括首次保存工作簿),则
SaveAsUI
的值将为
True
,和
False
如果他们只是在进行正常保存。

使用YowE3K的点,您可以将代码缩短为

If Not SaveAsUI Then Exit Sub
If LCase$(ActiveWorkbook.Name) Like "*template*" Then _
Cancel = (MsgBox("Are you sure you want to over-write the Template?", vbYesNo) = vbNo)

嗨,我使用了YowE3K建议的使用SaveAsUI的相同方法。
此外,请确保将模板存储为*.xltx或*xltm(对于启用宏的模板)因此,当任何人以通常的方式打开它们时,它将创建一个未保存的文档,而不是实际打开模板文件,并允许他们通过保存更改来弄乱它。

我猜我的工作簿
命名文件时需要考虑的事情。xlsx
将被视为模板吗-PYep:)可能一个RegExp或类似的文件会更好地过滤掉这样的匹配项。谢谢大家的回复。如果我将代码保存在模板本身中,这将起作用,但当我将其包含在外接程序中时,它不起作用。