VBA嵌套循环多条件判断报错:Invalid Qualifier问题求助
VBA嵌套循环数据匹配问题修正
错误原因排查
工作表对象赋值错误:
- 不能通过
ws("SheetName")获取其他工作表,ws是单个工作表对象,需通过工作簿的Sheets集合获取目标表;同时对象类型变量赋值必须用Set关键字。 - 原代码拼写错误:
Project_Alalysis应为Project_Analysis。
- 不能通过
变量声明与赋值问题:
- VBA多变量声明时,仅最后一个变量会被指定类型,其余默认是
Variant,需明确每个变量的类型。 - 单元格对象赋值需用
Set,否则会直接取单元格值而非对象引用;原代码单元格地址拼接错误(如Range("D3" & i)会生成D33这类错误地址,正确应为Range("D" & i))。
- VBA多变量声明时,仅最后一个变量会被指定类型,其余默认是
Invalid Qualifier错误根源:
PlateNumPlate和FirstPlateProj是Integer值类型变量,不是对象,因此不能使用.Value属性,直接使用变量名即可。其他语法错误:
- 循环内存在多余的
End If,需删除; - 赋值逻辑错误:原代码把
BatchProj的值重复写入FarmPlate,应改为写入FarmProj的值。
- 循环内存在多余的
修正后的代码
Sub ProjectPlateLoops() ' 定义工作簿和工作表对象 Dim wb As Workbook Dim PlateSheet As Worksheet Dim ProjSheet As Worksheet ' 正确获取目标工作表 Set wb = ThisWorkbook Set PlateSheet = wb.Sheets("Plate_Analysis") Set ProjSheet = wb.Sheets("Project_Analysis") ' 获取两表最后一行数据行号 Dim lrProj As Long lrProj = ProjSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row Dim lrPlate As Long lrPlate = PlateSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row ' 嵌套循环匹配数据 Dim i As Long, j As Long For i = 3 To lrProj ' 声明并读取项目表当前行的对象与值 Dim FarmProj As Range, BatchProj As Range, ProjCodeProj As Range Dim FirstPlateProj As Integer, LastPlateProj As Integer Set FarmProj = ProjSheet.Range("D" & i) Set BatchProj = ProjSheet.Range("E" & i) Set ProjCodeProj = ProjSheet.Range("F" & i) FirstPlateProj = ProjSheet.Range("J" & i).Value LastPlateProj = ProjSheet.Range("L" & i).Value For j = 3 To lrPlate ' 声明并读取Plate表当前行的对象与值 Dim FarmPlate As Range, BatchPlate As Range, ProjCodePlate As Range Dim PlateNumPlate As Integer Set FarmPlate = PlateSheet.Range("H" & j) Set BatchPlate = PlateSheet.Range("G" & j) Set ProjCodePlate = PlateSheet.Range("F" & j) PlateNumPlate = PlateSheet.Range("E" & j).Value ' 条件判断并同步数据 If ProjCodeProj.Value = ProjCodePlate.Value And _ PlateNumPlate >= FirstPlateProj And _ PlateNumPlate <= LastPlateProj Then BatchPlate.Value = BatchProj.Value FarmPlate.Value = FarmProj.Value End If Debug.Print i Debug.Print j Next j Next i End Sub
内容的提问来源于stack exchange,提问作者Michaela Danielle
相关产品推荐
相关产品推荐

