我在调查中使用以下代码,在选中时只在C:H范围中的一个范围内创建x个框。我想从这个代码当前使用的行(第3行)到第152行重复它,但我不确定如何让它工作。
我该怎么做呢?我是一个新手,所以任何帮助将不胜感激。
-Chris
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rInt As Range
Dim rCell As Range
Set rInt = Intersect(Target, Range("C3:H3"))
If Not rInt Is Nothing Then
If Application.WorksheetFunction.CountA(Range("C3:H3")) > 0 Then
Range("C3:H3").Value = ""
End If
For Each rCell In rInt
If rCell.Value = "" Then
rCell.Value = "X"
ElseIf rCell.Value = "X" Then
rCell.Value = ""
End If
Next
End If
Set rInt = Nothing
Set rCell = Nothing
Cancel = True
End Sub
答案 0 :(得分:0)
现在您的代码为:
如果选择的范围与C3:H3
相交,则清除C3:H3
的内容,然后遍历选区中的所有单元格,这些单元格也位于C3:H3
中并设置他们到" X" (它们都是空白的,所以你的If rcell.value = ""
是多余的)。
循环使用C3:H152应用相同的逻辑(开始时没有多大意义)然后将for循环更改为For each rcell in Range("C3:H152")
只有在所选内容与if
之间存在交集时,才会对该范围内的每个单元格执行C3:H3
语句。我想你会想要调整你的代码,以便更好地适应你想做的事情。
答案 1 :(得分:0)
您可以将行号声明为变量,然后使用For
循环,如下所示:
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rInt As Range
Dim rCell As Range
For rw = 3 To 152
Set rInt = Intersect(Target, Range("C" & rw & ":H" & rw))
If Not rInt Is Nothing Then
If Application.WorksheetFunction.CountA(Range("C" & rw & ":H" & rw)) > 0 Then
Range("C" & rw & ":H" & rw).Value = ""
End If
For Each rCell In rInt
If rCell.Value = "" Then
rCell.Value = "X"
ElseIf rCell.Value = "X" Then
rCell.Value = ""
End If
Next
End If
Set rInt = Nothing
Set rCell = Nothing
Cancel = True
Next
End Sub