2015-08-18 62 views
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 
+1

我不確定,但我猜測問題是這段代碼在workbook_beforesave事件中。這可能會導致一些無限遞歸或者只是不允許事件內部的saveas方法。 – OpiesDad

+2

您已設置取消= true。這可以防止保存工作簿。 – OpiesDad

+0

我原本以爲這個問題可能是因爲我需要在SaveAs方法之前啓用事件,但是這會導致你引用的無限循環。我在SaveAs調用之前添加了「取消= False」,並且它沒有更好的工作。我認爲取消指的是用戶保存事件,這可能與SaveAs調用不同 - 我已經得到了這個子程序保存爲Cancel = True。 – jah

回答

0

2009年,由於我原來的問題凱爾的評論,我已經想通了,解決辦法是改變

fileName = Application.GetSaveAsFilename(InitialFileName:=filePath, _ 
FileFilter:="Microsoft Excel Worksheet (*.xlsx), *.xlsx") 

到:

fileName = Application.GetSaveAsFilename(InitialFileName:=filePath, _ 
FileFilter:="Microsoft Excel Macro-Enabled Worksheet (*.xlsm), *.xlsm") 

理想我'd能夠擺脫宏,但這回答了這個問題。

相關問題