как выбрать конкретную c ячейку для следующей после заполнения ячейки - PullRequest
0 голосов
/ 26 марта 2020

Я бы хотел указать свой Excel для go на своих клетках. Я имею в виду, когда первая ячейка должна быть S5, и когда она заполнена go до C6, затем до C11, E11, G11, I11, K11, M11, O11, Q11, S11, затем C12 E12 ....... То же самое до s34, затем перейдите к H36.

Я пытаюсь использовать это:

If Not IsEmpty(Range("$C$11:$Q$11").Value) Then ActiveCell.Offset(0, 1).Select

К сожалению, в этом случае активная ячейка go 1 стрелка вниз и один столбец вправо, и используйте не только в указанном диапазоне. Я не ggon в Excel макрос пожалуйста помогите! Спасибо заранее!

Ответы [ 3 ]

1 голос
/ 26 марта 2020

Запустите этот код и посмотрите, что он делает.

Я не уверен, что именно вы делаете, поэтому просто показывает адрес ячейки в качестве иллюстрации.

Sub x()

Dim cl As Range, r As Long

For r = 11 To 12
    For Each cl In Range("C" & r & ", E" & r & ",G" & r)
        MsgBox cl.Address
    Next cl
Next r

End Sub
0 голосов
/ 26 марта 2020

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

Private Sub Worksheet_Activate()
    Cells(5, "S").Select
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Rng As Range
    Dim C As Long
    Dim R As Long

    If Target.Cells.CountLarge > 1 Then Exit Sub

    Set Rng = Application.Union(Range("S5"), Range("C6"))
    For C = 5 To 19 Step 2
        Set Rng = Application.Union(Rng, Range(Cells(11, C), Cells(34, C)))
    Next C

    If Not Application.Intersect(Target, Rng) Is Nothing Then
        Select Case Target.Row
            Case 5
                Rng.Areas(2).Select
            Case 6
                With Rng.Areas(1)
                    If Len(.Value) = 0 Then
                        GoBack .Row, .Column
                    Else
                        Rng.Areas(3).Cells(1).Select
                    End If
                End With
            Case Else
                C = Rng.Areas.Count
                With Rng.Areas(C)
                    If Target.Address = .Cells(.Cells.Count).Address Then
                        Cells(36, "H").Select
                    Else
                        With Target
                            R = .Row
                            C = .Column + 2
                        End With
                        If C > .Column Then
                            R = R + 1
                            C = Rng.Areas(3).Column
                        End If
                        Cells(R, C).Select
                    End If
                End With
        End Select
    End If
End Sub

Private Sub GoBack(R As Long, _
                   C As Long)

    Dim Cell As Range

    Set Cell = Cells(R, C)
    MsgBox "Cell " & Cell.Address(0, 0) & " must be filled first.", _
           vbExclamation, "Missing data"
    Cell.Select
End Sub

Я запрограммировал его так, чтобы при каждом включении листа выбирался S5. После того, как пользователь внесет в него изменения, будет выбран C6. Если C6 изменяется, код проверяет, был ли заполнен S5, и направляет пользователя на go, если он все еще пуст. Этот метод может быть расширен, чтобы охватить полную проверку, должны ли быть заполнены все ячейки. Поскольку код теперь является кодом, выбор переходит к следующей ячейке при внесении изменения и в H36 после заполнения S34.

0 голосов
/ 26 марта 2020

Посмотрите на событие worksheet_change. Когда вы редактируете ячейку, вы можете проверить, из какой ячейки вы выходите, и принудительно перейти к нужной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...