返回列表 上一主題 發帖

[發問] 2003與2007得到的路徑差異

回復 9# maiko

InitialFileName是可以用來指定對話視窗中的預備目錄
若未指定InitialFileName則會以選項中的預設存檔目錄作為對話視窗預設目錄
而SelectedItems才是所選擇的資料夾
所以,妳要寫入的應該是   SelectedItems而不是InitialFileName
這樣SelectedItems不管是2003或2007都是不含最後的斜線
  1. Sub OpenPath()
  2. Dim fd As FileDialog, FileName As String, FileFolder As String
  3. Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  4. With fd
  5.      .InitialFileName = "E:\"  '指定對話視窗的目錄
  6.      .AllowMultiSelect = False
  7.     If .Show = -1 Then
  8.         FileFolder = .SelectedItems(1)   '選擇的資料夾
  9.     Else
  10.         End
  11.     End If
  12. End With
  13. [F2] = FileFolder
  14. End Sub
複製代碼
學海無涯_不恥下問

TOP

進入這主題學到不少
搜尋學到,順便分享一下,較常用DefaultFilePath避免上述變化
有空試試,學習一下FileDialog搭配運用


自Excel XP(2002)起,Application多了一個FileDialog屬性。FileDialog 屬性傳回 FileDialog 物件,此物件代表檔案對話方塊的執行個體。

用法:
Application.FileDialog(fileDialogType)
fileDialogType 必選的 MsoFileDialogType。檔案對話方塊的類型。
MsoFileDialogType 可以是這些 MsoFileDialogType 常數之一。

    msoFileDialogFilePicker 允許使用者選取檔案。
    msoFileDialogFolderPicker 允許使用者選取資料夾。
    msoFileDialogOpen 允許使用者開啟檔案。
    msoFileDialogSaveAs 允許使用者儲存檔案。

FileDialog 物件提供檔案對話方塊功能,類似 Microsoft Office 應用程式中的標準 [開啟舊檔] 及 [儲存檔案] 對話方塊功能。運用這些對話方塊,整合方案的使用者可以很容易地指定該方案應使用的檔案及資料夾。

使用 FileDialog 物件
以 FileDialog 屬性傳回 FileDialog 物件。FileDialog 屬性位在每個單獨的 Office 應用程式 Application 物件中。屬性使用一個引數 DialogType,以確定屬性所傳回的 FileDialog 物件類型。下列是 FileDialog 物件的 4 種類型:

    [開啟舊檔] 對話方塊:讓使用者選取一或多個檔案,可使用 Execute 方法在主應用程式中開啟。
    [另存新檔] 對話方塊:讓使用者選取一個檔案,可使用 Execute 方法儲存目前的檔案。
    [檔案選擇器] 對話方塊:讓使用者選取一或多個檔案。在 FileDialogSelectedItems 集合中擷取使用者所選取的檔案路徑。
    [資料夾選擇器] 對話方塊:讓使用者選取路徑。在 FileDialogSelectedItems 集合中擷取使用者所選取的路徑。

每個主應用程式只能例示 FileDialog 物件的單個實例。因此,即使當建立多個 FileDialog 物件時,亦保留 FileDialog 物件的許多屬性。因此,請確認在顯示該對話方塊前,已設定適合您目的之所有屬性。

為了使用 FileDialog 物件顯示對話方塊,您必須使用 Show 方法。一旦顯示對話方塊,就會在使用者結束該對話方塊之後才執行程式碼。
100 字節以內
不支持自定義 Discuz! 代碼

TOP

回報一下測試結果,供參考
Win7+OFFICE 2010
OpenPath4
使用後測試結果 d:\SaveExcel\20121009
但下次選取時為跳到目錄為 d:\SaveExcel

OpenPath5
使用後測試結果d:\SaveExcel\
一樣下次選取時為跳到目錄為 d:\SaveExcel
  1.     Sub OpenPath4()
  2.     Dim fd As FileDialog, FileName As String, FileFolder As String
  3.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  4.     With fd
  5.         .AllowMultiSelect = False
  6.         If .Show = -1 Then
  7.             FileFolder = .SelectedItems(1)  '#1
  8.         Else
  9.             End
  10.         End If
  11.     End With
  12.     [F2] = FileFolder  '#2
  13.     End Sub
