Excel 2010 VBA:使用单元格中的值保存文件以确定路径和文件名

Posted

技术标签:

【中文标题】Excel 2010 VBA:使用单元格中的值保存文件以确定路径和文件名【英文标题】:Excel 2010 VBA: Save file using value from cell to determine path and filename 【发布时间】:2013-06-17 20:27:04 【问题描述】:

我正在尝试编写一些代码,将多个选项卡保存为 pdf 文档,保存在 Excel 中的文件指定的文件夹中。我希望文档中的单元格指示此文件的保存位置。我不确定这是否可能,但如果有任何帮助会很好!我目前在保存代码的过程中遇到运行时错误“1004”。

是的,我确实创建了被引用的文件夹。

Sub asdf()

Dim Fname As String
Dim Fpath As String
Dim YrMth As String

Fname = Sheets("Sheet1").Range("A1").Text

YrMth = Sheets("Sheet1").Range("A2").Text & "\" & Sheets("Sheet1").Range("A3").Text

Fpath = "C:\Documents and Settings\My Documents\" & YrMth & "\Group\" & Fname & ".pdf"

ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet4")).Select

Application.DisplayAlerts = False

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=Fpath, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

结束子

【问题讨论】:

【参考方案1】:

您的代码适用于我,但不适用于您指定的路径。

声明一个新的字符串变量:

dim myDocsPath as String

获取路径使用:

myDocsPath = Environ$("USERPROFILE") & "\My Documents\"

然后将 Fpath 的定义更改为:

Fpath = myDocsPath & YrMth & "\Group\" & Fname & ".pdf"

如果我将 myDocsPath 的结尾更改为 & "\My foo Documents\",我会收到与您遇到的相同的 1004 错误。

【讨论】:

感谢您对餐饮主管的见解!【参考方案2】:

尝试替换代码中的行

Fpath = "C:\Documents and Settings\My Documents\" & YrMth & "\Group\" & Fname & ".pdf"

Dim WshShell As Object
Dim MyDocsFolder As String
Set WshShell = CreateObject("WScript.Shell")
MyDocsFolder = WshShell.SpecialFolders("MyDocuments") & "\"

Fpath = MyDocsFolder & YrMth & "\Group\" & Fname & ".pdf"

编辑: 这个方案的核心是:

MyDocsFolder = WshShell.SpecialFolders("MyDocuments") & "\"

返回“我的文档”的系统路径,与本地系统设置(如语言)或“我的文档”文件夹的非标准位置无关。然后它在末尾添加一个反斜杠。

如果您向系统询问有关特殊文件夹的信息,而不是在脚本中硬编码此类数据,会更优雅(并且代码变得更便携)。

有关 VBA 中 Windows 特殊文件夹的更多信息,您可以找到 https://www.rondebruin.nl/win/s3/win027.htm

【讨论】:

告诉某人更改他们的代码而不解释为什么他们的代码是错误的而你的代码是正确的,对于未来的读者来说不是一个非常有用的答案。 你是对的。在我看来,这似乎是显而易见的并且是自我记录的。所以我添加了一个解释,这应该会有所启发。

以上是关于Excel 2010 VBA:使用单元格中的值保存文件以确定路径和文件名的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 保存:不同单元格中的路径和文件名

使用OLEDB读取EXCEL数据时,为何读取不到单元格中的时间值,全是1900\1\0

请教!excel单元格内的数值发生变化时如何保留它以前的值

VBA 代码填充 7 个相邻单元格中的索引匹配函数

如何使用 VBA 从单元格中获取一些字符

在vba excel中保存大量字符串