Добавление строки приводит к ошибке назначения проверки VBA

#vba #excel

#vba #excel

Вопрос:

Когда я вставляю одну строку в защищенную книгу, мой код VBA, который обновляет входные сообщения проверки четырех ячеек, больше не работает … если я не снимаю защиту с рабочего листа.

Рабочий лист защищен userinterfaceonly свойством, установленным на true : ThisWorkbook.Sheets(1).Protect password:="fa-202a", userinterfaceonly:=True

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

Первый вызов AddNumberOfAvailableBatchesValidation работает нормально. Код выдает ошибку, определенную приложением, при втором вызове AddNumberOfAvailableBatchesValidation . Конкретная строка в этом подразделе, которая не выполняется, является:

.InputTitle = "Maximum of 100 Pouch Batches"

Как вы можете видеть, похоже, что у него возникла проблема с изменением существующей проверки данных диапазона NamedRanges.NumBatchesAdditional1 .

Каждая ячейка из этих четырех представляет собой одну несвязанную ячейку.

Вот полный код.

 Private Sub UpdateInputMessages()
Dim numAvail As Integer

numAvail = 100 - NamedRanges.NumBatchesPrimary.Value - NamedRanges.NumBatchesAdditional1.Value - _
           NamedRanges.NumBatchesAdditional2.Value - NamedRanges.NumBatchesAdditional3.Value

AddNumberOfAvailableBatchesValidation NamedRanges.NumBatchesPrimary, numAvail
AddNumberOfAvailableBatchesValidation NamedRanges.NumBatchesAdditional1, numAvail
AddNumberOfAvailableBatchesValidation NamedRanges.NumBatchesAdditional2, numAvail
AddNumberOfAvailableBatchesValidation NamedRanges.NumBatchesAdditional3, numAvail

End Sub

Private Sub AddNumberOfAvailableBatchesValidation(target As range, numberAvailable As Integer)

With target.Validation
    .InputTitle = "Maximum of 100 Pouch Batches"
    .InputMessage = "There are " amp; numberAvailable amp; " pouch batches available."
    .ShowInput = DropdownChangeIsMultipleSelectionEligible
End With
'This is to refresh the input messages
With target
    .offset(0, 1).Select
    .Select
End With

End Sub
  

Есть идеи?

Комментарии:

1. Почему бы вашему коду не снять защиту с листа, а затем повторно защитить лист, когда это будет сделано?

2. Это, безусловно, возможно, но должно быть ненужным. Все работает нормально, пока я не добавлю эту строку.

3. Ваш код не вставляет ни одной строки

4. Это не так. Этот код работает до того, как я вручную вставлю строку, и не работает после.