Excel VBA只需单击一次即可更改单元格的值-将其单独指定给多个范围

Excel VBA只需单击一次即可更改单元格的值-将其单独指定给多个范围,vba,excel,Vba,Excel,我正在尝试设置一个vba代码,以便我能够单击特定数量的单元格,并使这些单元格在无、cr和cv之间切换。到目前为止,我的代码中有这个,但我需要将它分配给多个目标,但我似乎无法让它们独立工作 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Application.EnableEvents = False With Target If .Address = Range("A1").Address

我正在尝试设置一个vba代码,以便我能够单击特定数量的单元格,并使这些单元格在无、cr和cv之间切换。到目前为止,我的代码中有这个,但我需要将它分配给多个目标,但我似乎无法让它们独立工作

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
  Application.EnableEvents = False

  With Target
     If .Address = Range("A1").Address Then
        Select Case .Value
           Case ""
             .Value = "CR"
           Case "CR"
             .Value = "CV"
           Case "CV"
             .Value = ""
           Case Else
             .Value = "CR"
        End Select
     End If
  End With

  Range("A2").Select
  Application.EnableEvents = True
End Sub

这将是实现你想要的一种方式

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' 07 May 2017

    Dim Rng As Range

    Set Rng = Range("A1,B2:B4,C3,D4")
    If Not Application.Intersect(Target, Rng) Is Nothing Then
        MsgBox "Cell " & Target.Address(False, False) & " was clicked."
    End If
End Sub
我注意到您的第一个Select语句是多余的,因为它与最后一个语句相同:-

枫叶, 我不完全确定我是否完全理解你的意图,但这对我很有用:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Application.EnableEvents = False
  For Each T In Target
        With T
           'If .Address = Range("A1").Address Then
              Select Case .Value
                 Case ""
                   .Value = "CR"
                 Case "CR"
                   .Value = "CV"
                 Case "CV"
                   .Value = ""
                 Case Else
                   .Value = "CR"
              End Select
           'End If
        End With
    Next
  Range("A2").Select
  Application.EnableEvents = True
End Sub

如果事实证明这不是你想要完成的,我怀疑你能够很容易地调整它来做你需要的事情。希望这有帮助。如果您有任何问题,请不要犹豫。

这是我提出的,效果很好。谢谢你的帮助

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Application.EnableEvents = False

  If Target.Cells.Count = 1 Then

    If Not Intersect(Target, Range("C8:C10:C12:C14:C16:I8:I10:I12:I14:I16:O8:O10:O1:O14:O16:U8:U10:U12:U14:U16:AA8:AA10:AA12:AA14:AA16:AG8:AG10:AG12:AG14:AG16:AM8:AM10:AM12:AM14:AM16")) Is Nothing Then
      Select Case Target.Value
      Case ""
        Target.Value = "CR"
      Case "CR"
        Target.Value = "CV"
      Case "CV"
        Target.Value = ""
      Case Else
        Target.Value = "CR"
      End Select
      Range("B2").Select
    End If
  End If

  Application.EnableEvents = True

End Sub

非常感谢。我将尝试这样做:您不需要该循环来定义多区域范围。您只需使用Set Rng=RangeA1、B2、C3,D4@A.S.H.谢谢我已经修改了我的答案,以纳入你的想法。