excel - 在 VBA 中查找适用于 MS Access 和 MS Excel 的应用程序目录路径
问题描述
我有一个 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
解决方案
我会这样尝试,Application
使用字符串变量转换 的主文档对象。
这样,如果您稍后对文件名改变主意,您只需在一个地方进行更改。
另外,我添加了一个检查文件是否尚未保存的可能性(那时它没有路径)
Sub Test()
Dim DocObjName As String
Dim DocPath As String
Dim CSVFullFilename As String
Select Case Application.Name
Case "Microsoft Excel"
DocObjName = "ThisWorkbook"
Case "Microsoft Access"
DocObjName = "CurrentProject"
Case "Microsoft Word"
DocObjName = "ActiveDocument"
Case "Microsoft PowerPoint"
DocObjName = "ActivePresentation"
Case Else
' if it stops here, you know you have made a programming error to fix
' add another case based on the application you are using?
' 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, so there is no path to use", vbCritical
Exit Sub
Else
CSVFullFilename = DocPath & "\DataSet_" & Format(Now(), "YYYY-MM-DD.HH.MM.SS") & ".csv"
End If
Debug.Print CSVFullFilename
End Sub
并且只是为了良好的变量命名,我会使用类似的东西,CSVFullFilename
而不是CSVpath
因为它不仅仅是一条路径 - 但这只是个人喜好。
推荐阅读
- arrays - “[XX000] ERROR: failed to build any 3-way joins” Postgresql 错误是什么意思?
- mysql - 如何从 Angular7 中的环回中获得响应
- android - 如何在颤动中设置 Transform.translate() 动画的持续时间?
- javascript - asyncData 生命周期在 Nuxt 和 Vue 中无法正常工作
- php - 如何仅在表单提交后显示 Div 标签?
- html - 如何将表单输入与 boostrap 对齐?
- excel - 通过 TagName 进行网页抓取
- python - Pytorch 不支持 one-hot 向量?
- r - 如何在桑基图中垂直改变节点的位置
- ruby-on-rails - 何时(何时不)运行 `sanitize` 方法?