VBA 多个子循环和长范围的类型不匹配
VBA Type mismatch for multiple sub-loops and a long range
这里对 VBA 相当陌生,但是已经设法将这个循环遍历多个工作表的脚本放在一起,一路完成一个 sumif 函数 - 它被存储然后在每个循环之后打印。共有65张纸,以后可能会增加一些,所以我把每个标签名都列在一个命名的Table("tab_ref[Tab]")中,并以此作为循环的参考。
我 运行 遇到了一个非常奇怪的错误。当我将 sheetrange 设置为仅 table ("H15:H18") 中列出的前 4 张时,该功能完美运行,但是当我尝试遍历整个范围(甚至只是一个 - "H15:H19"!) 我在代码的下方收到类型不匹配错误。任何人都可以看到导致此错误的原因吗?修复或任何建议将不胜感激。谢谢!
Sub ClusterLevel()
Dim inputcell As Range, itemrange As Range, sheetrange As Range, _
FullRow As Range, Items As Range, CalcRange As Range, printCalc As Range
Set inputcell = Sheets("Calculations").Range("C10")
Set itemrange = Sheets("Calculations").Range("A21:A22")
Set sheetrange = Sheets("Reference Sheet").Range("H15:H19") 'Sheets listed here. "H15:H18" WORKS - BUT "tab_ref[Tab]" DOESN'T!!
i = 21
For Each entry In itemrange
sumState = 0
For Each sheet In sheetrange
Set FullRow = Sheets(sheet.Value).Range("A5:EE5")
Set Items = Sheets(sheet.Value).Range("A6:A500")
For Each Cell In FullRow
If Cell.Value = inputcell.Value Then 'TYPE MISMATCH HERE
With FullRow
Set SumRange = Range(.Cells(Cell.Row - 3, Cell.Column), .Cells(520, Cell.Column))
sumState = sumState + WorksheetFunction.SumIf(Items, entry, SumRange)
End With
End If
Next Cell
Next sheet
Set printCalc = Sheets("Calculations").Cells(i, 4)
printCalc = sumState
i = i + 1
Next entry
End Sub
对您的主工作表循环进行以下修改。
For Each Sheet In sheetrange
On Error GoTo bm_NoSheet
Set FullRow = Sheets(Sheet.Value).Range("A5:EE5")
Set Items = Sheets(Sheet.Value).Range("A6:A500")
On Error GoTo 0
For Each Cell In FullRow
If Cell.Value = inputcell.Value Then 'TYPE MISMATCH HERE
With FullRow
Set SumRange = Range(.Cells(Cell.Row - 3, Cell.Column), .Cells(520, Cell.Column))
sumState = sumState + WorksheetFunction.SumIf(Items, entry, SumRange)
End With
End If
Next Cell
GoTo bm_Next
bm_NoSheet:
If Err.Number = 9 Then
With Worksheets.Add(after:=Sheets(Sheets.Count))
.Name = Sheet.Value
End With
Resume
End If
bm_Next:
Next Sheet
如果找不到,这将创建一个工作表。我仍然不清楚是哪一行产生了错误,但这是我最好的猜测。如果在工作表队列的末尾创建了一个新工作表,那么您需要仔细检查您存储的工作表名称。如果不是,请提供产生错误的实际代码行。
FullRow 中的单元格是在每个选项卡上使用 vlookup 创建的,有些正在返回 N/A。这是在引用时抛出错误。
通过转换为字符串轻松修复:
If CStr(Cell.Value) = CStr(inputcell.Value Then)
感谢大家的帮助!
这里对 VBA 相当陌生,但是已经设法将这个循环遍历多个工作表的脚本放在一起,一路完成一个 sumif 函数 - 它被存储然后在每个循环之后打印。共有65张纸,以后可能会增加一些,所以我把每个标签名都列在一个命名的Table("tab_ref[Tab]")中,并以此作为循环的参考。
我 运行 遇到了一个非常奇怪的错误。当我将 sheetrange 设置为仅 table ("H15:H18") 中列出的前 4 张时,该功能完美运行,但是当我尝试遍历整个范围(甚至只是一个 - "H15:H19"!) 我在代码的下方收到类型不匹配错误。任何人都可以看到导致此错误的原因吗?修复或任何建议将不胜感激。谢谢!
Sub ClusterLevel()
Dim inputcell As Range, itemrange As Range, sheetrange As Range, _
FullRow As Range, Items As Range, CalcRange As Range, printCalc As Range
Set inputcell = Sheets("Calculations").Range("C10")
Set itemrange = Sheets("Calculations").Range("A21:A22")
Set sheetrange = Sheets("Reference Sheet").Range("H15:H19") 'Sheets listed here. "H15:H18" WORKS - BUT "tab_ref[Tab]" DOESN'T!!
i = 21
For Each entry In itemrange
sumState = 0
For Each sheet In sheetrange
Set FullRow = Sheets(sheet.Value).Range("A5:EE5")
Set Items = Sheets(sheet.Value).Range("A6:A500")
For Each Cell In FullRow
If Cell.Value = inputcell.Value Then 'TYPE MISMATCH HERE
With FullRow
Set SumRange = Range(.Cells(Cell.Row - 3, Cell.Column), .Cells(520, Cell.Column))
sumState = sumState + WorksheetFunction.SumIf(Items, entry, SumRange)
End With
End If
Next Cell
Next sheet
Set printCalc = Sheets("Calculations").Cells(i, 4)
printCalc = sumState
i = i + 1
Next entry
End Sub
对您的主工作表循环进行以下修改。
For Each Sheet In sheetrange
On Error GoTo bm_NoSheet
Set FullRow = Sheets(Sheet.Value).Range("A5:EE5")
Set Items = Sheets(Sheet.Value).Range("A6:A500")
On Error GoTo 0
For Each Cell In FullRow
If Cell.Value = inputcell.Value Then 'TYPE MISMATCH HERE
With FullRow
Set SumRange = Range(.Cells(Cell.Row - 3, Cell.Column), .Cells(520, Cell.Column))
sumState = sumState + WorksheetFunction.SumIf(Items, entry, SumRange)
End With
End If
Next Cell
GoTo bm_Next
bm_NoSheet:
If Err.Number = 9 Then
With Worksheets.Add(after:=Sheets(Sheets.Count))
.Name = Sheet.Value
End With
Resume
End If
bm_Next:
Next Sheet
如果找不到,这将创建一个工作表。我仍然不清楚是哪一行产生了错误,但这是我最好的猜测。如果在工作表队列的末尾创建了一个新工作表,那么您需要仔细检查您存储的工作表名称。如果不是,请提供产生错误的实际代码行。
FullRow 中的单元格是在每个选项卡上使用 vlookup 创建的,有些正在返回 N/A。这是在引用时抛出错误。
通过转换为字符串轻松修复:
If CStr(Cell.Value) = CStr(inputcell.Value Then)
感谢大家的帮助!