提问人: 提问时间:7/10/2013 更新时间:10/22/2014 访问量:7431
VBA 等效于 C# 使用或 VB.NET 导入/创建别名
VBA equivalent to C# using or VB.NET imports / creating aliases
问:
基本参考:VBA、Visual Basic .NET 和 C# 的 10 种代码转换
注意:我已经创建并导入了一个 *.dll
,这个问题是关于别名的。
假设一个类的编程名称是Test
TestNameSpace.Test
[ProgId("TestNamespace.Test")]
public class Test ...
现在,假设一个 C# 解决方案已被密封并编译成一个,我在 Excel 的 VBE 中引用了它。注意:在这一点上,我无法修改编程名称,就好像不是我写的一样。*.dll
*.dll
这是在VBA
中:而不是像这样声明变量:
Dim myTest As TestNameSpace.Test
Set myTest = new TestNameSpace.Test
我更愿意称它为(仍在 VBE 中)
Dim myTest As Test
Set myText = new Test
在 C# 中,您通常会说
using newNameForTest = TestNamespace.Test;
newNameForTest myTest = new NewNameForTest;
注意:假设项目中没有命名空间冲突VBA
问:VBA
中是否存在使用
或
VB.NET 导入
别名对 C#
的等效调用?
答:
有趣的问题(经常使用它们,但从未想过它们的确切含义)。Imports
语句的定义(与 相同)非常明确:它的唯一功能是通过删除相应的命名空间来缩短引用。因此,首先要问的问题是:VBA有这样的东西(命名空间)吗?答案是否定的,因为您可以从多个来源阅读;示例:链接 1 链接 2using
总而言之,在没有找到对任何 VBA 语句执行类似操作的单个引用之后,并确认 VBA 不考虑证明其使用(命名空间)的“结构”是合理的,我认为我可以说:不,VBA 中没有这样的东西。Imports
using
此外,您应该记住,它不会有任何真正的适用性。例如:在转换可能使用的 VB.NET 代码时,例如:Imports
Imports Microsoft.Office.Interop.Word
...
Dim wdApp As Application
代码将完全更改,因此生成的字符串不会那么长:
Dim wdApp As Word.Application ' Prefacing the library's display name.
我认为这是一个很好的图形原因,解释了为什么 VBA 不需要这种东西:VB.NET 考虑了必须正确分类的各种现实(命名空间);VBA 所占的情况要少得多,因此可以承受不执行如此系统、长命名的分类。
--------------------------澄清
Imports
/using
只是一个名称的缩写,也就是说,每次在 / 中使用给定命名空间的对象时,不要写 whatever.whatever2.whatever3,而是在开头添加一个 / 语句,基本上意思是:“对于命名空间 X 的所有成员,只需忘记所有标题 bla,bla”。Module
Class
Imports
using
我并不是说你不能效仿这种行为;只是强调在 VB.NET 中具有内置的短名称功能是有意义的,因为名称可能会变得非常长,但在 VBA 中则不那么重要。
评论
("Sheet1")
Application.ThisWorkbook.Sheets("Sheet1")
答案是否定的:有一个内置的 VBE 功能,它可以识别添加到项目的引用,如果没有名称冲突,则在运行时(VBE 的运行时)创建别名
如果注册表中的名称冲突,所有点都将替换为下划线。.
_
» ProgId
's(编程标识符)
在 COM 中,它仅用于后期绑定。这是您进行调用以创建新对象的方式
Dim myObj = CreateObject("TestNamespace.Test")
» EarlyBinding
和LateBinding
在早期绑定中,使用关键字指定要创建的对象的类型。对象的名称应与 VBA 的智能感知一起弹出。它与 .要检索用于对象类型的实际命名空间,请打开并在那里找到它new
ProgId
Object Explorer
F2
本文解释了名称的来源 早期绑定 部分
使用与何时使用后期绑定相同的链接
有关 MSDN 编程标识符部分,请参阅此内容
评论