来自 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
我正在使用包含多个下拉列表的电子表格。对于一行,我希望可以 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