GetSaveAsFilename 默认文件夹
Posted
技术标签:
【中文标题】GetSaveAsFilename 默认文件夹【英文标题】:GetSaveAsFilename default folder 【发布时间】:2011-02-28 22:09:15 【问题描述】:我在 VBA for Excel 中使用GetSaveAsFilename
。有没有办法给这个默认文件夹打开?例如,我总是希望它在被调用时从C:\MyDocuments\Music
开始。
【问题讨论】:
【参考方案1】:FileDialog
对象比GetSaveAsFilename
(及其兄弟GetOpenFilename
)提供了更多的灵活性。示例:
Dim tuneSaver As FileDialog
Set tuneSaver = Application.FileDialog(msoFileDialogSaveAs)
With tuneSaver
.Title = "Save this tune as..."
.InitialFileName = "C:\MyDocuments\Music\"
' Set other properties here...
.Show
End With
请注意,超过 256 个字符的 .InitialFileName
会导致运行时错误。
见VBA help on FileDialog
。它有很多有用的属性,包括例如AllowMultiSelect
(虽然保存时这个是无关紧要的)。
【讨论】:
完美,谢谢。有没有办法可以将“另存为类型”设置为默认值?它默认为最新/最高版本的 excel,但我想将其设置为较旧的“.xls”格式(2003 年及之前)。 嗯,也许this page 会有所帮助。但是,我担心FileDialog
对象在 2003 年以后的 Excel 版本中不可用(反正我是这么说的)所以你的问题可能没有实际意义。
谢谢 - 我已经阅读了该页面......但是,我无法弄清楚。该报告是在 2007 年生成的,但我需要将输出保存为 2003 年的文档。它现在工作得很好。只是试图消除更多的绊脚石。谢谢!
我知道这个问题已经过时了,但我想我要补充一点,在 Excel 2007 中不推荐使用 FileSearch,而不是 FileDialog——它仍然存在并且很好(如果相信 msdn.microsoft.com/en-us/library/bb208503(v=office.12).aspx)
【参考方案2】:
这行得通:
x = Application.GetSaveAsFilename(InitialFileName:="C:\mydocuments\music\", _
fileFilter:="Text Files (*.*), *.*")
但是,如果文件规范中有空格,它会变得有点棘手。例如,这个:
x = Application.GetSaveAsFilename(InitialFileName:="%USERPROFILE%\My Documents\My Music", _
fileFilter:="Text Files (*.*), *.*")
只到达我的文档并认为我的音乐是文件名。希望这会有所帮助。
【讨论】:
错过了结尾的 \。这使它成为路径,而不是文件【参考方案3】:在GetSaveAsFilename
之前使用ChDir
。
【讨论】:
【参考方案4】:可以使用ChDir(使用@Mark Ransom 的答案),如本示例代码所示:
Dim workBook As workBook
Set workBook = ActiveWorkbook
ChDir (workBook.Path) ' Set Default folder
saveName = Application.GetSaveAsFilename(InitialFileName:=workBook.Name, _
fileFilter:="Microsoft Excel Worksheet (*.xlsx), *.xlsx")
' Check whether the name specified is usable
If saveName <> False Then
workBook.SaveAs Filename:=saveName, FileFormat:=xlOpenXMLWorkbook
End If
希望这能澄清一下 ChDir。
【讨论】:
以上是关于GetSaveAsFilename 默认文件夹的主要内容,如果未能解决你的问题,请参考以下文章
GetSaveAsFilename() 总是在我的文档中打开