VBA变量昏暗的问题

时间:2014-02-01 17:21:19

标签: excel vba excel-vba methods

关于VBA的简短问题

我正在VBA中学习类模块,并且我遇到了在类模块中声明变量的新实践。在这里:

Public WithEvents TxtGroup As MSForms.TextBox

Dim Word1 As Word.Application

Dim bottomLabel As New System.Windows.Forms.Label

As 关键字之后,我们会看到两个单词连接的单词,而不是查看数据类型或对象或对类对象的引用就像某种目录...... 例如 MSForms.TextBox 因为我的问题有点开箱即用,我无法在我的VBA书籍上找到对声明技术中这种转换的充分解释。 我需要非常快速地学习课程,我肯定想问为什么我会遇到这种做法,因为我从未在模块中看到它。

我见过的例子是

Private Sub xlApp_NewWorkbook(ByVal Wb As Workbook)
Dim wks As Worksheet
With Wb
For Each wks In .Worksheets
wks.PageSetup.LeftFooter = “Created by: “ & .Application.UserName
wks.PageSetup.RightFooter = Now
Next wks
End With
End Sub

为什么这些代码块在其声明中没有名称空间,而其他代码块呢? 感谢您收看我的问题

1 个答案:

答案 0 :(得分:3)

看看这个MSDN article about Namespaces in VB

结合编程,术语namespace means表示包:

  

命名空间是一组标识符的容器(也称为   符号,名称)。[1] [2]命名空间提供了一个间接级别   特定标识符,从而可以区分   具有相同名称的标识符。

因此namespace允许具有相同名称的classes共存并并排使用。在每个包中,可以驻留一个或多个具有唯一名称的类。例如:

例如:

namespace Teachers
    class Person end class
end namespace

namespace Doctors
    class Person end class
end namespace

为了创建一个政治家对象,你需要唯一地识别这个类,所以你不能只写:

Dim p as Person

因为编译器无法知道从两个Person类中实例化哪个。这就是为什么你用它的命名空间识别类:

Dim t as Teachers.Person
Dim d as Doctors.Person

在您给出的示例中:

Dim Word1 As Word.Application   

Word 命名空间,应用类,因此变量的类型!

定义变量时,最后一个部分(在最后一个点之后)始终是一个类,最后一个点之前的所有内容都是命名空间!在您给出的示例中,您使用的是命名空间Systems.Windows.Forms中的TextBox。

如果类名是唯一的,即使它位于任何命名空间中,也不需要编写它,因为编译器可以自动推断出正确的名称。 在VB.NET中有 import 关键字,您可以使用该关键字命名空间导入到您的代码中,以便在不使用命名空间限定类的情况下使用这些类。