【问题标题】:Creating readonly copy of a collection in access VBA在访问 VBA 中创建集合的只读副本
【发布时间】:2015-03-04 05:56:18
【问题描述】:

我是 Access VBA 的新手,我被困在我认为的“语言限制”中。我有一个项目集合,我想根据条件将其中的一些项目复制到一个新集合中,然后处理该新集合。但问题是,如果我从该新集合中更改或删除任何内容,它也会在以前的集合中更改。但我不希望这种情况发生,因为它将在下一次迭代中再次使用。

我用来制作新集合的代码是:

Private Function ReturnSubCollection(TotalCollection As Collection, workIDs As String) As Collection
    Dim collWorkIDs As Collection
    Dim itemCount As Integer
    Dim obj As Object
    For itemCount = 1 To TotalCollection.count
        If InStr(1, workIDs, TotalCollection.item(itemCount).Work_ID) > 0 Then
            Set obj = TotalCollection.item(itemCount)
            If collWorkIDs Is Nothing Then Set collWorkIDs = New Collection
            collWorkIDs.Add obj
        End If
    Next

    Set ReturnSubCollection = collWorkIDs
End Function

【问题讨论】:

    标签: ms-access collections vba copy


    【解决方案1】:

    这是 VB 的限制。优雅的解决方案是在您的项目对象中创建一个“纪念品”类,如this great answer 中所述。

    一个简单的解决方法可能是这样的:

    假设您的项目类以三个值 Work_ID、Work_Name、Work_Date 开头。修改你的代码如下:

    With TotalCollection.item(itemCount)
        If InStr(1, workIDs, .Work_ID) > 0 Then
            Set obj = New itemClass
            obj.Work_ID   = .Work_ID
            obj.Work_Name = .Work_Name
            obj.Work_Date = .Work_Date
            'And so on, for any additional fields.
            If collWorkIDs Is Nothing Then Set collWorkIDs = New Collection
            collWorkIDs.Add obj
        End If
    End With
    

    当然是原油。希望有效。

    【讨论】:

    • Dim CTC As CTCDefinitionWrapper For itemCount = 1 To TotalCollection.count With TotalCollection.item(itemCount) If InStr(1, workIDs, .Work_ID) > 0 Then Set CTC = New CTCDefinitionWrapper Set CTC.branchesCollection = .branchesCollection CTC.Work_ID = .Work_ID If collWorkIDs Is Nothing Then Set collWorkIDs = New Collection collWorkIDs.Add CTC End If End With Next 我试过这个,但没有成功。你能告诉我如何在这段代码中使用 Memento 吗?
    • 我认为我不能说比我给出的链接中的那个人更好。当您转到该页面时,向下滚动到显示“编辑:已解决的问题:”他的解决方案非常优雅和简洁。
    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2017-08-13
    • 1970-01-01
    • 2018-11-20
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    相关资源
    最近更新 更多