2017-08-04 41 views
1

我試圖挽救一個DOM文檔和保存方法非常有效:另存爲或保存DOM對話框在VBA

xDoc.Save "myFileName" 

但我想用戶能夠選擇的路徑並有可能是這個名字。所以,我想:

xDoc = "Application.FileDialog(msoFileDialogSaveAs).Show" 
If myNum <> 0 Then 
    XDoc = Application.FileDialog(msoFileDialogSaveAs).SelectedItems(1) 
End If 

這開了一個另存爲對話框,但是當我點擊確定我得到一個運行時間「對象不支持此屬性或方法」。我知道這可能不起作用,但認爲它應該是有道理的。

任何人都知道如何使用VBA打開另存爲對話框來保存DOM(文檔)?

回答

1

所以這是一個問題,因爲你使用一個字符串,而不是調用方法:

xDoc = "Application.FileDialog(msoFileDialogSaveAs).Show" 
'The value of xDoc has been assigned literally as above!!! 

相反,這樣做是爲了實例化一個FileDialog對象,並與工作。 Show它,確保它被使用(如果用戶取消Show將返回False然後.ExecuteSaveAs操作

Dim fdlg As FileDialog 
Set fdlg = Application.FileDialog(msoFileDialogSaveAs) 
fdlg.Title = "Save XML file as..." 
fdlg.FilterIndex = 5 'Defaults to the XML Data file filter 
If fdlg.Show() Then 
    xDoc.Save fdlg.SelectedItems(1)   
Else: 
    MsgBox "File has not been saved!" 
End If 

注:包括在上面的代碼中沒有錯誤處理,希望它失敗或提高如果文件已存在等,則會發出警告/等。

+0

這比使用Application.getSaveAsFileName方法更可取嗎? – Dan

+0

@丹在我看來,是的。使用'FileDialog'對象更容易實現。 –

+0

另請參見小修訂以縮短代碼:) –

0

我發現了一些可行的方法,雖然它可能不是最好的方法。如果有人有什麼更好的,請發佈!

XDoc.Save (Application.GetSaveAsFileName(InitialFileName:="NewFile", FileFilter:="XML Data, *.xml", Title:="Save XML as")) 
+0

GetSaveAsFileName可以正常工作,但您應該分離出獲取文件名和保存文件的過程,以防用戶取消對話框而不選擇路徑。 –

+0

I在xml文檔加載5次的宏中有一個過程,當文件爲ar時,路徑被設置e加載到內存中..這不是更可取嗎?或者,我應該爲用戶設置另一個流程來選擇另一個地方嗎? – Dan

+0

我無法回答這個問題,因爲它完全取決於工作流程是什麼,以及用戶需要什麼自由以便在文件的最終位置。 –