複製代碼
  1. Sub OpenPath5()
  2. Dim fd As FileDialog, FileName As String, FileFolder As String
  3. Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  4. With fd
  5.     .AllowMultiSelect = False
  6.     If .Show = -1 Then
  7.         FileFolder = .InitialFileName
  8.     Else
  9.         End
  10.     End If
  11. End With
  12. [F2] = fd.InitialFileName
  13. End Sub
複製代碼
100 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 8# maiko
而我用stillfish00大提供的取得的檔案路徑卻是:d:\SaveExcel\20101009,後面少了「\」           
不一樣的  1# 是 Sheet1.Range("F2") = fd.InitialFileName
stillfish00 2# 是 Sheet1.Range("F2") = FileFolder

TOP

回復  maiko
而我用stillfish00大提供的取得的檔案路徑卻是:d:\SaveExcel\20101009,後面少了「\」      ...
GBKEE 發表於 2012-10-10 07:37



   

FileFolder = .InitialFileName
也就是:
FileFolder = fd.InitialFileName
對等公式。
試過了,結果一樣,唯有像 stillfish00 大說的一樣,在後面加上 & "\" ,那麼無論甚麼版本的Excel都可以用到,統一樣式,不會讓以後改了版本就用不到。

謝謝這麼多位高手的幫助,讓我更了解了FileDialog的屬性,謝謝!

TOP

回復 15# maiko
很抱歉沒說清楚 請再看  2# 的程式碼 有 FileFolder = .SelectedItems(1)   
stillfish00 2# 是 Sheet1.Range("F2") = FileFolder 是最後沒有 "\"

TOP

回復  maiko
很抱歉沒說清楚 請再看  2# 的程式碼 有 FileFolder = .SelectedItems(1)   
stillfish00 2 ...
GBKEE 發表於 2012-10-10 08:28



   

那麼依你所見,是不是Sheet1.Range("F2") = FileFolder 最後是沒有「\」,那麼應該用什麼才會有「\」?不用後面自己加& "\"?

TOP

回復 17# maiko
  1. Option Explicit
  2. Sub OpenPath()
  3. Dim fd As FileDialog, FileName As String, FileFolder As String
  4. Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  5. With fd
  6.      .InitialFileName = "E:\"  '指定對話視窗的目錄
  7.      .AllowMultiSelect = False
  8.     If .Show = -1 Then
  9.         FileFolder = .SelectedItems(1)   '選擇的資料夾
  10.         [F2] = .SelectedItems(1)      '最後沒"\"
  11.         [F3] = fd.InitialFileName    '有"\"
  12.     Else
  13.         End
  14.     End If
  15. End With
  16. End Sub
複製代碼

TOP

回復  maiko
GBKEE 發表於 2012-10-10 12:42



   
謝謝大大的熱心幫忙,不過大大好像不明白我前面所講的要求:

InitialFileName如果用在2003上是完全可以取得完整的路徑,如:d:\SaveExcel\20121009\
可是InitialFileName如果用在2007上卻是得到的路徑會少了一層,如:d:\SaveExcel\,這也就是你說的後面有"\",可是路徑不完整。

如果用SelectedItems(1),那麼在2003或2007(因為我沒有2010,可是之前有大大在2010上試過)是可以取得到比較完整的路徑,如:d:\SaveExcel\20121009,後面就沒有"\",就如stillfish00大說過的那樣,唯有自己加上& "\",不知道這樣說明你能清楚嗎?

請試多幾次代碼的區別,謝謝大大的熱心幫忙!

TOP

回復 19# maiko
可是InitialFileName如果用在2007上卻是得到的路徑會少了一層
我只有2003版 所以這差異我無從參與的.

TOP

        靜思自在 : 人生最大的成就是從失敗中站起來。
返回列表 上一主題