1
在任何人快速標記之前:不,我沒有忘記在GetSaveAsFilename後實際保存文件。VBA SaveAs方法不保存文件,沒有錯誤?
基本上,我有一個大的VBA模塊,它以Excel文件開始,處理一堆數據並在Excel中生成一個摘要。我希望它不可能覆蓋文件,我需要它在所有情況下工作(網絡驅動器,從電子郵件打開等)。這就是爲什麼我認爲最好打開一個SaveAs框 - 離開用戶路徑的責任。但是,當我通過啓用宏保存來觸發此方法時,除文件本身不保存外,所有內容均按預期行事。調試器說,fileName是在SaveAs方法被調用時它應該是什麼,所以我真的很難過。沒有錯誤拋出。
感謝任何人誰可以幫助!我的代碼如下:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim fileName As String, oldName As String, fullName As String
Dim fragName() As String, noExtension As String, filePath As String
Dim newName As String
Cancel = True
oldName = ThisWorkbook.Name
fullName = ThisWorkbook.fullName
fragName() = Split(fullName, ".", 2)
noExtension = fragName(0)
filePath = ThisWorkbook.Path & "\"
Application.enableEvents = False
enterName:
fileName = Application.GetSaveAsFilename(InitialFileName:=filePath, _
FileFilter:="Microsoft Excel Worksheet (*.xlsx), *.xlsx")
On Error GoTo getOut
If fullName = fileName Then
MsgBox ("You have chosen the same name, " & oldName & vbCr _
& ", please choose something different.")
GoTo enterName
ElseIf fileName = "False" Then GoTo getOut
End If
ThisWorkbook.SaveAs (fileName)
getOut:
Application.enableEvents = True
End Sub
我不確定,但我猜測問題是這段代碼在workbook_beforesave事件中。這可能會導致一些無限遞歸或者只是不允許事件內部的saveas方法。 – OpiesDad
您已設置取消= true。這可以防止保存工作簿。 – OpiesDad
我原本以爲這個問題可能是因爲我需要在SaveAs方法之前啓用事件,但是這會導致你引用的無限循環。我在SaveAs調用之前添加了「取消= False」,並且它沒有更好的工作。我認爲取消指的是用戶保存事件,這可能與SaveAs調用不同 - 我已經得到了這個子程序保存爲Cancel = True。 – jah