1

您好,我是我公司的零件分析师。我在我们的在线目录中搜索引擎序列号,以查看网站上是否为客户提供所需信息。我每个月要检查大约三千个号码。我有一个 Excel 表,我从中复制发动机序列号并将其粘贴到在线目录的搜索中。这是一项非常乏味的任务。我一直在研究一个宏来自动化这个过程。我在宏中有一个数组。我希望数组跳过不需要搜索的序列号。到目前为止,宏将打开浏览器到电子目录并循环遍历数组,突出显示包含数组中值的所有序列号。我现在需要数组来跳过这些值。

设想

  1. 我在 excel 中单击一个按钮,它会打开所需的文件并开始在 A 列中搜索序列号。
  2. 如果 F2 = Y 则跳过在目录中搜索 A2,但是如果 F2 = N 则搜索 A2
  3. 如果搜索A2返回所需信息,则在F2中输入Y,否则在F2中输入N,转到A3并重复过程。

我搜索了很多论坛,但我一直无法找到解决方案。我的宏在下面。我需要帮助来完成宏。我试图让数组跳过数组中的值并通过在 if 语句中添加 Not 来突出显示所有其他值。这不起作用,而是当我在 if 语句中添加“Not”时突出显示所有序列号。任何建议表示赞赏。

Sub HighlightValue()

Dim MyVals As Variant
MyVals = Array("*472908*", "*471905*", "*471914*", "*471935*", "*471917*", "*471920*", "*471933*", "*471932*", "*471934*") 'Enter all the values to search for

 Application.Goto Range("A2"), False
    Do Until IsEmpty(ActiveCell)
        For Each esn In Selection
            For i = LBound(MyVals) To UBound(MyVals)
                If esn.Value Like MyVals(i) Then
                esn.Interior.ColorIndex = 6 'yellow
            Exit For
        End If
        Next i
        Next esn
        ActiveCell.Offset(1, 0).Select
    Loop

结束子

在此处输入图像描述

4

1 回答 1

0

没问题。这是我进行的快速测试。我可以选择两种方法。

  1. 如果在数组中找到条目,则将它们全部设置为黄色并清除颜色
  2. 在循环中使用标志。预先将其设置为 false,如果在数组中找到该条目,则将其设置为 true。在 for 循环之后,使用此标志的状态来决定是否为单元格着色。

我使用了方法#2。

另请注意,根据您提供的数据,数组中每个字符串开头的通配符 (*) 是不必要的。(我还添加了数组中的最后一个元素,所以我会有一些匹配的单元格和一些不匹配的单元格)

Sub highlightCellsNotInArray(myVals)
    Dim found As Boolean

    Application.Goto Range("a2"), False

    Do Until IsEmpty(ActiveCell)

        For Each engSerNum In Selection
            found = False

            For i = LBound(myVals) To UBound(myVals)
                If engSerNum.Value Like myVals(i) Then
                    found = True
                    Exit For
                End If
            Next i

            If found = False Then
                engSerNum.Interior.ColorIndex = 6 ' yellow
            End If
        Next engSerNum

        ActiveCell.Offset(1, 0).Select
    Loop
End Sub

Sub test()
    Dim arrayVals
    arrayVals = Array("472908*", "471905*", "471914*", "471935*", "471917*", "471920*", "471933*", "471932*", "471934*", "471907*")
    highlightCellsNotInArray (arrayVals)
End Sub
于 2014-08-10T06:44:25.467 回答