Последовательная нумерация в Excel VBA случайным образом пропускает заказы - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь создать метод последовательной нумерации для списка на основе любого изменения ячейки

Я пытался изменить For-Next с помощью циклов Do-While и Do-Want без какого-либо успеха


Код

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim differnettypes As Integer
    Dim sequentialnumbering As Range
    Dim sequentialnumber As Integer

    If Not Intersect(Target, Range("B4:B30")) Is Nothing Then

        sequentialnumber = 1
        differenttypes = (Cells(Rows.Count, 3).End(xlUp).Row) - 5
        Set sequentialnumbering = Worksheets("Input").Range("B4:B30")
        For sequentialnumber = 1 To differenttypes
            sequentialnumbering.Cells(sequentialnumber, 1).Value = sequentialnumber
        Next sequentialnumber

    End If
    End Sub

Столбец C содержит список элементов, которые должны быть последовательно пронумерованы, называются различными типами, и некоторую другую информацию (заголовок и т. Д.), Которую необходимо вырезать (отсюда -5).

Столбец B содержит порядковую нумерацию. Изменение запуска триггера ищется в диапазоне последовательной нумерации (B4: B30).

При пошаговой отладке я замечаю, что строки кода выполняются не в ожидаемом порядке, а в другом,мои неопытные глаза кажутся совершенно случайными (например, пропуск цикла на полпути, вход в середину цикла после подпункта «Конец»).

На вопрос был дан ответ в комментариях. Требовалось отключить события в цикле.

1 Ответ

2 голосов
/ 30 сентября 2019

Я скомпилировал примечания из комментариев выше, чтобы исправить ваш код, надеюсь, это сработает для вас:

Private Sub Worksheet_Change(ByVal Target As Range)

Option Explicit

Dim differenttypes As Integer
Dim sequentialnumbering As Range
Dim sequentialnumber As Integer

On Error GoTo Err_Handler
Application.EnableEvents = False

If Not Intersect(Target, Range("B4:B30")) Is Nothing Then

    differenttypes = (Cells(Rows.Count, 3).End(xlUp).Row) - 5
    Set sequentialnumbering = Worksheets("Input").Range("B4:B30")

    For sequentialnumber = 1 To differenttypes
        sequentialnumbering.Cells(sequentialnumber, 1).Value = sequentialnumber
    Next sequentialnumber

End If
Err_Handler:
    Application.EnableEvents = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...