逐步更改行引用时循环代码

时间:2015-05-06 22:52:12

标签: excel-vba increment next vba excel

我有一个电子表格,我希望2个相邻的单元格是独占的,这意味着您只能在2个单元格中的一个中输入值。我在引用特定单元格范围时使代码正常工作。

但是我有这个逻辑重复电子表格中的每4行。我尝试创建一个整数值来逐步增加行引用,但带有消息框的操作不会应用于" next"整数。

任何帮助都会受到赞赏。下面是我尝试通过整数数据类型声明J作为我的行引用。现在我将j设置为34-146。如果我把" x"在D34然后放一个" X"在E34中,我收到消息,并且在E34中输入的值被清除 - 这就是我想要的。当我在D38和E38中执行相同操作时,我没有收到任何消息,数据输入仍保留在两个单元格中。

Private Sub Worksheet_Change(ByVal Target As Range)

  Dim j As Integer
  For j = 34 To 146 Step 4

  Dim rLook As Range
  Set rLook = Range("D" & j & ":E" & j)
  Dim wf As WorksheetFunction
  Set wf = Application.WorksheetFunction

  If Intersect(Target, rLook) Is Nothing Then Exit Sub

  If wf.CountA(rLook) < 2 Then Exit Sub

  Application.EnableEvents = False
    Target.ClearContents
    MsgBox ("Only one entry allowed. Please select either Blanket or User Specific.")

  Application.EnableEvents = True

  Next j

End Sub

1 个答案:

答案 0 :(得分:0)

如果我理解你所追求的是什么,就没有必要循环遍历细胞 - Target将永远是改变的细胞。您需要的只是一个简单的测试,以查看相邻的单元格是否匹配:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim matching As Boolean

    If Target.Column = 4 Then
        matching = (Target.Value = Target.Offset(0, 1).Value)
    ElseIf Target.Column = 5 Then
        matching = (Target.Value = Target.Offset(0, -1).Value)
    End If

    If matching Then
         Application.EnableEvents = False
         Target.ClearContents
         Application.EnableEvents = True
         MsgBox "Only one entry allowed. Please select either Blanket or User Specific."
    End If

End Sub

如果你需要将它限制在特定的行中,只需将整个内容包装在另一个中。如果测试Target.Row是否是你关心的那个。