[英]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.