Board logo

標題: [發問] 使用 FileDialog 問題 [已解決] [打印本頁]

作者: jimmyhk    時間: 2011-8-31 02:31     標題: 使用 FileDialog 問題 [已解決]

本帖最後由 jimmyhk 於 2011-9-14 19:17 編輯

我建立了一個表單, 當按了 CommandButton2 之後就會開一個瀏覽資料夾的物件,
用作選擇資料夾, 及後把選擇了的資料夾路徑存放到 Data_Field 的 D24 內,
內容如下:

Private Sub CommandButton2_Click()
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = -1 Then MsgBox "現在將儲存到 " & fd.SelectedItems(1) & "/  .  請按確定繼續"

Sheets("Data_Field").Select
Range("D24").Value = fd.SelectedItems(1)  '如果使用者在 FileDialog 開啟時沒有按確定, 按了取消鍵, 就會停在這裡.   應怎麼辦?
Unload ChoiceSaveLocation
End Sub
作者: GBKEE    時間: 2011-8-31 13:52

回復 1# jimmyhk
試試看
  1. Private Sub CommandButton2_Click()
  2.     Dim fd As FileDialog
  3.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  4.     If fd.Show = -1 Then
  5.        If MsgBox("現在將儲存到 " & fd.SelectedItems(1) & "/  .  請按確定繼續", vbYesNo) = vbYes Then
  6.             Sheets("Data_Field").Select
  7.             Range("D24").Value = fd.SelectedItems(1)  
  8.             Unload ChoiceSaveLocation
  9.         End If
  10.     End If
  11. End Sub
複製代碼

作者: jimmyhk    時間: 2011-9-1 23:49

哦~~~  於裡面再加一個 if case...  um.....  好
試一下先~
作者: jimmyhk    時間: 2011-9-14 19:15

回復 2# GBKEE

最後我轉了另一個方法處理,
不知這個好不好~
  1. Private Sub CommandButton2_Click()
  2.     Dim fd As FileDialog
  3.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  4.     fd.InitialFileName = "d:\"  '如果用家按取消就會執行 RunAgain
  5. On Error GoTo RunAgain
  6.     If fd.Show = -1 Then MsgBox "檔案將儲存到 " & fd.SelectedItems(1) & "\  , 請按確定繼續."

  7. RunAgain:
  8. Select Case Err.Number
  9. Case 5
  10. Unload ChoiceSaveLocation
  11. ChoiceSaveLocation.Show
  12. End Select

  13. Sheets("Data_Field").Select
  14. Range("D24").Value = fd.SelectedItems(1)

  15. If Range("D24") <> Range("G24") Then
  16.     AskChangeDefaultBox.Show
  17.     Else
  18.     Sheets("Input").Select
  19.     Unload ChoiceSaveLocation
  20. End If
  21. Unload ChoiceSaveLocation
  22. End Sub
複製代碼

作者: GBKEE    時間: 2011-9-14 19:46

回復 4# jimmyhk
使用 On Error GoTo RunAgain   在這程序中一有 錯誤 就會導引到 RunAgain  要小心使用
  1. Private Sub CommandButton2_Click()
  2.     Dim fd As FileDialog
  3.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  4.     fd.InitialFileName = "d:\"  '如果用家按取消就會執行 RunAgain
  5. On Error GoTo RunAgain
  6.     If fd.Show = -1 Then MsgBox "檔案將儲存到 " & fd.SelectedItems(1) & "\  , 請按確定繼續."
  7.               '**************這MsgBox 有按沒按都沒作用?????**********
  8. Sheets("Data_Field").Select
  9. Range("D24").Value = fd.SelectedItems(1)
  10. If Range("D24") <> Range("G24") Then
  11.     AskChangeDefaultBox.Show
  12.     Else
  13.     Sheets("Input").Select
  14.     Unload ChoiceSaveLocation
  15. End If
  16. Unload ChoiceSaveLocation
  17. Exit Sub
  18. '''''''一般處裡錯誤都會置於程序底部   '''''''
  19. RunAgain:
  20. Select Case Err.Number
  21. Case 5
  22. Unload ChoiceSaveLocation
  23. ChoiceSaveLocation.Show
  24. End Select
  25. Resume          '返回產生錯誤的程式碼
  26. End Sub
複製代碼

作者: jimmyhk    時間: 2011-9-14 19:54

回復 5# GBKEE
  1. Private Sub CommandButton2_Click()
  2.     Dim fd As FileDialog
  3.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  4.     fd.InitialFileName = "d:\"  '如果用家按取消就會執行 RunAgain
  5. On Error GoTo RunAgain
  6.     If fd.Show = -1 Then MsgBox "檔案將儲存到 " & fd.SelectedItems(1) & "\  , 請按確定繼續."
  7.               '**************這MsgBox 有按沒按都沒作用?????**********  <這是沒有用的, 只是作一個小提醒
  8. Sheets("Data_Field").Select
  9. Range("D24").Value = fd.SelectedItems(1)
  10. If Range("D24") <> Range("G24") Then
  11.     AskChangeDefaultBox.Show
  12.     Else
  13.     Sheets("Input").Select
  14.     Unload ChoiceSaveLocation
  15. End If
  16. Unload ChoiceSaveLocation
  17. Exit Sub
  18. '''''''一般處裡錯誤都會置於程序底部   ''''''' <- 明白
  19. RunAgain:
  20. Select Case Err.Number
  21. Case 5 '  **我就是怕會有其他錯誤, 所以決定只有 Case 5 才執行重選.  
  22. Unload ChoiceSaveLocation
  23. ChoiceSaveLocation.Show
  24. End Select
  25. Resume          '返回產生錯誤的程式碼 <- 在這加這一句的原因是 ?  因為現在如果使用者在按取消後已會自動重新行一次 Unload ChoiceSaveLocation 和 ChoiceSaveLoction.show, 加入的目的是?
  26. End Sub
複製代碼

作者: GBKEE    時間: 2011-9-14 20:13

本帖最後由 GBKEE 於 2011-9-14 20:14 編輯

回復 6# jimmyhk
Resume    這加這一句的原因是    
一般都是錯誤已處裡完後, 錯誤已消失了.可回去原來的那一行程式碼.
作者: jimmyhk    時間: 2011-9-14 20:37

回復 7# GBKEE


消失是有關錯誤已解決還是給錯誤訊息彈出後可以繼續執行其他步驟?
作者: GBKEE    時間: 2011-9-15 06:45

回復 8# jimmyhk
Resume
一般都是錯誤已處裡完後, 那個錯誤已消失了.可回去原來的那一行繼續程式碼的運行.
作者: jimmyhk    時間: 2011-9-15 06:54

回復 9# GBKEE


哦~  明白~  thx~~~




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