我有以下VBA脚本保存工作簿,这很好用。
但是,如果再次单击commandbutton1,它会正确显示选项框
'你想要替换文件' - 是,否,取消。
“是”选项正常,但“否”和“取消”选项会显示错误框 - RunTime error 1004: Cannot access 'file'
。
任何人都可以指出我正确的方向来解决问题。代码如下:
Private Sub CommandButton1_Click()
Dim Path As String
Dim FileName1 As String
Dim FileName2 As String
Path = "C:\temp\Saved Invoices\"
FileName1 = Range("R12")
FileName2 = Range("S12")
ActiveWorkbook.SaveAs Filename:=Path & FileName1 & "-" & FileName2 & ".xlsm", FileFormat:=52
End Sub
答案 0 :(得分:2)
您需要做的就是将代码包装在Application.DisplayAlerts
中Application.DisplayAlerts = False
Dim Path As String
Dim FileName1 As String
Dim FileName2 As String
Path = "C:\temp\Saved Invoices\"
FileName1 = Range("R12")
FileName2 = Range("S12")
ActiveWorkbook.SaveAs Filename:=Path & FileName1 & "-" & FileName2 & ".xlsm", FileFormat:=52
Application.DisplayAlerts = True
答案 1 :(得分:0)
如果您仍然想要提示您的用户,可以使用MsgBox。下面是一个简单的是/否提示。
此代码使用Microsoft Scripting Runtime。如果您还没有引用此参考,请转到Visual Basic编辑器(ALT-F11),然后在工具下拉列表中选择"参考..."勾选" Microsoft Scripting Runtime"旁边的复选框。然后单击“确定”按钮。
下面的代码设置FileSystemObject,设置您提供的路径和文件名,并检查该文件是否已存在。如果它没有找到该文件,它将像以前一样保存。如果它已经找到该文件,它将向用户提供一个MsgBox,询问他们是否要覆盖该文件。如果他们点击YES,它会像以前一样进行SaveAs。单击NO将不执行任何操作。
Private Sub CommandButton1_Click()
Dim fso As FileSystemObject
Dim Path As String
Dim FileName1 As String
Dim FileName2 As String
Dim FilePath As String
Set fso = CreateObject("Scripting.FileSystemObject")
Path = "C:\temp\Saved Invoices\"
FileName1 = Range("R12")
FileName2 = Range("S12")
FilePath = Path & FileName1 & "-" & FileName2 & ".xlsm"
If fso.FileExists(FilePath) Then
If MsgBox("Your file already exists in this location. Do you want to replace it?", vbYesNo) = vbYes Then
ActiveWorkbook.SaveAs FilePath, 52
End If
Else
ActiveWorkbook.SaveAs FilePath, 52
End If
End Sub
由Thinkingcap提供的Application.DisplayAlerts也是一个很好的方法。您首先收到错误的原因是因为您的脚本在单击“是”但没有“否”或“取消”的指示时知道该怎么做。启用提示时,NO是SaveAs的选定默认值。在Application.DisplayAlerts = False中包装脚本不仅会禁用提示,而且会将默认值更改为YES,因此每次都会在没有用户输入的情况下替换该文件。