【问题标题】:IE Automation with an array带有数组的 IE 自动化
【发布时间】:2014-08-06 13:42:52
【问题描述】:

您好,我在公司担任零件分析师。我在我们的在线目录中搜索引擎序列号,以查看网站上是否存在客户所需的信息。我每个月要检查大约三千个号码。我有一个 Excel 表,我从中复制了引擎序列号并将其粘贴到在线目录的搜索中。这是一项非常乏味的任务。我一直在研究一个宏来自动化这个过程。我在宏中有一个数组。我希望数组跳过不需要搜索的序列号。到目前为止,宏将打开浏览器到电子目录并循环遍历数组,突出显示包含数组中值的所有序列号。我现在需要数组来跳过这些值。我想对数组使用 if 语句,这样每次我运行宏时,它都会运行得更快,因为正在搜索的值的数量正在减少。

场景

  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

结束子

【问题讨论】:

  • 如果单元格的前 n 个字符(我猜 n = 6)与 myVals 中的值不匹配,您是否打算突出显示 A 列中的所有单元格? (您的代码已经突出显示了前 6 个字符与数组中的一个元素匹配的任何单元格 - 但是,该数组不包含与 [A2..A17] 范围内的任何单元格匹配的值 - 我刚刚将“471907 *”添加到数组 myVals 并突出显示单元格 [A13..A17])通过删除不相关的代码来更新您的问题无关紧要会使事情更清楚。 - 例如对 IE、文件夹和文件的任何引用 :)
  • 是的,我想突出显示与数组不匹配的所有单元格,以测试我的最终目标。我的最终目标是跳过与数组匹配的任何单元格并检查与数组不匹配的单元格。数组中的值是序列号,不包含我正在寻找的 ATS(F 列)信息。很抱歉没有发布包含数组中值的部分。此数据样本来自 30k+ 个条目的列表。当我运行宏以突出显示数组值时,它运行完美。下一阶段是让宏使用数组来检查网站的 ATS。

标签: arrays excel ie-automation


【解决方案1】:

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

  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

【讨论】:

  • 代码运行良好。现在我想用它来自动在 IE 中进行搜索,如果信息存在,则在正在搜索的序列号的 F 列中输入 Y。如果信息不存在。移动到 F 列中带有 N 的下一个序列号。也只搜索 F 列中带有 N 的序列号,但跳过数组中的所有序列号,因为它们在 F 列中总是有一个 N。我有一些代码,但我是无法正常工作。
猜你喜欢
  • 2015-08-31
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多