我目前正在使用此宏来阻止用户在电子表格中输入类似的条目。这在单个列中工作正常。
但是如何在多列中添加相似内容(如A列,D列和F列)。每列仅允许唯一的记录。请帮帮我
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Column <> 1 Or .Cells.Count > 1 Then Exit Sub
If WorksheetFunction.CountIf(Columns(.Column), .Value) > 1 Then
Application.DisplayAlerts = False
.ClearContents
Application.DisplayAlerts = True
MsgBox "Record no. already exists!"
End If
End With
End Sub
答案 0 :(得分:1)
只需更改原始代码中的if
语句并允许其他列
If (.Column <> 1 And .Column <> 4) Or .Cells.Count > 1 Then Exit Sub
可以使用其他And语句和.Column <> xxx
If (.Column <> 1 And .Column <> 4 And .Column <> 6) Or .Cells.Count > 1 Then Exit Sub
答案 1 :(得分:0)
我在if中修改了你的代码,并在普通模块中放入了单独的程序:
Sub ClearCont(cl As Range)
Application.EnableEvents = False
cl.ClearContents
Application.EnableEvents = True
MsgBox "Record no. already exists!"
'cl.Select
End Sub
然后,工作表下的代码应该是这样的:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim col As Range
With Target.Parent
Set rng = Union(.Columns(1), .Columns(4), .Columns(6))
End With
With Target
For Each col In rng.Columns
If WorksheetFunction.CountIf(col, .Value) > 0 And col.Column <> .Column Then
ClearCont Target
ElseIf WorksheetFunction.CountIf(col, .Value) > 1 Then
ClearCont Target
End If
Next col
End With
End Sub
表达式
Set rng = Union(.Columns(1), Columns(4), Columns(6))
选择A,D和F列,您可以修改它以添加更多列。
编辑:正如Peh的建议,我已将ActiveSheet
更改为Target.Parent
。我还在cl.Select
子例程中取消了ClearCont
。我认为如果在工作表中直接手动输入值,这行代码将非常有用 - 用户将返回到被询问的单元格。但是,如果按表单输入值,您可能会将其留下注释或删除它。