返回列表 上一主題 發帖

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

[發問] 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.     .AllowMultiSelect = False
  6.     If .Show = -1 Then
  7.         FileFolder = .InitialFileName
  8.     Else
  9.         End
  10.     End If
  11. End With
  12. Sheet1.Range("F2") = fd.InitialFileName
  13. End Sub
複製代碼
在2003時可以完全的拿到路徑,可是在2007時就只能拿到當前路徑的上一層,請問哪裡出錯了?
例如:
在2003時拿到的路徑是:
d:\SaveExcel\20121009
可是在2007時拿到的路徑是:
d:\SaveExcel\
就差這麼一層。

回復  maiko InitialFileName只是你開啟Dialog時一開始的位置
stillfish00 發表於 2012-10-9 14:21



   

有個小問題:
得到的路徑是:
d:\SaveExcel\20121009
並不是:
d:\SaveExcel\20121009\
少了個「\」符號。

TOP

回復  maiko
2# 說 InitialFileName只是你開啟Dialog時一開始的位置
預設如圖
GBKEE 發表於 2012-10-9 15:33



   

1. 你的意思是不是說在選項中的「預設檔案位置」沒有「\」,那麼取得的路徑最後面就沒有「\」?

2. 還是說InitialFileName只是開啟Dialog時一開始的位置 就是「預設檔案位置」?

如果是1.的話,那麼我在WinXP + Excel 2007,用InitialFileName就可以得到完整的路徑,如:d:\SaveExcel\20121009\
如果是2.的話,因為在開啟Dialog時已經改變了檔案位置,所以按了確定以後所得到的路徑已經不是「預設檔案位置」的路徑。

忽然,我得到了一個好像跟Windows有關的問題,就是:
用Win7 + Excel 2007的話,用.InitialFileName取到的路徑就會少一層;
用WinXP + Excel 2007的話,用.InitialFileName取到的路徑就很完整。
當然Excel 2003在哪個Windows都沒有問題。

不知道這個是不是Windows本身的FileDialog介面不同所得到的路徑不同?
這個是WinXP + Excel 2007擷取的FileDialog介面:


Win7 + Excel 2007暫時擷取不到,等下再補上。

TOP

請各位高手用代碼試試看,哪裡出錯了?有什麼地方要改進?謝謝!

TOP

回復  maiko
1#問說:  2003  d:\SaveExcel\20121009 可是在2007時拿到的路徑是:d:\SaveExcel\
我的回覆 ...
GBKEE 發表於 2012-10-9 17:16



   
你誤會了我的意思了,我並不是要「預設檔案位置」或者要改變「預設檔案位置」,我是想通過選擇檔案路徑然後給出完整的路徑字串,如:d:\SaveExcel\20121009\,這樣的字串,而我在2003時,使用InitialFileName是可以完整的取得檔案路徑:d:\SaveExcel\20121009\,而在2007時,使用InitialFileName就只能取得:d:\SaveExcel\,就是差了一層路徑。

而我用stillfish00大提供的取得的檔案路徑卻是:d:\SaveExcel\20101009,後面少了「\」這個,正是這樣的困擾才問這裡的高手看看有什麼方法解決完整路徑字串的問題,謝謝!

請用代碼在Excel上試試。謝謝!

TOP

補上在Win7 + Excel 2007的 FileDialog 介面


這是WinXP + Excel 2007 的 FileDialog 介面


問題會不會出在兩個介面所得的路徑不同,可能已經不是用InitialFileName,也不是用SelectedItems(1)所能取得的路徑了,是不是還有其它的方法取得這樣的路徑呢?謝謝!

TOP

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



   

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

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

TOP

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



   

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

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

回復 21# Happkkevin


   

的確如你所說的那樣,2003選取後下次開啟是不會跳回上一層的,所以我說就是兩種版本的FileDialog的差異,正在等待高手如何解決,謝謝!

TOP

        靜思自在 : 小事不做、大事難成。
返回列表 上一主題