![]() |
|
|
|
#1
|
|||
|
|||
|
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 |