我有一個 VBA 代碼,可以從 MS Access 或 Excel 應用程式運行。
在代碼的一部分(如下所示)中,我必須找到默認的應用程式檔案目錄,以保存 CSV 檔案。
代碼在 Excel 中運行沒有任何錯誤,但在 MS Access 中,編譯器會抱怨 <Application.ThisWorkbook.Path> 并在那里停止。
代碼有什么問題?我還有其他方法可以找到適用于 MS Access 和 Excel 的檔案路徑嗎?
If CSVpath = vbNullString Then
Select Case Application.Name '' system in which the code is running from
Case Is = "Microsoft Excel" '' it raises an error in MS Access
CSVpath = Application.ThisWorkbook.Path "\DataSet_" CStr(Format(Now(), "YYYY-MM-DD.HH.MM.SS")) ".csv"
Case Is = "Microsoft Access"
CSVpath = Application.CurrentProject.Path "\DataSet_" CStr(Format(Now(), "YYYY-MM-DD.HH.MM.SS")) ".csv"
Case Else
CSVpath = ""
End Select
End If
uj5u.com熱心網友回復:
我會像這樣嘗試,Application使用字串變數轉換的主檔案物件。
這樣,如果您稍后改變了對檔案名的看法,您只需在一處更改它。
另外,我添加了檢查檔案尚未保存的可能性(那時它不會有路徑)
Sub Test()
Dim DocObjName As String
Dim DocPath As String
Dim CSVpath As String
Select Case Application.Name
Case "Microsoft Excel"
DocObjName = "ThisWorkbook"
Case "Microsoft Access"
DocObjName = "CurrentProject"
Case Else
' if it stops here, you know you have made a programming error to fix
' do not just set it to an empty string and let it continue
Stop
Exit Sub
End Select
DocPath = CallByName(Application, DocObjName, VbGet).Path
If Len(DocPath) = 0 Then
MsgBox "Error: File has not yet been saved"
Exit Sub
Else
CSVpath = DocPath & "\DataSet_" & Format(Now(), "YYYY-MM-DD.HH.MM.SS") & ".csv"
End If
Debug.Print CSVpath
End Sub
并且只是為了良好的變數命名,我會使用類似的東西CSVFullFilename而不是CSVpath因為它不僅僅是一條路徑 - 但這只是個人喜好。
uj5u.com熱心網友回復:
對于 MS-Access 嘗試:
Application.StartupPath & "\your resource database name"
- Application.StartupPath將為您提供可執行 (.exe) 檔案的位置。
- & "\your resource database name " 是你的檔案名。確保將它放在與 .exe 相同的檔案夾中
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/330825.html
