使用VBA中的索引/匹配搜索数字时键入不匹配

时间:2017-01-24 19:15:22

标签: excel vba excel-vba

我有一个索引匹配公式,当我搜索包含字母的字符串时它可以正常工作,但当我使用一串数字时,它会返回错误1004。我尝试将application.worksheetfunction.match更改为application.match,并返回错误13:Type Mismatch。我认为问题是它无法匹配只包含数字的字符串,但我需要一种方法来实现。

   application.worksheetfunction.index(sheet4.range("AMD[Product Number]"), _ 
   application.WorksheetFunction.Match(sheet1.Searchbox.Value,sheet4.Range("AMD[Model]"),0))

AMD [Model]列格式为general,因为它包含数字(例如:6128)和混合(例如:6262 HE)格式。 我不认为它是相关的,但AMD [产品编号]列格式为一般。

是否有任何方法可以重写代码以使其工作?

编辑:这里有一些代码。我不知道它有多大用处。上面的代码是孤立的问题。

Dim SB As String, SBn As Boolean, FirstPN As String, FirstPNQTY As Long

SB = Sheet1.Searchbox.Text
            SBn = IsNumeric(SB)
            Select Case SBn
                Case True
                    FirstPN = Application.WorksheetFunction.Index(Sheet4.Range("AMD[Part Number]"), _
                                        Application.WorksheetFunction.Match(SB, Sheet4.Range("AMD[Model]"), 0))
                    FirstPNQTY = Application.WorksheetFunction.Index(Sheet4.Range("AMD[Qty]"), _
                                            Application.WorksheetFunction.Match(FirstPN, Sheet4.Range("AMD[Part Number]"), 0))
                    With Sheet1
                            .tTitle5 = "Select Next PN"
                            .tField5.Text = FirstPN
                            .bTitle5 = "Current PN QTY"
                            .bField5.Text = FirstPNQTY
                        End With

1 个答案:

答案 0 :(得分:0)

SB是String类型。如果它的值是数字,它仍然是一个字符串,只看起来像一个数字。如果AMD[Model]中的数字数据实际上是数字,那么匹配将无法找到它。

解决方案是将SB更改为Variant,并将字符串转换为数字

Dim SB As Variant
'....    
If IsNumeric(SB) Then
    SB = Val(SB)
End If