VBA中设置对象的问题

VBA中设置对象的问题,vba,object,hyperlink,Vba,Object,Hyperlink,也许这个问题很简单,但我在谷歌上找不到答案 所以,我有我的班级名单。我在程序中初始化此类的对象数组: ReDim WSheets(twb.Sheets.Count) For i = 0 To UBound(WSheets) Set WSheets(i) = New WSheet Next i 然后,我尝试读取新值并按插入排序: For i = twb.Sheets.Count To 2 Step -1 flag = False tsName = twb.Shee

也许这个问题很简单,但我在谷歌上找不到答案

所以,我有我的班级名单。我在程序中初始化此类的对象数组:

    ReDim WSheets(twb.Sheets.Count)
For i = 0 To UBound(WSheets)
    Set WSheets(i) = New WSheet
Next i
然后,我尝试读取新值并按插入排序:

For i = twb.Sheets.Count To 2 Step -1
    flag = False
    tsName = twb.Sheets(i).Name
    twb.Sheets(i).Delete
    twb.Save
    CurShW = curLen - FileLen(TempFName)
    curLen = FileLen(TempFName)
    For j = UBound(WSheets) To 2 Step -1
        If WSheets(j - 1).Weight < CurShW Then
            Set WSheets(j) = WSheets(j - 1)
        Else
            WSheets(j).SetName (tsName)
            WSheets(j).SetWeight (CurShW)
            flag = True
            Exit For
        End If
    Next j
    If Not flag Then 
        Set WSheets(1) = New WSheet
        WSheets(1).SetName (tsName)
        WSheets(1).SetWeight (CurShW)
        flag = False
    End If
Next i

编辑将函数转换为
方法

必须克隆
WSheet
对象,而不是引用它

例如,您可以将
Clone()
方法添加到
WSheet
类中

Function Clone() As WSheet
    Dim newWSheet As WSheet

    Set newWSheet = New WSheet
    newWSheet.SetName SName
    newWSheet.SetWeight SWeight
    Set Clone = newWSheet
End Function
然后在主代码更改中:

Set WSheets(j) = WSheets(j - 1)
致:


将代码上传到您的
WSheet
类中,它将允许我们(或我)尝试跟踪PS中添加的现象。谢谢@PG_Develop,你通过了吗?是的,我自己也做了类似的事情。当我问这个问题时,我本想学习一些“克隆”对象的内置方法……但你们的解决方案很有效,并没有人提出更好的方法。所以,假设VBA中没有这种内置方式,我将把您的答案标记为解决方案。非常感谢用户!
Set WSheets(j) = WSheets(j - 1)
Set WSheets(j) = WSheets(j - 1).Clone