3

Как создать код VBA таким образом, чтобы мы могли переключаться между 4 значениями для любой данной ячейки в пределах одного столбца и чтобы он не переключался в какой-либо режим "Правка" после щелчка по ячейке?

4 значения: Y, N, L и G.

Единственный код, который я смог собрать (показан ниже), проблематичен, так как при нажатии он входит в режим редактирования, и он не позволяет мне выполнять функцию переключения ячеек для всего столбца, используя тот же код VBA:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

If Target.Row <> 1 Then Exit Sub

Select Case UCase(Target.Value)

    Case Is = "Y"

        Target.Value = "N"

    Case Is = "N"

        Target.Value = "L"

    Case Is = "L"
        Target.Value = "G"

    Case Is = "G"
        Target.Value = "Y"

End Select

End Sub

----- Спасибо за ответы! Пожалуйста, смотрите прикрепленное изображение. Идея состоит в том, чтобы иметь возможность переключать статус любых элементов, представленных. Столбец Status находится в столбце L, и мне нужно, чтобы он переключался между YNLG вместо использования какого-либо раскрывающегося списка.

2 ответа2

1

Попробуйте этот формат


Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

    Const MIN_ROW = 4   'Column Header (Status) is on row 4
    Const COL_L = 12

    If Target.CountLarge = 1 Then           'If a single cell is selected
        If Target.Column = COL_L Then       'If selected cell is in col L
            If Target.Row > MIN_ROW Then    'If selected cell row is 5 or higher
                With Me
                    Dim lr As Long, arr As Variant, i As Long
                    lr = .Cells(Rows.Count, COL_L).End(xlUp).Row  'Last used row in col L
                    If lr > MIN_ROW Then
                        arr = .Range(.Cells(MIN_ROW + 1, COL_L), .Cells(lr, COL_L))
                        For i = 1 To UBound(arr)
                            Select Case UCase(arr(i, 1))
                                Case Is = "Y":  arr(i, 1) = "N"
                                Case Is = "N":  arr(i, 1) = "L"
                                Case Is = "L":  arr(i, 1) = "G"
                                Case Is = "G":  arr(i, 1) = "Y"
                            End Select
                        Next
                        .Range(.Cells(MIN_ROW + 1, COL_L), .Cells(lr, COL_L)) = arr
                    End If
                End With
            End If
        End If
    End If
End Sub
-1

Вы можете попробовать этот код VBA, он был проверен мной, прежде чем я разместил его здесь, и он работает.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

 If ActiveCell = Range("A2") Then

    If ActiveCell.Value = "Y" Then
      ActiveCell.Value = "N"

        ElseIf ActiveCell.Value = "N" Then
          ActiveCell.Value = "L"

          ElseIf ActiveCell.Value = "L" Then
           ActiveCell.Value = "G"

      ElseIf ActiveCell.Value = "G" Then
          ActiveCell.Value = "Y"

       End If
End If

End Sub

NB. Напишите Y (заглавными буквами) и завершите, нажав Enter. Затем, после того, как вы поместите указатель ячейки или нажмите на ячейку, значение A2 изменится с Y на N, с L на G, на Y.

Я надеюсь, что это поможет вам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .