创建 vba 代码以显示一条消息,使其不会在某些工作表中出现重复项

Creating a vba code to show a message not to appear duplicates in some sheets

目前我有这个代码可以在食堂登记每天的所有膳食。

  Sub register()
  Dim s As Worksheet
  Set s = Worksheets("Lista_" & Range("K9").Value)
  Dim row As Long
  row = s.Cells(s.Rows.Count, "B").End(xlUp).row + 1
  s.Cells(row, "B").Value = Range("C7").Value
  s.Cells(row, "C").Value = Range("C9").Value
  s.Cells(row, "H").Value = Range("L9").Value
  s.Cells(row, "I").Value = Range("P20").Value
  s.Cells(row, "N").Value = Range("P21").Value
  s.Cells(row, "O").Value = Range("P1").Value
  Range("M6:M19").Select
 Range("M19").Activate
Selection.ClearContents
Range("C7:D7").Select
Selection.ClearContents
Range("C7").Select
End Sub

--

如果某个员工的号码已经注册(以免重复),我希望有一条消息...为此,如果该号码已经注册,vba 代码应该在所有页面上搜索存在或 not.If 数字出现在以“Lista_”开头的工作表的 B 列中,应该出现一条消息

我想你只需要添加一个检查员工编号的函数

使用您的示例数据,类似的方法对我有用

您可以根据自己的情况更改常量和数据类型

Option Explicit

Sub register()
    Dim s As Worksheet
    Dim row As Long
    Dim employeeNum As String

    Set s = Worksheets("Lista_" & Range("K9").Value)
    
    row = s.Cells(s.Rows.Count, "B").End(xlUp).row + 1
    employeeNum = Range("C7").Value

    If AlreadyRegistered(employeeNum) Then
        MsgBox "Ignoring Preexisting Employee Number: " & employeeNum
    Else
        s.Cells(row, "B").Value = employeeNum
        s.Cells(row, "C").Value = Range("C9").Value
        s.Cells(row, "H").Value = Range("L9").Value
        s.Cells(row, "I").Value = Range("P20").Value
        s.Cells(row, "N").Value = Range("P21").Value
        s.Cells(row, "O").Value = Range("P1").Value
        Range("M6:M19").Select
        Range("M19").Activate
        Selection.ClearContents
        Range("C7:D7").Select
        Selection.ClearContents
        Range("C7").Select
    End If
End Sub

Function AlreadyRegistered(employeeNum As String) As Boolean

    Const EmployeeColumn    As String = "B:B"

    Dim varSheets           As Variant
    Dim intSheet            As Integer
    Dim xlSheet             As Worksheet
    Dim rgeFound            As Range
    
    Dim i                   As Integer
    
    AlreadyRegistered = False
    varSheets = Array("Lista_AA", "Lista_BB", "Lista_CC")
    For intSheet = LBound(varSheets) To UBound(varSheets)
        Set xlSheet = Sheets(varSheets(i))
        Set rgeFound = xlSheet.Range(EmployeeColumn).Find(employeeNum)
        If Not (rgeFound Is Nothing) Then
            AlreadyRegistered = True
            Exit For
        End If
        
    Next intSheet

End Function