Как я могу кодировать в VBA для Excel список, который будет: добавлять число во вновь добавленные строки и переупорядочивать динамический список на основе новых входных данных? - PullRequest
0 голосов
/ 11 апреля 2019

Я новичок в VBA, но не в программировании в целом. Это может быть большой задачей для меня, так как раньше я делал только небольшие макросы в Excel.

Я пытаюсь создать программу отслеживания проекта, которая позволит мне изменить приоритет списка при его ежедневном изменении.

Что нужно списку (Цели):

- Каждой новой добавленной строке нужно будет присвоить следующий доступный номер
-Когда список будет переупорядочен вручную путем назначения нового уровня приоритета в столбце «Приоритет», список будет соответствующим образом переименован:

Список: № 1 (пункт 1), № 2 (пункт 2), № 3 (пункт 3), № 4 (пункт 4), № 5 (пункт 5) ... и т. Д.

У

есть элемент с приоритетом №5, и он переместился на №3 сегодня, поэтому новый список становится таким: 1 (элемент 1), 2 (элемент 2), 3 (элемент 5), 4 (элемент 3), 5 (элемент 4).
-все данные в строках будут перемещаться с назначенным им приоритетом (я полагаю, это ожидается, поскольку у меня есть имена элементов и другие данные, которые будут привязаны к столбцу приоритетов)

Для перечисления списка полезен следующий код:

Sub DynamicRange()
'Best used when only your target data is on the worksheet

'Refresh UsedRange (get rid of "Ghost" cells)
  Worksheets("Sheet1").UsedRange

'Select UsedRange
  Worksheets("Sheet1").UsedRange.Select

End Sub

Вопросы: Я попытался написать некоторый код, но я не могу выполнить код, не получив некоторые ошибки. Я не уверен, в чем проблема с ним.

Я пробовал код, который я включу; Однако это не работает. Я пытался это исправить, но он продолжает падать.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngPriorityList As Range
Dim lNewValue As Long
Dim myCell As Range

    If IsNumeric(Target.Value) Then 'Only run if the a number was entered

        Set rngPriorityList = ThisWorkbook.Names("priority").RefersToRange 'the named range for the task list

        If Not Intersect(Target, rngPriorityList) Is Nothing Then 'Only run the following in the cell being updated was in the priority list range
            For Each myCell In rngPriorityList.Cells 'Loop through the priority list range
                If myCell.Value = Target.Value _
                And myCell.Address <> Target.Address Then 'Finding cells with the same value, excluding the cell being changes
                    myCell.Value = myCell.Value + 1 'Increment the prioriry by 1
                End If
            Next myCell
        End If
    End If
End Sub

Я ожидаю, что у меня будет в первую очередь нумерованный список. Затем, когда пользователь входит и, например, вводит новый элемент внизу, он получает новый номер из следующего доступного номера. Кроме того, я ожидаю, что я смогу ввести число, меньшее текущего номера столбца приоритета (измените приоритет 23 на 1), и список будет заново нумеровать себя, добавляя один к каждому последующему столбцу больше нового # 1.

...