VBA类方法链接

Dic*_*ckk 2 methods vba class

我正在寻找一种'链类方法'的方法,例如Range对象可以做类似"Range.Borders.Color"的事情,我想Borders部分是它自己的类,它正由Range类访问但是我不知道如何用我自己的类实现类似的东西 - 我甚至不知道这是什么叫做,经过几个小时的搜索后我想我可能会慢慢地学习VBA.

任何人都可以a)提供我可以看到的代码来复制或b)告诉我这是什么叫做甚至可能在一个有用的方向推动我?

正如我所知,在不提供任何代码的情况下要求代码使我看起来像一个鸡巴,请考虑以下伪代码.我知道这很恐怖,但它可能对我有任何意义:

main ------------------------------------------------- -----------------------

Dim obj as class1
set obj = new class1

obj.Target = Range("A1:B5")
obj.Borders.Add

'A1:B5 put into modRange then given borders
Run Code Online (Sandbox Code Playgroud)

class1 ------------------------------------------------- -----------------------

Private modRange as range

Public Property Let Target(newTarget as Range)
  set modRange = newTarget
End Property

Public Property Borders()
    Public Sub Add()
        'Code to add borders to modRange
    End Sub 
    Public Sub Remove()
        'Code to remove borders from modRange
    End Sub 
End Property
Run Code Online (Sandbox Code Playgroud)

我知道这不是实际代码的样子.但由于我不知道语法,这是我能想象到的最接近的东西.我想真正的东西会有class1链接到其他类模块.也许.

作为旁注.如果我确实有一个名为"Borders"的类(我可能不会)作为这个1类对象的一部分,它是否会与Range对象的Borders部分冲突,并且它具有相似的名称?或者私人范围会保留一天吗?

(作为一个我知道的类,.Borders.Add/Remove有点荒谬,我真的只是在语法之后 - Honest)

xxb*_*bcc 6

要拥有对象的复杂属性,需要创建一个新类,然后在父类中创建该类的实例.因此,如果你想拥有类似的东西Class1.Borders.Add(),你首先必须创建一个新CBorders类(我曾经C在VB6/VBA中添加我的类名以避免名称冲突).就像是:

'- in class CBorder
Private m_lColor As Long

Public Property Get Color() As Long
    Color = m_lColor
End Property

Public Property Let Color(ByVal lNewColor As Long)
    m_lColor = lNewColor
End Property

Public Sub Reset()
    m_lColor = 0
End Sub

...
Run Code Online (Sandbox Code Playgroud)

然后在Class1中,你会有这样的事情:

Private m_oBorder As CBorder

Private Sub Class_Initialize()
    ...
    Set m_oBorder = New CBorder
    ...
End Sub

Public Property Get Border() As CBorder
    Set Border = m_oBorder
End Property

...
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

Dim obj As Class1
Set obj = New Class1

obj.Borders.Color = ...
...
Run Code Online (Sandbox Code Playgroud)

注意如何作为实例的成员访问Borders属性,然后如何使用类的属性.将这些值创建为属性可以将这些调用链接在一起.Class1objColorCBorder

您还需要错误检查和验证代码 - 我将这些代码留空以保持示例简短.