我知道这个问题至少被问过十几次了,但在所有这些问题中,解决方案似乎都是量身定制的,或者只是在我的代码中创建了一个错误。由于某种原因,当我尝试引用不同工作表中的范围时出现错误。下面是我的代码。我有两个工作表(选项卡)。一个有一个按钮来启动我的代码MENU,另一个是我试图读取和写入的数据RAW。我想做的就是找出工作表有多少行数据,以便我可以循环遍历这些行并进行更改。由于某种原因,我无法理解它或其他什么。
Private Sub CommandButton21_Click()
Dim wbCurrent As Workbook
Dim wsCurrent As Worksheet
Set wbCurrent = ThisWorkbook
Set wsCurrent = wbCurrent.Worksheets("RAW")
Dim i As Long
Dim siteCol As Long
siteCol = Range("I" & Rows.Count).End(xlUp).Row
For i = 1 To siteCol
wsCurrent.Range("I" & i) = "MARKED"
Next i
Range("I1") = siteCol
End Sub
Run Code Online (Sandbox Code Playgroud)
1- 始终使用Long您的变量,除非Integer有特定原因。an 的最大值Integer是32767,这可能不足以容纳您的行数。
2-不要使用 获取行数COUNTA,这有很多缺点。使用这个代替:
siteCol = wsCurrent.Range("I" & wsCurrent.Rows.count).End(xlUp).Row
Run Code Online (Sandbox Code Playgroud)
这将查找 中最后占用的单元格的行号wsCurrent,假设该wsCurrent单元格位于文档的顶部(从第 1 行开始)。请注意,如果 wsCurrent 完全为空,这将找到上面 第一个占用单元格的行号wsCurrent,或文档的第一行。
3-当您想要将整个范围分配给相同的值时,您可以立即执行此操作,这更快更简单,如下所示(无需循环):
wsCurrent.Range("I1:I" & siteCol) = "MARKED"
Run Code Online (Sandbox Code Playgroud)
4- 无需Activate工作表即可使用。删除该语句wsCurrent.Activate并尝试始终使用合格的范围。