【发布时间】:2018-06-28 16:03:53
【问题描述】:
所以我遵循了一些我在对集合中的项目进行排序时看到的示例,但由于某种原因,当我尝试将元素存储为临时变量时,我从 vba 收到警告“对象不支持此属性或方法“,我将临时变量设置为变体,但它似乎并不关心。会不会是我的对象类型有问题?
Sub selectRange()
Dim lastrow As Long
Dim lastColumn As Long
Dim j As Integer
Dim i As Integer
Dim streamColl As Collection
Dim ws As Worksheet
Dim rowCount As Integer
Dim columnCount As Integer
Dim tempStream As Stream
Set ws = ActiveWorkbook.Sheets("Sheet1")
Range("E5").Select
lastrow = Range("E5", ActiveCell.End(xlDown)).Count + 5
lastColumn = Range("E5", ActiveCell.End(xlToRight)).Count
Set streamColl = New Collection
For i = 1 To lastColumn
Set tempStream = New Stream
tempStream.StreamName = Cells(3, i + 4).value
tempStream.Temperature = Cells(5, i + 4).value
tempStream.Pressure = Cells(6, i + 4).value
tempStream.VapGasFlow = Cells(7, i + 4).value
tempStream.VapMW = Cells(8, i + 4).value
tempStream.VapZFactor = Cells(9, i + 4).value
tempStream.VapViscosity = Cells(10, i + 4).value
tempStream.LightLiqVolFlow = Cells(11, i + 4).value
tempStream.LightLiqMassDensity = Cells(12, i + 4).value
tempStream.LightLiqViscosity = Cells(13, i + 4).value
tempStream.HeavyLiqVolFlow = Cells(14, i + 4).value
tempStream.HeavyLiqMassDensity = Cells(15, i + 4).value
tempStream.HeavyLiqViscosity = Cells(16, i + 4).value
streamColl.Add tempStream
Next
MsgBox streamColl(1).StreamName
Call sortStream(streamColl)
End Sub
Sub sortStream(ByVal pStreamColl As Collection)
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim lastColumn As Integer
Dim vTemp as variant
lastColumn = 0
k = 1
Do While IsNumeric(pStreamColl(k).StreamName)
lastColumn = lastColumn + 1
k = k + 1
Loop
MsgBox lastColumn
For i = 1 To lastColumn
For j = i + 1 To lastColumn
If pStreamColl(j).StreamName < pStreamColl(i).StreamName Then
vTemp = pStreamColl(j)
pStreamColl.Remove j
pStreamColl.Add vTemp, vTemp, i
End If
Next j
Next i
For Each Stream In pStreamColl
Debug.Print Stream.StreamName
Next Stream
End sub
错误被抛出
vtemp = pStreamColl(j)
使用数组会更好吗?
【问题讨论】:
-
使用
Set vTemp = ...来存储对象。 -
现在 pstreamcoll.add vtemp vtemp I 上抛出错误当我删除 j 时,是否会破坏对 vtemp 的引用?
-
集合的“键”必须是字符串,不能将对象作为键传递。也许使用 vTemp.StreamName?
-
如果键是字符串的数字,那么我该如何排序呢?
-
我不相信您可以根据集合的键对集合进行排序。无法访问密钥。您需要根据集合项进行排序。
标签: excel vba collections bubble-sort