gpt4 book ai didi

excel - 表示 Access 或 Excel 的常量

转载 作者:行者123 更新时间:2023-12-02 07:58:08 24 4
gpt4 key购买 nike

我正在编写一些通用宏。我有一个应该可以在 Access 和 Excel 下执行的宏。我尝试过以下想法。

#If Application.Name = "Microsoft Excel" Then
sFile = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, ".")) & "foo"
#ElseIf Application.Name = "Microsoft Access" Then
sFile = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, ".")) & "foo"
#End If

当然这是行不通的。 Application 对象在编译时不存在。我的问题是是否有一个常量指示宏在 Access 或 Excel 下运行?

最佳答案

只能在编译器条件中使用编译器常量。这意味着您必须在部署之前调整常量值,如下所示:

'Requires References to BOTH Excel AND Excel
#Const AccessHost = False
#Const ExcelHost = True
#If ExcelHost Then
sFile = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, ".")) & "foo"
#ElseIf AccessHost
sFile = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, ".")) & "foo"
#End If

如果您想要更动态的东西,并且没有对 Excel 和 Access 的早期绑定(bind)引用,那么您不需要编译器指令,但您确实需要使用后期绑定(bind)来使其在两者中都工作主持人:

Dim app As Object 'Late-binding
Set app = Application
If app.Name = "Microsoft Excel" Then
sFile = Left(app.ThisWorkbook.FullName, InStrRev(app.ThisWorkbook.FullName, ".")) & "foo"
ElseIf app.Name = "Microsoft Access" Then
sFile = Left(app.CurrentDb.Name, InStrRev(app.CurrentDb.Name, ".")) & "foo"
End If

关于excel - 表示 Access 或 Excel 的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45854327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com