我一直在使用以下代码在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
答案 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