首页 > 解决方案 > 尽管在 excel 工作表中有匹配项,但 Application.Match 函数为何无法正常工作?

问题描述

代码如下:

Private Sub txtv_AfterUpdate()
Total_rows_Entries = Worksheets("Entries").Range("A" & Rows.Count).End(xlUp).Row

If IsError(Application.Match(txtv.Value, Worksheets("Entries").Range("A2:A" & Total_rows_Entries), 0)) = False Then
    MsgBox "This voucher number has already been used previously. Voucher numbers cannot be duplicated."
End If

End Sub

txtv.Value 是一个数字类型,它是文本框的值。

工作表如下所示: 工作表

我匹配的目的是如果工作表中已经有许多“123”,那么它应该返回消息框,但无论我将类型更改为.Text.Value手动将excel中的单元格类型更改为任一,它总是绕过它一般、文本或数字。

标签: excelvba

解决方案


试试这个广泛的比较。

If not (IsError(Application.Match(clng(txtv.Value), Worksheets("Entries").columns(1), 0)) And _
        IsError(Application.Match(cstr(txtv.Value), Worksheets("Entries").columns(1), 0))) Then
    MsgBox "This voucher number has already been used previously." & vblf & _
           "Voucher numbers cannot be duplicated."
End If

或者,尝试一些计算密集度稍高的东西,但它并不关心它正在寻找的值是字符串还是数字。

If cbool(Application.countif(Worksheets("Entries").columns(1), txtv.Value)) Then
    MsgBox "This voucher number has already been used previously." & vblf & _
           "Voucher numbers cannot be duplicated."
End If

推荐阅读