我有以下数据表: https://ethercalc.org/zeacfw3jskc3
此数据的重要之处在于每一列重复两次,一次重复用于A型数据,一次重复于B型数据。如果第一组列中没有数据(直到修订),我想使用第二列来创建范围,而不是使代码失败。这是尝试这样做的代码:
Set w1 = wbk.Sheets("PositionsDB")
Set w2 = wbk.Sheets("Performance")
num_rows = w1.Cells(Rows.Count, 1).End(xlUp).row
'If there's no parentName column, we can't continue.
If w1.Rows(1).Find("portfolioName") Is Nothing Then Exit Sub
'find first instance
Set f1 = w1.Rows(1).Find("portfolioName", lookat:=xlWhole)
If Not f1 Is Nothing Then
'find second instance
Set f2 = f1.Offset(0, 1).Resize(1, w1.Columns.Count - f1.Column).Find("portfolioName", lookat:=xlWhole)
If Not f2 Is Nothing Then
'set range based on f2
Set parentRange = w1.Range(f2.Offset(1, 0), w1.Cells(Rows.Count, f2.Column).End(xlUp))
End If
End If
'If there's no Root level, how do we know where to start?
If parentRange.Find("Main") Is Nothing Then Exit Sub
Debug.Print "test1"
Debug.Print parentRange.Width
Debug.Print parentRange.Height
Debug.Print "test2"
For Each parent In parentRange
If Not dict.Exists(parent.Value) Then
childCount = Application.WorksheetFunction.CountIf(parentRange, parent.Value)
Set childrenRange = parent.Offset(, 2).Resize(childCount, 1)
dict.Add parent.Value, Application.Transpose(Application.Transpose(childrenRange.Value))
End If
Next
但是,当我使用工作表中的数据运行它时,出现以下错误:
Variable Required - Can't assign to this expression
For Each parent In parentRange
这很奇怪,因为我得到了这个异常,而没有任何Debug.Prints显示在立即控制台中。我的代码有问题吗?
答案 0 :(得分:2)
Parent
是保留字。对象的Parent
属性是指该对象的父对象,例如Range
对象具有Worksheet
父对象,而Worksheet
对象具有Workbook
父对象。
错误:
需要变量-无法分配给该表达式
之所以会发生变化,是因为For Each...Next
需要一个用于迭代集合或数组元素的变量,而Parent
不是一个变量。
使用其他名称,例如For each rng in parentRange
。
编辑:
请注意,此编译错误专门出现,原因是:
Parent
,并且Parent
属性的混淆,该代码无法编译-在这种情况下,Parent
不是Variant
的{strong>不是-因此”必需的变量,不能分配给该表达式。” 正如其他地方所指出的,添加Option Explicit
和 Dim parent as Range
甚至是Dim parent
,将消除编译错误,但可能会产生误导,建议不要这样做。 。
答案 1 :(得分:2)