Я новичок в 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.