VBA Excel获取文件路径 - 不起作用

时间:2014-01-21 23:01:28

标签: excel vba excel-vba

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

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

我会将pdf文件(通过VBA代码)导出到该路径。当我在Windows XP上运行Excel 2007时,这段代码完美无缺。我最近升级了我的操作系统和办公室版本,现在我在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

1 个答案:

答案 0 :(得分: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