Board logo

標題: [發問] ChDrive/ ChDir問題 [打印本頁]

作者: acdx    時間: 2016-12-16 10:19     標題: ChDrive/ ChDir問題

ChDrive可以變更目前的磁碟機, ChDir則是用來改變目前的資料夾
我用下列方式撰寫:
filepath = ActiveWorkbook.Path
ChDrive filepath
ChDir filepath
filt = "excel files (*.xls;*.xlsx),*.xls;*.xlsx"
Filename = Application.GetOpenFilename(FileFilter:=filt, FilterIndex:=5, title:="選擇檔案", MultiSelect:=True)
...
...
我開啟的excel檔案是在某一個資料夾(ActiveWorkbook.Path),且希望執行opne file時開啟的路徑會在同一個資料夾,若是開啟的檔案是網路芳鄰上的電腦(即ActiveWorkbook.Path不是在自己的電腦),就會出現錯誤,請問該如何改才能修正這個錯誤?
作者: GBKEE    時間: 2016-12-16 19:41

回復 1# acdx
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim filepath As String, A As String, B As String
  4.     filepath = ActiveWorkbook.Path
  5.    MsgBox CurDir  '***CurDir 函數傳回一個 Variant (String),用來代表目前的路徑。
  6.     A = Split(CurDir, "\")(0)
  7.     B = Split(filepath, "\")(0)
  8.     If A <> B Then ChDrive B
  9.     ChDir filepath
  10.     MsgBox CurDir
  11. End Sub
複製代碼

作者: stillfish00    時間: 2016-12-19 20:14

回復 1# acdx
ChDrive : 改變工作磁碟機
ChDir : 改變工作目錄
依題目的意思是希望 GetOpenFilename 選擇檔案時的預設路徑為該檔路徑,
但當檔案在分享資料夾(路經通常為 "\\電腦名稱\資料夾路徑\檔案")
無法用ChDir切換工作目錄到 "\\電腦名稱\資料夾路徑\"

替代方法,這邊舉兩種 :
1. 改用 Application.FileDialog(msoFileDialogOpen),FileDialog可以直接設定InitialFileName
  1. Sub m1()
  2.     Dim filename As String
  3.     With Application.FileDialog(msoFileDialogOpen)
  4.         .AllowMultiSelect = False
  5.         .InitialFileName = ActiveWorkbook.Path
  6.         .Filters.Clear
  7.         .Filters.Add "Excel files", "*.xlsx;*.xls"
  8.         .Show

  9.         If .SelectedItems.Count = 0 Then Exit Sub   'cancel
  10.         filename = .SelectedItems(1)
  11.     End With
  12.    
  13.     MsgBox filename
  14. End Sub
複製代碼
2. 用 windows API : SetCurrentDirectory切換工作目錄,再用 GetOpenFilename
  1. Private Declare Function SetCurrentDirectory Lib "kernel32" _
  2. Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long

  3. Sub m2()
  4.     Dim filt As String, filename As String
  5.     SetCurrentDirectory ActiveWorkbook.Path
  6.     filt = "excel files (*.xls;*.xlsx),*.xls;*.xlsx"
  7.     filename = Application.GetOpenFilename(FileFilter:=filt, FilterIndex:=5, Title:="選擇檔案", MultiSelect:=True)
  8. End Sub
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)