使用 Excel VBA 和 iMacros 循环

Looping with Excel VBA and iMacros

好了,场景是这样的。 我正在努力将客户列表从一个后端经理移到另一个后端经理,但不幸的是我正在从中移动列表的那个人(其中包含地址、phone 数字、关于帐户的注释和关于每个客户喜欢什么的一般信息)无法导出到 excel。因此,这开始变得乏味。我的下一步是为 IE 尝试一种叫做 iMacros 的东西。 我现在设置它的方式非常简陋。我有 15 个 imacro 宏(每个需要复制的字段一个)。第一个更改页面以便进行循环并提取第一个字段。其他 14 个中的每一个一次只提取一个字段。 我试图将单个客户的所有信息放在一行中,只是将收集的信息分开列。然后去下一行为下一个客户做准备。它目前从第 3 行开始,但如果需要更改,可以。

   dim iim1, iret, row


Sub Button1_Click()

    Set iim1 = CreateObject("imacros")
     iret = iim1.iimInit
    iret = iim1.iimDisplay("Submitting Data from Excel")

    row = ActiveCell.row

    Range("A3").Select

    iret = iim1.iimPlay("Login")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If




    clientloop1

End Sub

Sub clientloop1()


    Do Until ActiveSheet.UsedRange.Rows.Count = 4


    iret = iim1.iimPlay("Field1")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 1).Value = iim1.iimgetlastextract(0)


    iret = iim1.iimPlay("Field2")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 2).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field3")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 3).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field4")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 4).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field5")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 5).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field6")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 6).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field7")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 7).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field8")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 8).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field9")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 9).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field10")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 10).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field11")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 11).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field12")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 12).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field13")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 13).Value = iim1.iimgetlastextract(0)

     iret = iim1.iimPlay("Field14")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If
    Cells(row, 14).Value = iim1.iimgetlastextract(0)


     iret = iim1.iimPlay("Field15")
    If iret < 0 Then
        MsgBox iim1.iimgetlasterror()
    End If

    ActiveCell.Offset(1, 0).EntireRow.Range("A1").Select




    Loop

End Sub

当我按原样执行代码时,它正确地执行了第一行,但不断覆盖下一个客户端的信息,而不是转到下一行并将其添加到那里。 如果能提供任何帮助,我将不胜感激。我很难过。 很高兴终于加入这个社区,我无法告诉你们有多少次这里的问题与另一个问题相关并帮助我解决问题,哈哈。

对于非常大的客户列表,可以是这个,也可以一次复制并粘贴 1 个。

您还没有递增 'row' 变量。您需要在 "Loop" 之前包含 "row = row + 1",或者如果您真的想使用 Activecell 的想法,您可以在 'Loop' 之前添加 "row = ActiveCell.row"(尽管另一种方式可以使更多感觉并且会更快)

即使您设置行 = ActiveCell.row,这也不会在您 select 一个新单元格时更改行变量。它只是将行变量设置为当时处于活动状态的任何单元格,然后设置该行的值,直到它被更改。