下一个循环无法为variables分配一个值 – VBA

我正在检查在3个不同combobox中select的3个值是否在某一行内。 如果是,则将该行号分配给一个variables,如果不是,则检查下一行。 该范围内的所有单元格都填充了数据,并且消息框显示了正确的值(仅用于检查目的),但If语句未移动到下面代码中的selectedrow = r行。

 Dim Project, licence, state As String Dim selectedrow As Integer Dim LastRow As Integer Dim r As Integer Project = cmb_Project.Value licence = cmb_Licence.Value state = cmb_State.Value LastRow = Worksheets("Entitlements").Range("A" & Rows.Count).End(xlUp).row For r = 3 To LastRow MsgBox (Worksheets("Entitlements").Cells(r, 1).Value) MsgBox (Worksheets("Entitlements").Cells(r, 7).Value) MsgBox (Worksheets("Entitlements").Cells(r, 6).Value) If Worksheets("Entitlements").Cells(r, 1).Value = Project And _ Worksheets("Entitlements").Cells(r, 7).Value = licence And _ Worksheets("Entitlements").Cells(r, 6).Value = state Then selectedrow = r End If Next r 

我猜测我犯了一个愚蠢的错误,但任何关于如何解决错误的build议将不胜感激。

谢谢

这可能不是问题,但请注意,Project和License不是stringvariables,而是variables。 当你在一行上Dim多于一个variables时,每个variables名必须有它自己的types。 如果没有给出types,那么默认是Variant。

所以,试试吧

 Dim Project as String, license as String, state as String 

或者,使用三个Dim语句而不是一个。

您的ComboBox中的值可能是数字string,而您范围中的值是数字(您已经确认许可证是3个数字)。

您的代码失败,因为Cells格作为Variant/Double返回数字单元格, ComboxBox.Value返回Variant/String 。 比较那些与=运算符导致不平等。

您可以通过在单元格E6input123 ,然后在即时窗口中运行它来查看相同的内容:

 ?Range("E6") = "123" True ?Range("E6") = 123 True ?Range("E6") = CVar("123") False 

如果你正在比较数字,将数值转换为数字,然后进行比较(但要小心,将"1D4"和/或"1E4"转换为数字10000 ),或将数字转换为Strings并进行比较。 至less有一个操作数是一个string就足以让Excel执行有效的相等操作:

 ?Range("E6") = CStr(CVar("123")) True 

但转换两个,你可以肯定是正确的结果。

 ?CStr(Range("E6")) = CStr(CVar("123")) True 

有几个可能性,因为variables'selectedrow'没有被设置到行'r'

  1. variables“LastRow”的值被计算为小于3.由于这个,循环被跳过。

  2. 如果条件结果是错误的。 在即时窗口尝试,或使用手表来查看存储在variables中的值。 有时候,一个小空间也会否定平等。