#1
|
|||
|
|||
VBA is crashing after about 350 pages
Hi there,
I'm having a huge mailmerge document with 6,000 pages and many tables and columns. Each cell with "-1" inside it should get a grey background. Since I was not able to do this using IF function, I'm trying it with VBA (see below). Description of the workflow: I'm running a very simple code to get through all the columns of all tables in my word document, make its background to "grey" and remove the content, if its numeric content is "-1". On a 250 page document (mailmerge page 1-250), anything works fine. At 350 pages or more, the whole thing crashes at Code:
c.Range.Text = "" Anyone with an idea on how to make it better or fix it? "Conditionally Shade Table Cells" trick doesn't work here, since the margins of some cells can't be set to zero. Code:
Sub grey() Application.ScreenUpdating = False Dim tbl As Table Dim c As Word.Cell For Each tbl In ActiveDocument.Tables For Each c In tbl.Range.Cells If Val(c.Range.Text) = -1 Then c.Shading.BackgroundPatternColor = wdColorGray10 c.Range.Text = "" End If Next Set c = Nothing Next Application.ScreenUpdating = True End Sub Lars-Daniel |
#2
|
||||
|
||||
You might try giving Word some breathing space for its own housekeeping:
Code:
Sub Grey() Application.ScreenUpdating = False Dim Tbl As Table, Cll As Cell, i As Long For Each Tbl In ActiveDocument.Tables For Each Cll In Tbl.Range.Cells i = i + 1: If i Mod 500 = 0 Then DoEvents With Cll If Split(.Range.Text, vbCr)(0) = "-1" Then .Shading.BackgroundPatternColor = wdColorGray10 .Range.Text = "" End If End With Next Next Set Cll = Nothing: Set Tbl = Nothing Application.ScreenUpdating = True End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#3
|
|||
|
|||
Thanks a lot ! It's still running - can't tell you about the result. But since it's still running, you seem to have solved the problem. Latest (and biggest) Intel i7 with latest Office still uses 1 core only, three cores (+ hyperthreading) are idling. I should better split it into single files and run in parallel
Do you suggest to set use .Range.Text to remove the value or shall I do it the "replace"-way? Code:
With ActiveDocument.Content.Find .Execute FindText:="-1", ReplaceWith:="", Format:=True, Replace:=wdReplaceAll, MatchWholeWord:=False End With Code:
ActiveDocument.UndoClear Oops, it doesn't work every time. I've got very much cells, which haven't get touched at all. |
#4
|
||||
|
||||
Quote:
Quote:
Split(.Range.Text, vbCr)(0) to: Trim(Split(.Range.Text, vbCr)(0))
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#5
|
|||
|
|||
Quote:
Quote:
Edit: Didn't work. I'm still having many "-1". I've changed it back to "Val(.Range.Text) = -1". This works safe in my case. |
#6
|
||||
|
||||
That would be of little or no benefit; the time taken to clear the buffer may actually slow down the process.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#7
|
|||
|
|||
Ah okay, same as unset($var) in PHP. Thanks a lot.
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Numbering with heading is mixed up in odd pages in regard to even pages | Baflla | Word | 0 | 09-11-2016 05:25 AM |
Multiple Master Pages dont sync with content pages | generatorjoe | Publisher | 0 | 07-28-2016 10:12 AM |
Spreadsheet keeps crashing | SavGDK | Excel | 8 | 06-28-2016 08:27 AM |
Office 2013 is crashing and renaming files when crashing | Brewski | Office | 1 | 09-21-2015 09:04 PM |
Advanced page numbering: section pages in header, document pages in footer | Albus | Word | 12 | 12-12-2014 01:36 PM |