我动态更新A和B列中的单元格,并使用&将每行的两个值连接在一起,并将这些值放在c列中。
我的目的是通过在输入firstName(ColumnA值)和LastName(columnB值)两次时检测重复的名称来实现的。但是,在测试过程中,我意识到,当我删除重复的名称后再出现第一个匹配项时,总是弹出一个空值(显示msgbox时会观察到)。
有时这是一个问题,尤其是因为有时msgbox不会消失...。例如,代码崩溃。
有人可以帮助我防止显示空值或msgBox表单吗?我怀疑我的if语句出了什么问题。
非常感谢。
这是我放置在工作表中的vba代码
// javascript sdk
firebase.firestore().settings({
/* other settings */
timestampsInSnapshots: true
})
// admin sdk
admin.firestore().settings({
/* other settings */
timestampsInSnapshots: true
})
答案 0 :(得分:1)
如果我想创建一张纸
-2 -1 0
ColA ColB ColC
First1 Last1 First1Last1
First2 Last2 First2Last2
First3 Last3 First3Last3
First4 Last4
我个人将首先使用条件格式设置ColC来标记什么是重复项,以防万一出现问题而绕过消息框。
如果我确实需要一个消息框,我将进行类似于您的设置:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns(3)) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Application.CountIfs(Range("C1:C12"),Target.Value) > 1 Then 'checks for first/last name
MsgBox("The name " & Target.Offset(0,-2).Value & " " & Target.Offset(0,-1).Value & " already exists." & vbNewLine & "Please enter a new name.")
End If
End Sub
编辑1:
鉴于colA和colB的数据输入,这会更合适吗?我利用了目标的行,因此负偏移量不必担心,因为您知道colA是名字,而colB是姓氏。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Dim r as long
r = target.row
If isempty(cells(r,1)) or isempty(cells(r,2)) then exitsub
If Application.CountIfs(Range("B1:B12"),cells(r,2).Value,Range("A1:A12"),cells(r,1).Value) > 1 Then 'checks for first/last name
MsgBox("The name " & cells(r,1).Value & " " & cells(r,2).Value & " already exists." & vbNewLine & "Please enter a new name.")
End If
End Sub
编辑2:
在验证是否使用任何值和某些值时,此宏一直在进行我的测试(我添加了清晰的内容和.select,因此您已重新上线,应该添加数据);我还添加了一个与相交有关的范围规范,以防您将诸如first / last的值添加到a1:b12之外的随机位置:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range(Cells(1, 1), Cells(12, 2))) Is Nothing Then Exit Sub
Dim r As Long
r = Target.Row
If IsEmpty(Cells(r, 1)) Or IsEmpty(Cells(r, 2)) Then Exit Sub
If Application.CountIfs(Range("B1:B12"), Cells(r, 2).Value, Range("A1:A12"), Cells(r, 1).Value) > 1 Then 'checks for first/last name
MsgBox ("The name " & Cells(r, 1).Value & " " & Cells(r, 2).Value & " already exists." & vbNewLine & "Please enter a new name.")
Cells(r, 1).ClearContents
Cells(r, 2).ClearContents
Cells(r, 1).Select
End If
End Sub