我每次遍历一行并将该行中的数据存储到该对象中时都实例化一个对象。我将它们附加到数组中,但是出现“对象变量或未设置块变量”错误。我也尝试了Set Headers(Counter) = objRow
,但是数组的所有元素都与数组的最后一个元素相同
有人可以指出我下面的代码有什么问题吗?
非常感谢您。
Option Explicit
Option Base 0
Public Headers() As clsDataRow
Sub CreateTemplate()
Dim iLastRow As Integer
Dim iHeaderCount As Integer
Dim rngFirstRow As Range
Dim Counter As Integer
Set rngFirstRow = shtSetup.Range("rngTemplate")
With shtSetup
'Get the last row of the table
iLastRow = .Cells(Rows.count, "A").End(xlUp).Row
'Get the number of headers
iHeaderCount = iLastRow - rngFirstRow.Row + 1
'Initialize the public static variable array to store DataRow class instances
ReDim Headers(iHeaderCount - 1)
'For each row, we create clsDataRow instance with relevant data
For Counter = 0 To iHeaderCount - 1
Dim objRow As New clsDataRow
objRow.Name = rngFirstRow.Offset(Counter, 0).Value
objRow.Number = rngFirstRow.Offset(Counter, 1).Value
objRow.PDFFieldName = rngFirstRow.Offset(Counter, 2).Value
objRow.MinCharLimit = rngFirstRow.Offset(Counter, 3).Value
objRow.MaxCharLimit = rngFirstRow.Offset(Counter, 4).Value
Headers(Counter) = objRow 'THIS IS WHERE THE ERROR HAPPENS
Next
End With
End Sub
答案 0 :(得分:0)
在循环中声明变量不是一个好主意,这是一个示例。在这种情况下,无论如何,循环的每次迭代都不需要新变量-您可以重复使用同一变量,因为ObjRow
不需要在循环外。
再进一步,您可能完全不需要中间变量。
我无法对此进行测试,因为您的问题没有包括自定义类型clsDataRow
的定义,也没有任何示例数据,但是基本上您可以执行以下操作:
Option Explicit
Option Base 0
Public Headers() As clsDataRow
Sub CreateTemplate()
Dim iLastRow As Integer, iHeaderCount As Integer, Counter As Integer
With shtsetup.Range("rngTemplate")
iLastRow=shtsetup.Cells(Rows.Count,"A").End(xlUp).Row 'get last row#
iHeaderCount = iLastRow - .Row 'count headers
ReDim Headers(iHeaderCount) 'init array
For Counter = 0 To iHeaderCount 'populate headers()
Headers(Counter).Name = .Offset(Counter, 0)
Headers(Counter).Number = .Offset(Counter, 1)
Headers(Counter).PDFFieldName = .Offset(Counter, 2)
Headers(Counter).MinCharLimit = .Offset(Counter, 3)
Headers(Counter).MaxCharLimit = .Offset(Counter, 4)
Next Counter
End With
End Sub
With
语句,因为您只引用了一次;这种方法效率更高,因为您多次使用它。 .Value
,因为这是从单元格返回的默认属性。 +1
和-1
彼此保持平衡,因此我将它们移除。 正如我所说,这可能会或可能不会按原样工作;由于我正在对丢失的信息进行假设,因此无法确定。