Возможно, этот вопрос прост, но я не мог найти ответ, гугля.
Итак, у меня есть мой класс WSheet. Инициализирую массив объектов этого класса в своей программе:
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
Итак, проблема: после того, как я установил WSheets(j) = WSheets(j — 1), wsheets(j — 1) начинает содержать ссылку на wsheets(j), Поэтому, когда я изменяю wsheets(j), Wsheets (j — 1) тоже меняется.
Расскажите, пожалуйста, как сделать абсолютное уравнение в этой выборке?
Спасибо!
Код PS в классе WSheet
Dim SName As String 'Name of sheet
Dim SWeight As Long 'Weight of sheet in bytes
Dim blocks() As Long 'Weights of blocks in sheet in bytes
Public Function Weight() As Long
Weight = SWeight
End Function
Public Sub SetWeight(ByVal sw As Long)
SWeight = sw
End Sub
Public Function Name() As String
Name = SName
End Function
Public Sub SetName(ByVal nm As String)
SName = nm
End Sub
отредактировано, чтобы превратить функцию в
Class
методНеобходимо клонировать
WSheet
объект, а не ссылаться на негоНапример, можно добавить
Clone()
метод вWSheet
классЗатем в главном коде изменить:
Для: