Som*_*the 2 excel vba excel-vba
我正在尝试运行一个简单的For循环,它将被扩展为包含更多功能,但是因为它不断抛出错误"无效的下一个控制变量引用"而遇到麻烦.我试图使用的代码如下所示.
Sub Tickbox()
Set Location = Sheets("TickBoxSheet").Range("B:B")
i = WorksheetFunction.CountA(Location)
Sheets("TickBoxSheet").Range("B2").Select
For a = 1 To i
If Selection.Value = "True" Then
Row = Selection.Row
'Hide some rows in another sheet via if statements
ActiveCell.Offset(1, 0).Select
End If
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
我不知道今天早上是否需要更多咖啡,但我似乎无法弄清楚到底是怎么回事.任何帮助将不胜感激.
递增的变量(in Next)应该是索引变量,即:
For a = 1 To i
'...
Next a
Run Code Online (Sandbox Code Playgroud)
i 是如此受欢迎的索引,你应该在其他情况下使用它之前三思而后行.
你已经从llmo得到了答案.然而,我想强调的其他一些事情......
尽量避免.Select.它会降低你的代码速度.
此外,它是没有必要的是WorksheetFunction.CountA(Location)给你的最后一排考虑,你可以通过具有数据的所有行要循环.我建议这个
Sub Tickbox()
Dim i As Long, a As Long, Rw As Long
With Sheets("TickBoxSheet")
i = .Range("B" & .Rows.Count).End(xlUp).row
For a = 2 To i
If .Range("B" & a).Value = "True" Then
Rw = a
'Hide some rows in another sheet via if statements
End If
Next a
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
您可以使用自动过滤器使其更快,以便循环通过仅具有True例如的单元格
Sub Tickbox()
Dim i As Long, a As Long, Rw As Long
Dim Location As Range, acell As Range
With Sheets("TickBoxSheet")
'~~> Remove any filters
.AutoFilterMode = False
i = .Range("B" & .Rows.Count).End(xlUp).row
With .Range("B1:B" & i)
.AutoFilter Field:=1, Criteria1:="True"
Set Location = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
Debug.Print Location.Address
End With
'~~> Remove any filters
.AutoFilterMode = False
For Each acell In Location
If acell.Value = "TRUE" Then
Rw = acell.row
'Hide some rows in another sheet via if statements
End If
Next acell
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2690 次 |
| 最近记录: |