将列中的单元格值与用户输入的ComboBox值进行比较

时间:2017-06-04 15:25:58

标签: excel vba excel-vba

我无法将列中单元格的值与组合框值输入进行比较。

我有2个工作簿测试(包含ComboBox2)和 test1 (包含一个列,其单元格与ComboBox2.value进行比较)

我有一个for循环来实现这个目标。

For i = 1 To LastRow

    If wkbSource.Worksheets(sheet_no).Cells(i, 1) = ComboBox2.Value Then
         'do something
    End If
Next i

我已经调试了代码,我知道即使在匹配后if statement也不会执行。

我该如何解决?

编辑:

此外,我想知道如何添加两个单元格值,因为直接添加它会显示不正确的输出。 例如

wkbSource.Worksheets(sheet_no).Cells(i, 1) + wkbSource.Worksheets(sheet_no).Cells(i, 3)

1 个答案:

答案 0 :(得分:4)

这是(再次)到 Variant Comparison Curse 。请特别查看该问题的“UPDATE 4”

If wkbSource.Worksheets(sheet_no).Cells(i, 1) = ComboBox2.Value Then

这比较了两个Variant。但是,当单元格包含一个数字,并且未明确地格式化为Text时,输入时不会出现'。 Excel会将其视为一个数字,因此.Value将是一个数字Variant。另一方面,Combobox2.Value重新调整了文字Variant,因此比较失败了!

比较两个 Variant 变量时,这些操作将失败:

  2 = "2"    ' False
  3 > "2"    ' False

因此,在您的特定情况下,解决方案是使用控件和单元格的.Text属性强制比较文本。以下是您的方式 - 例如 - 总结与您的查询匹配的单元格:

For i = 1 To LastRow
  If Trim(wkbSource.Worksheets(sheet_no).Cells(i, 1).Text) =  Trim(ComboBox2.Text) Then
     'do something
      if IsNumeric(wkbSource.Worksheets(sheet_no).Cells(i, 1).Value2) Then _
        mySum = mySum + wkbSource.Worksheets(sheet_no).Cells(i, 1).Value2
  End If
Next i