来自 DropDownList 的多个项目受保护 sheet

Multiple items from DropDownList with protected sheet

我正在使用包含多个下拉列表的电子表格。对于一行,我希望可以 select 来自 DropDownList 的多个项目。

我正在使用下面的代码,但我遇到的问题是当我保护工作簿时 select 多个项目的功能丢失了。

> 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" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" Or Target.Address = "$G" 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

不是直接回答你的问题,而是一个简化所有这些 if 的建议是改用这个:

If Not Application.Intersect(Target, Range("G5:G40")) Is Nothing Then

如果您打算将来执行任何 VBA 代码,请不要使用 excel 内置函数保护您的工作表,而是使用以下代码并复制到您的 ThisWorkbook 选项卡以保护特定工作表,同时允许 VBA 正确地 运行:

您可以将 sheet1 替换为您的工作表名称。

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

End Sub