0

幸運なことに、私が以前に尋ねた質問について誰かから回答を得ることができました。ここ を参照してください

私が苦労しているのは、列Bの空白セルに到達するとマクロを終了するループを作成することだけです。他のコードを読み込もうとしましたが、実際には何もクリックしませんでした(if、ループよりも、ループで終了など) )。これは私のマクロの最後のステップです。ループの作成方法やこの問題の解決策に関するリソースがあれば幸いです。いつもありがとう。このサイトの人々は役に立ちません!

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 に答える