VBA课程创作

时间:2017-12-05 23:29:13

标签: vba

我在这里会有点模糊,因为我使用的是专有对象库,在SO上看不到太多动作。也就是说,我还要说在VBA中创建类时我没有很大的直觉。这是我的问题。

我有一个对象。该对象包含一组对象。可以实时生成和消费这组对象。由于这个过程有多紧张,我不应该只是添加所有项目并让它坐下来。我也不应该添加所有并删除所有,但这只是可怕和懒惰的编码,更不用说它可能是最糟糕的性能明智的事实。

我的想法是,我应该能够在某种程度上创建一个为我生成和消费元素的类。我已经对此进行了测试,这绝对是性能的最佳成本。

这是一个例子: 我的主要“页面”包含一个变量:

    Public eGroup As tagGroup

    Option Explicit
'''''''''''''''''''''''''
'Set up tag group for use
'''''''''''''''''''''''''
    Private Sub theTags()
        If eGroup Is Nothing Then
            Set eGroup = Application.CreateTagGroup("frmItemControl", 250)
            With eGroup
                .RemoveAll
                .Add "State"
                .Add "Status"
            End With
        End If
        eGroup.active = True
    End Sub

如上所述,通过生成和使用对象的元素(假设以下是除上述变量\代码之外的任何地方),可以最好地找到后续的例行性能:

Public Sub enable(location As String, tagName As String)
    Dim tag As String
    Dim eTag As tag
    ' Set PLC order query handshake bit
    tag = "Machine\VB_HS_" & tagName
    ThisDisplay.eGroup.Add tag
    Set eTag = ThisDisplay.eGroup.item(tag)
    eTag.Value = True
    ThisDisplay.eGroup.Remove tag
    Set eTag = Nothing
End Sub

简而言之,我的主页面有一个对象,我需要向对象添加一个元素,能够读取\写入元素值,并删除对象,希望在一行代码中。

我正在寻求你的所有建议。我是在正确的轨道上吗?我可以通过创建课程来做我想做的事吗?如果是这样,你能举例说明我想做什么,或者怎么做?

提前致谢。

更新

另一个例子。如果我只是想在eGroup元素数组中更改一个值,那么当前提出的方法就是每次我想要从数组元素中读取\ write时执行

tag = "Machine\BinRejectCount"
ThisDisplay.eGroup.Add tag
Set eTag = ThisDisplay.eGroup.item(tag)
eTag.Value = 0
ThisDisplay.eGroup.Remove tag

更新2:

根据Tim William的建议,我对此代码的下一次修改将包含在以下模块中:

Dim eTag As tag

Public Sub w(tagName As String, tagValue As Variant)
    tag = tagName 
    ThisDisplay.eGroup.Add tag
    Set eTag = ThisDisplay.eGroup.item(tag)
    eTag.Value = tagValue
    ThisDisplay.eGroup.Remove tag
    Set eTag = Nothing
End Sub


Public Function r(tagName As String) As Variant
    tag = tagName
    ThisDisplay.eGroup.Add tag
    Set eTag = ThisDisplay.eGroup.item(tag)
    r = eTag.Value
    ThisDisplay.eGroup.Remove tag
    Set eTag = Nothing
End Function

0 个答案:

没有答案