我正试图让循环工作。
我需要做的是循环一张工作表,如果地址匹配列A,则列W具有值,如果所有地址实例的值都在列W中,那么GoTo end_nothing
。如果只有一些匹配在W列中有数据,那么继续使用sub。
我对我的代码所遇到的问题是它匹配的第一个条目,它退出sub而没有遍历其余代码。
我的代码:
Private Sub CommandButton3_Click()
Dim add_WIR_check, lastRow_WIR As Long
Dim address_Check As String: address_Check = sheets("Auto Checklist").cells(3, 2).value
lastRow_WIR = sheets("Works Instruction Record").cells(Rows.count, "A").End(xlUp).Row
***** Unprotect Sheet
For add_WIR_check = 3 To lastRow_WIR
If sheets("Works Instruction Record").cells(add_WIR_check, 1) = address_Check Then
If sheets("Works Instruction Record").cells(add_WIR_check, 23) <> "" Then
GoTo end_nothing
End If
End If
Next add_WIR_check
***** Additional code here
end_nothing:
***** Protect sheet
End Sub
答案 0 :(得分:1)
您的VBA代码段不符合所述的业务逻辑:您必须遍历该范围内的所有匹配行,以查明“W”列中的所有单元格是否包含值。可以通过使用辅助Boolean
var ok
来实现,如下所示:
Dim ok as boolean
ok = True
For add_WIR_check = 3 To lastRow_WIR
If sheets("Works Instruction Record").cells(add_WIR_check, 1) = address_Check Then
If Not (sheets("Works Instruction Record").cells(add_WIR_check, 23) <> "") Then
ok = False
End If
End If
Next add_WIR_check
完成后,var ok
值将指示匹配行的列“W”中的所有单元格是否包含值。
希望这可能会有所帮助。