How to Fix an Infinite Do While Loop in Word VBA
Question details
The user needs to fix a Word VBA macro that enters an infinite loop and incorrectly deletes data when processing contact cards with varying line lengths.

- Product
- Word
- Device & OS
- not provided
- Scenario
- Using a VBA Find macro to navigate through contact cards and replace specific text with 'Electronic Mail'.
- Observed behavior
- The macro fails to end because it relies on moving the cursor by fixed line counts. This causes incorrect replacements, deleted contact information, and occasionally triggers VBA Error 5941.
Always save a backup copy of your document before running or modifying loops in VBA, as an infinite loop can freeze the application and force you to restart without saving.
Switch from Cursor Movement to a Table Row Loop
Iterate through the table's rows dynamically instead of moving the cursor down by a fixed number of lines.
Moving the cursor a fixed number of lines is unreliable when contact cards have varying amounts of text. By utilizing a For loop that references the table's row count, the macro adapts to any card length and guarantees termination.
Additionally, ensure replacements target only the specific cell or paragraph within the row to prevent unintentionally deleting adjacent contact information.
Press Alt + F11 to open the Visual Basic for Applications Editor, and locate the module containing your Do While loop.
Remove the Selection.MoveDown commands. Instead, wrap your logic in a For loop to iterate through the rows, like: For i = 2 To Selection.Tables(1).Rows.Count.
Inside the loop, check the specific cell containing the email address. For example: If InStr(Selection.Tables(1).Rows(i).Cells(7).Range.Text, "@") > 0 Then.
Target only the first cell or paragraph of that matching row for the text replacement. Example: Selection.Tables(1).Rows(i).Cells(1).Range.Text = "Electronic Mail".
Resolve VBA Runtime Error 5941
Fix the 'Requested member of the collection does not exist' error by validating the table's column structure.
Edit Tables and Macros Easily in WPS Writer
WPS Office fully supports Microsoft Office document formats and provides intuitive tools for editing tables. For users with advanced automation needs, WPS Office also supports running and editing VBA macros in its professional editions, allowing you to seamlessly migrate and fix your code.
- 1. Open your document: Launch WPS Writer and open your document file containing the table data and macro.
- 2. Access the VBA Editor: Navigate to the Developer tab on the top ribbon and click on the VBA Editor icon to view your code.
- 3. Update the loop logic: Modify your macro to iterate through table rows instead of relying on fixed cursor movements, then save the changes.
- 4. Run the macro: Execute the updated macro directly within WPS Writer to safely update your contact cards without triggering infinite loops.

Frequently Asked Questions
Why does a Word VBA Do While loop run infinitely?
A Do While loop becomes infinite when its exit condition is never met. In document processing, this often happens if the macro navigates the cursor by a fixed number of lines, but encounters irregular text lengths (like varying contact cards) or unexpected end-of-document behavior that prevents the target condition from triggering.
What does VBA Runtime Error 5941 mean?
Error 5941 indicates that the requested member of a collection does not exist. In the context of table macros, it usually means your code is trying to reference a specific cell (like Cells(7)) in a table row that has fewer columns than the code expects.
How do I target a specific table cell in a Word macro?
You can target a specific cell by referencing its row and column index within the table object. For example, Selection.Tables(1).Rows(2).Cells(1).Range.Text allows you to read or modify the text inside the first cell of the second row.
How can I forcefully stop an infinite loop in VBA?
If your macro is stuck in an infinite loop and the application is unresponsive, you can usually interrupt the execution by pressing Ctrl + Break (or Esc) on your keyboard. This will pause the code and allow you to open the VBA debugger to fix the logic.




