【问题标题】:VBA Excel Getting File Path - Not workingVBA Excel获取文件路径 - 不工作
【发布时间】:2014-01-21 23:01:28
【问题描述】:

我一直在使用以下代码在 Excel 中指定文件夹路径:

Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
diaFolder.AllowMultiSelect = False
diaFolder.Show

我会将 pdf 文件(通过 VBA 代码)导出到该路径。当我在 Windows XP 上运行 Excel 2007 时,这段代码可以完美运行。我最近升级了我的操作系统和 Office 版本,现在我在 Windows 7 上运行了 Excel 2010。代码不再像以前那样工作,问题是每次运行代码时路径都会不断上移一级。

例如,假设我选择以下路径:

\users\AK\Desktop\Projects\ProjectM

实际的pdf保存在\users\AK\Desktop\Projects\

如果我选择:\users\AK\Desktop\Projects\ pdf保存在\users\AK\Desktop\

如果我继续运行代码,它总是会向上跳一级,所以假设我按顺序运行它 3 次(每次不选择我的路径),我的 pdf 文件将存储在:\users\AK\

我不知道是 Excel 2010 问题还是 Windows 7 问题。有人遇到过吗?

编辑:包含完整代码:

Private Sub CODERUN()
    ' Define values
    FN_A = Cells(2, 2).Value

    ' Print PDF version
    Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
    diaFolder.AllowMultiSelect = False
    diaFolder.Show

    ' Print PDF version
    Sheets("Part A").Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:=FN_A & "_A", _
                                    Quality:=xlQualityStandard, _
                                    IncludeDocProperties:=True, _
                                    IgnorePrintAreas:=False, _
                                    OpenAfterPublish:=False
End Sub

【问题讨论】:

  • 您应该显示代码的其他相关部分。您列出的内容不足以诊断问题。
  • 如果每次都运行上面的,每次都要选择路径;我同意@TimWilliams 的观点,即您需要展示一段完整的代码——如何使用返回的路径,以及如何循环?有了这两条信息,我们或许能够重现问题并提供帮助。
  • 同意上述两个 cmets。无论如何,您也可以尝试GetSaveAsFilename 以任何格式保存文件,尽管我没有尝试使用 PDF,因为上面有点复杂。
  • FULL CODE: Private Sub CODERUN() ' 定义值 FN_A = Cells(2, 2).Value ' 打印 PDF 版本 Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker) diaFolder.AllowMultiSelect = False diaFolder.Show ' 打印 PDF 版本表(“A 部分”)。选择 ActiveSheet.ExportAsFixedFormat 类型:=xlTypePDF,文件名:=FN_A 和“_A”,质量:=xlQualityStandard,IncludeDocProperties:=True,IgnorePrintAreas:=False,OpenAfterPublish:=False End子

标签: vba excel


【解决方案1】:

我理解您的问题,因为我遇到了同样的问题。我相信你的问题是,如果你运行你拥有的代码,然后在对话框上点击取消或确定,下次你运行代码时,初始路径会比之前的初始路径高一个级别。发生这种情况的原因是,Dialog 没有添加尾随 \,然后将路径截断到下一个 \。因此,每次使用对话框时,您都会在路径中失去一个关卡。

以下代码应该适合您,您可以接受或取消,直到您满意为止,而无需更改初始目录。

Private Sub CODERUN()
    Dim sFilePath as String

    ' Define values
    FN_A = Cells(2, 2).Value

    ' Print PDF version
    With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
        If .Show = -1 Then
            sFilePath =  .SelectedItems(1) & "\"
            .InitialFileName = sFilePath  '<--Remove this line to see the problem
        End If
    End With

    ' Print PDF version
    Sheets("Part A").ExportAsFixedFormat Type:=xlTypePDF, filename:=sFilePath & FN_A & "_A", _
                                    Quality:=xlQualityStandard, _
                                    IncludeDocProperties:=True, _
                                    IgnorePrintAreas:=False, _
                                    OpenAfterPublish:=False
End Sub

【讨论】:

  • 感谢 CuberChase,您的解决方案现在可以正常工作,目录(即路径)没有改变,但是,当我尝试将文件导出到该选定文件夹时,它会继续将其保存在目录中比选择的高一级。 FN_A = Cells(2, 2).Value ' 为文件选择名称 Sheets("Part A").Select ' 转到工作表 A ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FN_A & "_A", Quality: =xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
  • @AK-74 您没有在导出中指定文件路径。我已经更新了我没有测试过的答案,但我有理由相信它应该可以工作。告诉我。
  • 成功了!谢谢#CuberChase。但究竟是什么问题?它与 Excel 2010 或 Win7 有关吗?再次感谢!
  • 老实说,我猜是 Excel,因为它是应用程序调用,但可能不是。
猜你喜欢
  • 1970-01-01
  • 2010-12-26
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多