我正在学习VBA,并且已经设法从一系列来源编译了大量代码,但我发现很难解决我当前的问题。我已经阅读了很多关于使用范围的解决方案,但是我无法适应我见过的任何解决方案。
我想要一个宏,当按下一个命令按钮时,它将识别一系列单元格中最后一次使用的行(随着时间的推移会增加行数)然后检查每一行是否有范围内的任何空单元格填写这些字母' N'如果A列中的同一行中有数据。
我目前有以下代码:
Private Sub CBtnFillAll_Click()
'
' EmptyCharacteristic Macro
' Fills empty cells in the characteristics columns with 'N'
'
Dim Lastrow As Integer
Dim rCell As Range
Dim rRng As Range
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set rRng = ActiveSheet.Range("$H$3:$S" & Lastrow)
For Each rCell In rRng.Rows
If rCell.Value = "" And ActiveSheet.Cells(rRng.Row, 1).Value <> "" Then
rCell.Value = "N"
End If
Next rCell
End Sub
我正在检查A列,因为在B列中有从行B开始的其他数据,我不想包含在该范围内。要检查的范围始终在列H和S之间。
我目前正在进行类型不匹配&#39;以下行中的错误:
If rCell.Value = "" And ActiveSheet.Cells(rRng.Row, 1).Value <> "" Then
请问有人可以帮助我解决最后一部分的语法吗?
非常感谢提前。
答案 0 :(得分:1)
您的方法完全正确,但有一件事会产生问题:
将您的For Each
行更改为:For Each rCell in rRng
。
我会做一些不同的事情,所以这是我的完整代码:
Sub test()
Application.ScreenUpdating = False
Dim Lastrow As Long
Dim rCell As Range
Dim aCell As Range
Dim rRng As Range
Dim Currentrow As Long
Lastrow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
Set rRng = ActiveSheet.Range("H3:S" & Lastrow)
For Each rCell In rRng
Currentrow = rCell.Row
Set aCell = ActiveSheet.Range("A" & Currentrow)
If Not IsEmpty(aCell.Value) And IsEmpty(rCell.Value) Then
rCell.Value = "N"
End If
Next
Application.ScreenUpdating = True
End Sub
答案 1 :(得分:0)
我认为这可能会做你想要的事情
Sub CBtnFillAll_Click()
' EmptyCharacteristic Macro
' Fills empty cells in the characteristics columns with 'N'
'
Dim rCell As Range, _
rRng As Range
For Each rRng In ActiveSheet.UsedRange.Columns("A:A").Cells
If IsEmpty(rRng) Then GoTo NextRow
For Each rCell In rRng.Offset(0, 7).Resize(1, 12)
If IsEmpty(rCell) Then rCell.Value = "N"
Next rCell
NextRow:
Next rRng
End Sub
如果您想省略工作表的前两行,则可以更改
For Each rRng In ActiveSheet.UsedRange.Columns("A:A").Cells
到
For Each rRng In ActiveSheet.[A3].Resize(ActiveSheet.UsedRange.Rows.Count-2)