运行 两个不同工作簿中范围的 Find 方法问题

Issue with running the Find method for ranges in two different workbooks

我正在尝试 运行 两个不同工作簿中两个范围之间的 Find 方法 - 如果在第一个范围中找不到第二个范围中的值,则整行中的数据上述单元格属于应该从第二个工作簿中复制并粘贴到第一个工作簿中。每次我尝试 运行 我的代码时,我都会得到 运行 时间错误 #438 - 对象不支持此 属性 或方法:

Option Explicit

Sub Data_Transfer()

Dim FileToOpen As Variant
Dim FileCount As Byte, SheetCount As Byte, SheetFound As Byte
Dim SelectedBook As Workbook
Dim WkSh As Worksheet
Dim Cell As Range, ChosenCell As Range, LookInRange As Range, LookAtRange As Range

FileToOpen = Application.GetOpenFilename(Title:="Select Files to Import Data", FileFilter:="Excel Files(*.xls*), *.xls*", MultiSelect:=True)

If IsArray(FileToOpen) Then 'Allows the user to click on the 'Cancel' button without it leading to an error
    
   For FileCount = 1 To UBound(FileToOpen)
        Set SelectedBook = Workbooks.Open(FileToOpen(FileCount))

       'If a worksheet already exists for the month:
        For SheetCount = 1 To ThisWorkbook.Worksheets.Count
            If ThisWorkbook.Worksheets(SheetCount).Name = VBA.Replace(SelectedBook.Name, ".xls", "") Then
               SheetFound = 1
               Set WkSh = ThisWorkbook.Worksheets(SheetCount)
               WkSh.Activate
               MsgBox "A worksheet already exists for the selected month."
            
              'Check if there are any expenses missing for the month:
               Set LookInRange = ThisWorkbook.ActiveSheet.Range("C2:C" & Range("C2").End(xlDown).Row)
               Set LookAtRange = SelectedBook.ActiveSheet.Range("C23:C" & Range("C2").End(xlDown).Row)
               For Each Cell In LookAtRange
                   Set ChosenCell = LookAtRange.Find(LookInRange.Cell, , xlValues, xlWhole)
                   If ChosenCell Is Nothing Then
                      ChosenCell.EntireRow.Copy WkSh.Range("A" & Range("A1").End(xlDown).Row + 1)
                   End If
                Next Cell
            End If
            If SheetFound = 1 Then: Exit Sub
        Next SheetCount
        
       'If a worksheet does not exist for the month:
        With ThisWorkbook
             .Worksheets.Add After:=Sheet11
             .ActiveSheet.Name = VBA.Replace(SelectedBook.Name, ".xls", "")
             SelectedBook.Worksheets(1).Range("A23").CurrentRegion.Copy .ActiveSheet.Range("A1")
             SelectedBook.Close
             For Each Cell In .ActiveSheet.Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
                 If VBA.Left(Cell.Value, 1) = "*" Then
                    Cell.EntireRow.Delete
                 End If
             Next Cell
             .ActiveSheet.Columns.AutoFit
        End With

    Next FileCount
    
End If
    
End Sub

始终为 所有 RangeCellsRowsColumns 对象指定它们所在的工作簿和工作表.

如果您不这样做,例如在这里:

Set LookAtRange = SelectedBook.ActiveSheet.Range("C23:C" & Range("C2").End(xlDown).Row)

然后第一个 RangeSelectedBook.ActiveSheet 但第二个可能是也可能不是!只要它没有定义你就不知道:

Set LookAtRange = SelectedBook.ActiveSheet.Range("C23:C" & SelectedBook.ActiveSheet.Range("C2").End(xlDown).Row)

因此请明确 RangeCellsRowsColumns 对象始终 完全引用 workbook/worksheet.