Несколько элементов из DropDownList с защищенным листом

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

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

> Private Sub Worksheet_Change(ByVal Target As Range)
Dim Oldvalue As String
Dim Newvalue As String
Application.EnableEvents = True
On Error GoTo Exitsub
If Target.Address = "$G$5" Or Target.Address = "$G$6" Or Target.Address = "$G$7" Or Target.Address = "$G$8" Or Target.Address = "$G$9" Or Target.Address = "$G$10" Or Target.Address = "$G$11" Or Target.Address = "$G$12" Or Target.Address = "$G$13" Or Target.Address = "$G$14" Or Target.Address = "$G$15" Or Target.Address = "$G$16" Or Target.Address = "$G$17" Or Target.Address = "$G$18" Or Target.Address = "$G$19" Or Target.Address = "$G$20" Or Target.Address = "$G$21" Or Target.Address = "$G$22" Or Target.Address = "$G$23" Or Target.Address = "$G$24" Or Target.Address = "$G$25" Or Target.Address = "$G$26" Or Target.Address = "$G$27" Or Target.Address = "$G$28" Or Target.Address = "$G$29" Or Target.Address = "$G$30" Or Target.Address = "$G$31" Or Target.Address = "$G$32" Or Target.Address = "$G$33" Or Target.Address = "$G$34" Or Target.Address = "$G$35" Or Target.Address = "$G$36" Or Target.Address = "$G$37" Or Target.Address = "$G$38" Or Target.Address = "$G$39" Or Target.Address = "$G$40" Then
  If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then
    GoTo Exitsub
  Else: If Target.Value = "" Then GoTo Exitsub Else
    Application.EnableEvents = False
    Newvalue = Target.Value
    Application.Undo
    Oldvalue = Target.Value
      If Oldvalue = "" Then
        Target.Value = Newvalue
      Else
        If InStr(1, Oldvalue, Newvalue) = 0 Then
            Target.Value = Oldvalue & ", " & Newvalue
      Else:
        Target.Value = Oldvalue
      End If
    End If
  End If
End If
Application.EnableEvents = True
Exitsub:
Application.EnableEvents = True
End Sub
# excel drop-down-menu
Источник
  • 0
    Можете ли вы выбрать ячейки диапазона для обработки? Я полагаю, что в диапазоне «G5: G40» все ячейки Locked = False . Верно ли мое предположение?
Codelisting
за 0 против
Лучший ответ

Не защищайте свой рабочий лист с помощью встроенной функции excel, если вы собираетесь выполнять какой-либо код VBA в будущем, вместо этого используйте следующий код и скопируйте его в свойThisWorkbook вкладка, чтобы защитить конкретный рабочий лист, в то же время позволяя VBA работать должным образом:

Вы можете заменитьsheet1 с именем вашего рабочего листа.

Sub Workbook_Open()
Sheet1.Protect Password:="xxxx", UserInterfaceOnly:=True
Sheet1.EnableSelection = xlUnlockedCells

End Sub
  • 0
    Добро пожаловать, раз уж вы можете продолжать автоматизацию :)
за 0 против

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

Если не Application.Intersect (Target, Range ("G5: G40")) Is Nothing, тогда

  • 0
    Ах, спасибо - с этим улучшу мой код! :)
Codelisting
Популярные категории
На заметку программисту