我有代码,仅在用户选择“另存为”时运行。要做到这一点并获取文件的新名称,我正在使用Application.GetSaveAsFilename
函数。
我遇到的问题是类型不匹配,同时检查用户是否在未执行此操作时点击取消。
未点击取消时抛出错误的行:If saveName = False Then Exit Sub
我的工作代码:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not SaveAsUI Then Exit Sub
Cancel = True
'other variables
Dim saveName As String
saveName = Application.GetSaveAsFilename(filefilter:="Microsoft Excel Files (*.xlsm), *.xlsm", Title:="Save as Microsoft Excel Macro-Enabled Worksheet")
On Error GoTo RunTime13
If saveName <> False Then
On Error GoTo 0
'other code
ThisWorkbook.SaveAs Filename:=saveName, FileFormat:=52
End If
Exit Sub
RunTime13:
If Err.Number = 13 Then Resume Next
End Sub
我做错了什么,我必须像这样解决取消按钮?
修改
我选择Dim saveName As Variant
可以使用If saveName = False Then Exit Sub
正如Vityata提到我在德国,因此可能会遇到语言问题,幸运的是我的Vityata让我想起了这个问题,因为我实际上是用英语使用Excel,但不是所有的同事都是,所以我的接受的答案可能在他们使用工作簿时没有用。
答案 0 :(得分:2)
由于您已将SaveName
声明为字符串,因此您需要检查"False"
,而不是False
。
If saveName <> "False" Then
答案 1 :(得分:1)
OP
,我有一些消息告诉你 - 你在德国,因此我肯定你肯定会使用德语Excel。
VBA有点翻译,因此saveName
被转换为Falsch
而不是False
,就像世界其他地方一样。例如。 CStr(False)
会返回Falsch
。
在你的代码中写下这三个中的任何一个:
If saveName <> "Falsch"
If saveName <> False
If Len(saveName) <> 6
答案 2 :(得分:1)
这是另一种方法:
Dim vSaveName As Variant
vSaveName = Application.GetSaveAsFilename(filefilter:="Excel Files (*.xlsm), *.xlsm", _
Title:="Save as Macro-Enabled Worksheet")
If TypeName(vSaveName) = "Boolean" Then Exit Sub
'' otherwise continue with save...
vSavename是布尔值的唯一时间是用户取消时,所以这种方法不需要知道如何用用户的语言说False。