繁体   English   中英

在VBA Macro for Excel中创建循环?

[英]Creating a Loop in VBA Macro for Excel?

我很幸运收到某人对我之前提出的问题的答复。 看这里

我唯一努力的事情是创建一个循环,该循环将在到达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

尽管您可能实际上想循环直到到达空白行,但大多数人发现循环到特定列中的最后一个填充行更有用,即使该列中有几个(或多个)空白也可以。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM