返回列表 上一主題 發帖

[發問] 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\
就差這麼一層。

回復 1# maiko
  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 = .SelectedItems(1)  '#1
  8.     Else
  9.         End
  10.     End If
  11. End With
  12. Sheet1.Range("F2") = FileFolder  '#2
  13. End Sub
複製代碼
InitialFileName只是你開啟Dialog時一開始的位置

TOP

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



   

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

TOP

回復 1# maiko
2# 說 InitialFileName只是你開啟Dialog時一開始的位置
預設如圖

  1. Option Explicit
  2. Sub Ex() ' 2003, 2007 分別執行看看有無差別
  3.     MsgBox Application.DefaultFilePath
  4. End Sub
複製代碼

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

回復 5# maiko
1#問說:  2003  d:\SaveExcel\20121009 可是在2007時拿到的路徑是:d:\SaveExcel\
我的回覆 是指出可能是 Application.DefaultFilePath   2003,2007 的「預設檔案位置」 路徑不同
你問 :      InitialFileName只是開啟Dialog時一開始的位置 就是「預設檔案位置
                所以在開啟Dialog時已經改變了檔案位置,所以按了確定以後所得到的路徑已經不是「預設檔案位置」的路徑。
是對的
  1. Sub Ex()
  2.     Application.DefaultFilePath = "D:\TEST"
  3.     '可修改「預設檔案位置」
  4. End Sub
複製代碼

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

回復 5# maiko
Hi , 我家是win7+Excel2010 ,

我又試了一遍 , 確實 .InitialFileName 也會隨使用者操作後改變路徑 , 只是當初沒想到還能這樣做為回傳結果 , 但如果沒特殊需求我還是會用 .SelectedItems取回結果啦 , 少個斜線就用笨方法 & "\" 自己加上去:L

然後win7+Excel2010下 , 使用 .InitialFileName也跟你一樣少一層 , 但跟Application.DefaultFilePath不一致 , 反而是跟curDir一致 , 供您參考

TOP

        靜思自在 : 成功是優點的發揮,失敗是缺點的累積。
返回列表 上一主題