比较来自两个不同表格的单元格的值

首先我的代码:

Option Explicit
Sub UpdateCandidates()
  Application.ScreenUpdating = False
  Dim wks As Worksheet, wks2 As Worksheet
  Dim Lastrow As String, Lastrow2 As String
  Dim Rng As Range, i As Long, Rng2 As Range, i2 As Long
  Dim cell As Variant, cell2 As Variant

  Set wks = ThisWorkbook.Worksheets("Candidates")
    Lastrow = wks.Range("B" & Rows.Count).End(xlUp).Row
    If Lastrow > 1 Then
      cell = wks.Range("B2:B" & Lastrow).Value
      i = 1: Set Rng = Nothing
            While i <= Lastrow
            For i = i To Lastrow
                Set wks2 = ThisWorkbook.Worksheets("Job live")
                        Lastrow2 = wks2.Range("A" & Rows.Count).End(xlUp).Row
                        If Lastrow2 > 1 Then
                            cell2 = wks2.Range("A2:A" & Lastrow2).Value
                            i2 = 1: Set Rng2 = Nothing
                            While i2 <= Lastrow2
                                For i2 = i2 To Lastrow2
                                    If cell = cell2(i2, 1) Then
                                        MsgBox ("found")
                                    End If
                                Next
                            Wend
                        End If

            Next
      Wend
    End If
  Application.ScreenUpdating = True
End Sub

这基本上可以工作并比较两列,但最后它显示错误:

“下标超出范围”

我因为 <= Lastrow 而没有't understand why. I thought it'但是修复到 < Lastrow 并没有改变任何东西 .

我还想将第一张到第二张的值复制到特定的单元格 . 并在我的第二张纸的单元格下方插入一行 .

我也不明白为什么我必须将单元格与 cell2(i2,1) 进行比较,而不是将单元格与 cell2 进行比较 . 如果我将cell与cell2进行比较,则表示类型不匹配 . 如果我在工作表中输入第二个值,我会遇到同样的错误 .

我的代码出了什么问题?

回答(1)

2 years ago

我看到了你的代码,这是一个提案

Option Explicit
Sub CompareDefinedRanges()
Dim rng1, rng2 As Range
Dim found As Boolean
Dim i, j, foundAt As Integer
Set rng1 = Worksheets("Candidates").Range("B2", Worksheets("candidates").Range("B2").End(xlDown).Address)
Set rng2 = Worksheets("Job live").Range("A2", Worksheets("Job Live").Range("A2").End(xlDown).Address)
'show items
For i = 1 To rng1.Rows.Count
found = False
foundAt = 0
For j = 1 To rng2.Rows.Count
   If rng1.Item(i) = rng2.Item(j) Then
   found = True
   foundAt = j
   End If
Next j
   If found Then
   MsgBox rng1.Item(i).Value & " found at " & CStr(foundAt), , "Candidates"
   Else
   MsgBox rng1.Item(i).Value & " not found", , "Candidates"
   End If
Next i
Set rng1 = Nothing
Set rng2 = Nothing
End Sub