【问题标题】:Creating a Loop in VBA Macro for Excel?在 Excel 的 VBA 宏中创建循环?
【发布时间】:2013-05-20 15:40:18
【问题描述】:

我很幸运能够就我之前提出的问题得到某人的回复。 See here

我唯一苦苦挣扎的是创建一个循环,该循环将在到达 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

【问题讨论】:

    标签: vba loops excel


    【解决方案1】:

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

    请注意,您甚至可能不需要循环。使用.autofilter.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
    

    【讨论】:

    • 太棒了!谢谢餐饮部部长!我将分解您的代码并阅读 .autofilter 和 .find。我不熟悉那些......但是:) 再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2014-12-06
    • 2014-03-07
    • 2023-01-12
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    相关资源
    最近更新 更多