【发布时间】:2014-02-27 07:29:41
【问题描述】:
有一个关于 VBA 的问题,我一直在 Stack 上提出。我愿意不遗余力地寻找答案。请注意,这可能看起来很愚蠢和幼稚,但这是一个棘手的讽刺问题,几乎每个人都会一直错过答案。
根据我的 VBA 书籍(Bill Jelin - VBA Macros Microsoft Excel 2010),当我们创建自定义对象时,我们会打开一个类模块。 自定义对象的属性是声明为 Private 或 Public 的变量。 这对我来说似乎非常不合逻辑!!!我将在下面的图片中说明原因。
- 只是范围(“A1:A4”)
-
一个非常简单的 Sub 用于解释目的(你可以在下面清楚地看到它)
Sub dd() Dim i As Integer Dim Top As Range Set Top = Range("A1:A4") i = Top.Count MsgBox i End Sub Count 属性“计数”并返回集合中对象的数量
好吧,记住这个幼稚的例子一分钟,然后继续下面...
现在假设我们正在 VBA 中创建一个自定义对象,因此我们打开一个类模块并将其命名为 clsEmployee。现在该对象有 4 个属性,根据本书,我们将它们声明为类模块中的变量:
Public EmpName as String
Public EmpID as String
Public EmpRate as Double
Public EmpWeeklyHrs as Double
还有一个方法,所以我们在Class模块中输入她
Public Function EmpWeeklyPay as Double
EmpWeeklyPay = EmpRate * EmpWeeklyHrs
End Function
现在,如果我们转到普通模块引用并通过在 Intellisense 窗口中键入 Employee 来实例化对象...
...向我们展示了这些过程和功能
但是如何创建像 Count 这样的自定义属性?正如您在第一张图片的图形示例中看到的那样,Count 属性参与了某种逻辑步骤,并对集合中解析它们的单元格进行计数,并在 MsbBox 中返回数字 4。只有这些逻辑步骤实际上以某种方式硬编码在机器中才有意义。您不能通过简单的输入在 Class 模块中声明这种属性:
Dim Count as Integer
根据书中的荒谬公理:
Properties are variables that can be declared Private or Public.
这也将非常揭示 Count 属性 不等于 与图片中代码中的任何内容。这意味着 Count 属性不是“稻草”属性,它需要一些逻辑来解析 Range("A1:A4") 中的单元格并说有 4 个单元格。我只是看不到如何通过在 Class 模块中键入来创建这样一个自定义对象: Dim Count as Integer
如何在没有一些过程的情况下创建自定义对象属性,如名称、值或计数来告诉编译器要做什么在 Class 模块中输入“straw”声明?
【问题讨论】:
-
"我只是看不到如何通过在 Class 模块中输入来创建这样一个自定义对象:
Dim Count as Integer" 这不是你会做的。如果你正在学习这方面的书,那么你肯定在课堂模块中读过Public Property [Let|Set] XXXXX()和Public Property Get XXXX()吗?如果没有,你应该从那里开始。 -
不,先生,这些还不会消除这些障碍吗?
-
类几乎总是任何编程书籍的中间主题。不知道大多数情况,但我总是将它归类为中间,因为到达那里意味着比简单的 For、Do-While 循环或生成素数/斐波那契等等更多的投入。当然,如果你在上面问这个问题,你显然没有阅读完整的章节,或者你没有理解它。 :) 阅读它,消化它。然后再问。 @TimWilliams 是正确的。此外,请阅读很多关于继承的内容,因为在回答完上述问题后,您肯定也会想问这个问题。
-
除了大家写的,如果要获取一个集合的成员Count,需要设置一个集合。即使您已经正确创建了对象,您仍然需要设置这些对象的集合。
-
@TimWilliams、BK201 和 Ron Rosenfeld,你们都是对的,我完全同意你们所有的 cmets。我试图在我的回答中总结一些概念,如果我忘记了什么,请随时批评或更新我。