下一个循环无法为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
。 比较那些与=
运算符导致不平等。
您可以通过在单元格E6
input123
,然后在即时窗口中运行它来查看相同的内容:
?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'
-
variables“LastRow”的值被计算为小于3.由于这个,循环被跳过。
-
如果条件结果是错误的。 在即时窗口尝试,或使用手表来查看存储在variables中的值。 有时候,一个小空间也会否定平等。