Sub 查找户主信息()
    Dim i As Long, j As Long, 被查找值的行号 As Long
    Dim 查找的名字 As String, 匹配的户主身份证 As String, 匹配的户主关系 As String
    Dim 被查找值 As Variant
    Dim 被查找表格 As Workbook
    Dim target As Range, movetarget As Range
    
    Application.ScreenUpdating = False  ' 关闭屏幕更新,提高性能
    Application.DisplayAlerts = False   ' 关闭警告信息
    
    On Error GoTo ErrorHandler          ' 错误处理
    
    ' 打开被查找的工作簿
    Set 被查找表格 = Workbooks.Open("C:\Users\Administrator\Desktop\source.xlsx")
    
    ' 主循环
    For i = 1 To 8130
        ' 获取当前行的查找名字
        查找的名字 = ThisWorkbook.Sheets(1).Range("D" & i).Value
        
        ' 如果名字为空则跳过当前循环
        If 查找的名字 = "" Then
            GoTo NextIteration
        End If
        
        ' 重置匹配信息
        匹配的户主身份证 = ""
        匹配的户主关系 = ""
        
        ' 在被查找表格中查找名字
        For j = 1 To 488
            被查找值 = 被查找表格.Sheets("merge").Range("B" & j).Value
            
            ' 如果找到匹配的名字
            If 被查找值 = 查找的名字 Then
                被查找值的行号 = j  ' 记录匹配行号
                
                ' 检查当前行是否为户主
                If 被查找表格.Sheets("merge").Range("C" & 被查找值的行号).Value = "户主" Then
                    匹配的户主身份证 = 被查找表格.Sheets("merge").Range("E" & 被查找值的行号).Value
                    匹配的户主关系 = "户主"
                Else
                    ' 向上查找户主
                    Set target = 被查找表格.Sheets("merge").Range("C" & 被查找值的行号)
                    Do While Not target Is Nothing And target.Row > 1
                        Set movetarget = target.Offset(-1, 0)
                        
                        If movetarget.Value = "户主" Then
                            匹配的户主身份证 = 被查找表格.Sheets("merge").Range("E" & movetarget.Row).Value
                            匹配的户主关系 = target.Value
                            Exit Do
                        End If
                        
                        Set target = movetarget  ' 移动到上一行
                    Loop
                End If
                
                ' 将匹配结果写回当前工作簿
                ThisWorkbook.Sheets(1).Range("I" & i).Value = 匹配的户主身份证
                ThisWorkbook.Sheets(1).Range("J" & i).Value = 匹配的户主关系
                
                ' 找到后跳出内层循环,继续下一个名字
                Exit For
            End If
        Next j
        
NextIteration:
    Next i
    
    ' 清理资源
    被查找表格.Close SaveChanges:=False
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    MsgBox "处理完成!", vbInformation
    Exit Sub
    
ErrorHandler:
    ' 错误处理代码
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    ' 确保关闭已打开的工作簿
    On Error Resume Next
    If Not 被查找表格 Is Nothing Then
        被查找表格.Close SaveChanges:=False
    End If
    
    MsgBox "发生错误: " & Err.Description, vbCritical
    Exit Sub
End Sub