0

我很幸运地得到了某人对我之前提出的问题的答复。见这里

我唯一苦苦挣扎的是创建一个循环,该循环将在到达 B 列中的空白单元格时结束宏。我一直在尝试阅读其他代码,但没有真正点击我(如果,比循环,结束循环等) )。这是我的宏的最后一步,我会喜欢任何有关如何为我创建循环和/或解决此问题的资源的资源。一如既往地感谢。这个网站上的人非常乐于助人!

Sub Redirect()
Dim IE As Object
Dim doc As Object

Set IE = CreateObject("InternetExplorer.Application")

With IE
    .Visible = True
    .Navigate "https://...."

    Do Until .ReadyState = 4: DoEvents: Loop

    With .Document.forms("digiSHOP")
        .elements("OldUrl").Value = Range("A2")
        .elements("NewUrl").Value = Range("B2")
        .submit
    End With

    Do Until .ReadyState = 4: DoEvents: Loop
    Do While .Busy: DoEvents: Loop

End With
End Sub
4

1 回答 1

4

虽然您实际上可能希望循环直到到达空白行,但大多数人发现循环直到特定列中的最后一个填充行更有用,即使您在列中有几个(或许多)空白也有效。

请注意,您甚至可能不需要循环。使用.autofilteror.find效率更高。(类似于在 SQL 查询中使用 where 子句而不是游标)

说了这么多,如果你确实需要循环,最好的方法是声明一些对象,包括工作表和范围,这样你就可以在不选择或激活代码中的任何内容的情况下执行循环。正如任何称职的 Excel VBA 开发人员都会告诉您的那样,应始终避免选择和激活。

您可以使用以下内容作为模板:

Sub LoopUntilLastRow()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim lastRow As Long
    Dim myColumn As String

    Set ws = ThisWorkbook.Sheets("Sheet1")
    myColumn = "A"
    lastRow = ws.Range(myColumn & ws.Rows.Count).End(xlUp).Row
    If lastRow = 1 Then
        MsgBox "Column " & UCase(myColumn) & " is empty."
        Exit Sub
    End If

    Set rng = ws.Range(myColumn & "1:" & myColumn & lastRow)
    For Each cell In rng
        ' do something
        cell.Interior.Color = vbYellow
    Next cell
End Sub
于 2013-05-25T00:10:42.033 回答