1

What is the correct syntax for a Do Until Loop? This is my first try attempting and I am getting an error message that says "Loop without Do". Here is what I have:

Dim i As Long

Do

For i = 3 To 93

Sheets("Analysis").Select
Range("B" & i).Copy
Range("R3").PasteSpecial

Sheets("Analysis").Select
Range("Q3").Copy
Range("G" & i).PasteSpecial Paste:=xlPasteValues

Loop Until Sheets("Analysis").Range("L1") < 50
1
  • The code is just missing the Next before the Loop Until Commented Feb 27, 2014 at 15:21

2 Answers 2

1

Your code could use some real clean-up.

Dim i As Long

With Sheets("Analysis")
    Do Until .Range("L1").Value < 50
        For i = 3 To 93
            .Range("B" & i).Copy .Range("R3")
            .Range("Q3").Copy
            .Range("G" & i).PasteSpecial Paste:=xlPasteValues
        Next i
    Loop
End With

A couple of things. First, make sure that there's a mechanism somewhere that reduces the value in .Range("L1") to less than 50. Otherwise, this runs in an infinite loop (because you can't complete the condition to make it stop).

Second, make sure that your For loops are closed with Next. Either Next or Next x where x is the iterator variable you defined should work (in your case, x is i).

Third, read up on the differences of Do While-Loop, Do Until-Loop, Do-Loop While, and Do-Loop Until. Until and While are pretty self-explanatory. The placement of the condition is a bit of a difficulty for those beginning with loops and should be mastered without question. One really clear explanation can be found here.

Fourth, use With for sequential or simultaneous actions on a single object. Check this answer out for samples and explanations (check section (3)).

Hope this helps.

Sign up to request clarification or add additional context in comments.

2 Comments

actually, this line make no sence to me: .Range("B" & i).Copy .Range("R3") :) we could just write .Range("B93").Copy .Range("R3") without For i = 3 To 93 loop. The same thing here: .Range("G3:G93").Value=.Range("Q3").Value
I was inclined to make the same observation. The issue I have with this code is not so much the loop but the... unorthodox copying. Obviously, overwriting .Range(R3) over and over again escapes me. But even so, I see nothing that changes L1 as well. Perhaps OP is executing this inside a called sub and an outer sub decreases L1, etc. We never know until OP really comments on whether the above works or not... And I've got my guess it won't. Lol. :D If he just wants to transfer values, I believe your comment is the best as well. :)
1

Although I can't figure out what you are trying to acomplish with you loop, the code should be changed to the following in order to make it "correct".

Dim i As Long
Do         
    For i = 3 To 93
        Sheets("Analysis").Select
        Range("B" & i).Copy
        Range("R3").PasteSpecial

        Sheets("Analysis").Select
        Range("Q3").Copy
        Range("G" & i).PasteSpecial Paste:=xlPasteValues
    Next i
Loop Until Sheets("Analysis").Range("L1") < 50

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.