Application.worksheetFunction.match无法正常工作VBA Excel

我正尝试用一个前缀生成一个唯一的ID。 为了这个,我产生了一个介于0000和9999之间的随机数,并将其添加到我的前缀末尾。 然后我想要做的是检查列A中的表格,看看这个ID是否已经存在,如果是,那么它只是产生另一个随机数字,并继续进行,直到find唯一的一个。 要做到这一点,我正在使用一个while循环。 以下是我的代码。 我遇到的问题是,一旦匹配()函数找不到任何东西,值仍然是最后一个值,即:它发现最后一个值的行号。 例如,如果我的ID是T26-7055它search工作表,并发现它已经存在于第59行,它然后生成另一个ID这个时间说T26 -2099不存在,但匹配函数仍然返回59,循环进入无限循环。 我不明白为什么会发生这种情况,希望你们中的一个人能够帮忙。

Dim newID As String Dim x As Integer Dim matchedRow As Boolean matchedRow = True x = CInt(Int(9999 * Rnd()) + 1) newID = "T26 - " & x While matchedRow = True Dim match As Long On Error Resume Next match = Application.WorksheetFunction.match(newID, Sheets("Exceptions").Columns(1), 0) On Error GoTo 0 If match <> 0 Then x = CInt(Int(9999 * Rnd()) + 1) newID = "T26 - " & x matchedRow = True Else matchedRow = False End If Wend 

谢谢

find匹配后,您不会将match重置为0。

在线后

 matchedRow = True 

放行

 match = 0 

在循环开始时将Dim match as Long不会重置它。

  • 尝试将variables“match”重命名为其他内容 – Match是内置Excel函数的名称

  • 使用Application.Match而不是WorksheetFunction.Match(有细微差别)


 Dim newID As String Dim found As Variant Do newID = "T26 - " & CInt(Int(9999 * Rnd()) + 1) found = Application.Match(newID, Sheets("Exceptions").Columns(1), 0) Loop While Not IsError(found) 

您正在使用Application.WorksheetFunction.match。 如果找不到匹配项,并且您find了解决方法,则会引发错误。 但是这也会压制任何被发现的合法错误。

如果您使用Application.match,您将能够捕获错误,如下所示:

 Application.WorksheetFunction.IsError(Application.match(newID, Sheets("Exceptions").Columns(1), 0)) 

这至less会给你一个你遇到的错误的想法。 另外:您没有使用完全匹配的匹配。 我认为,根据你的故事,你将需要(这可能是你的麻烦的原因,只要把最后的0改为1,你会得到一个更精确的结果。

 Application.WorksheetFunction.IsError(Application.match(newID, Sheets("Exceptions").Columns(1), 1))