Board logo

標題: [發問] EXCEL VBA路徑問題 [打印本頁]

作者: minture3    時間: 2015-4-16 08:47     標題: EXCEL VBA路徑問題

請教各位
小弟在自訂表單中做了一個commandbutton並且指定程式如下:
  1. Private Sub CommandButton1_Click()
  2. ChDir "\\Nsa310\估價備份\備-電腦估價"
  3.    On Error GoTo myLINE
  4.     myFile = Application.GetSaveAsFilename
  5.     Exit Sub
  6. myLINE:
  7.     MsgBox "已取消"
  8. End Sub
複製代碼
主要是用來快速指向固定的存檔位置→"Nsa310\估價備份\備-電腦估價"
但是有時候路徑會自己跑掉變成指向到桌面
請問是否有解?
作者: PKKO    時間: 2015-4-16 13:38

回復 1# minture3

試試看
  1. Sub test()
  2.     With Application.FileDialog(msoFileDialogFolderPicker)
  3.         .InitialFileName = "\\Nsa310\估價備份\備-電腦估價"
  4.         .Show
  5.         '找出路徑
  6.         On Error GoTo myLINE
  7.         myFile = .SelectedItems(1)
  8.     End With
  9.     Exit Sub
  10. myLINE:
  11.     MsgBox "已取消"
  12. End Sub
複製代碼

作者: PKKO    時間: 2015-4-16 13:40

回復 1# minture3

你有時候會指向桌面的原因是因為,您原本指定儲存位置的這行程式碼完全沒用到

他內建的指定儲存位置為(最後一次另存新檔的位置)
作者: minture3    時間: 2015-4-16 16:13

本帖最後由 minture3 於 2015-4-16 16:16 編輯

回復 2# PKKO
感謝回覆!!
依您所以提供的程式碼得到的會是這個
[attach]20672[/attach]


myFile = .SelectedItems(1)
請教這一段的意思是?

myFile = Application.GetSaveAsFilename

不過我希望得到的是
[attach]20672[/attach]
作者: minture3    時間: 2015-4-16 16:19

請教這一段的意思是?
myFile = .SelectedItems(1)
我有試著把他改成以下這段
myFile = Application.GetSaveAsFilename
不過會變成先出現上圖的對話框取消後在出現下圖的對話框
不過我希望得到的是只有下圖這個
作者: PKKO    時間: 2015-4-16 18:46

回復 5# minture3

試試看
   myFile =Application.GetSaveAsFilename( "\\Nsa310\估價備份\備-電腦估價")
作者: minture3    時間: 2015-4-17 16:43

回復 6# PKKO

myFile =Application.GetSaveAsFilename
檔案的路徑好像是對了 但是點了儲存之後 檔案並沒有存進去

剛剛單獨試了一下Application.GetSaveAsFilename
會彈出另存的對話框
但是按了儲存之後 並沒有值型儲存的動作~~
不知道是不是我用法有誤
  1.   Private Sub CommandButton10_Click()
  2.     Application.GetSaveAsFilename
  3. End Sub  
複製代碼

作者: diolin    時間: 2015-4-17 17:17

回復 1# minture3

chdir 在 windows 7 上會有點問題, 後來我都改用 API 來指定

Private Declare Function SetCurrentDirectoryA Lib "kernel32" (ByVal lpPathName As String) As Long

SetCurrentDirectoryA "\\Nsa310\估價備份\備-電腦估價"
作者: PKKO    時間: 2015-4-17 21:12

回復 7# minture3


    我以為你知道用法

myFile =Application.GetSaveAsFilename( "\\Nsa310\估價備份\備-電腦估價")

這行程式碼只是用來告訴你:另存新檔的位置以及檔案名稱

並不會實際上真的執行另存新檔的動作

所以你需要的程式碼如下

    myFile = Application.GetSaveAsFilename("\\Nsa310\估價備份\備-電腦估價")
    ActiveWorkbook.SaveAs myFile & "xlsx"'才可儲存至你指定的檔案位置,後面的"xlsx"是EXCEL副檔案名稱,你也可以換成"xls","xlsm"
作者: minture3    時間: 2015-4-20 15:51

回復 9# PKKO

感謝PKKO
  1. If Application.GetSaveAsFilename("\\Nsa310\估價備份\CWCO\備-電腦估價\") Then
  2. Dim myName As String
  3. Sheets("窗").Select
  4. myName = Range("AB4") & "-" & Range("AB5") & "-" & Range("AB6")
  5. ActiveWorkbook.SaveAs Filename:=myName, FileFormat:=xlExcel8, Password:="1273"
  6. Else
  7. MsgBox ("已取消")
  8. End If
複製代碼
基本上功能差不多接近我要的了
不過奇怪的是執行這一行時
Application.GetSaveAsFilename ("\\Nsa310\估價備份\CWCO\備-電腦估價\")
可以指定存檔的路徑
不過他一定會彈出這個視窗

不管按確定還是取消最後還是靠這行另存檔案
ActiveWorkbook.SaveAs Filename:=myName, FileFormat:=xlExcel8, Password:="1273"
雖然接近我要的了 不過感覺就是怪怪的!!~
作者: minture3    時間: 2015-4-20 16:12

回復 8# diolin

請教diolin
Private Declare Function SetCurrentDirectoryA Lib "kernel32" (ByVal lpPathName As String) As Long
SetCurrentDirectoryA "\\Nsa310\估價備份\備-電腦估價"

這個的用法是??
作者: PKKO    時間: 2015-4-20 19:24

回復 10# minture3


    我不曉得VBA有沒有可以透過瀏覽視窗之後直接儲存的程式碼
但實際操作的時候,完全感覺不到差異
因為點選完畢=產生路徑
將活頁簿儲存新檔案(用產生的路徑),你不會感覺到有任何差異,就好像點了就儲存一樣!




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