![]() |
|
#1
|
|||
|
|||
|
Hello
I have a set of student grades in a spreadsheet. Not all students study the same subjects. I'd like to run a mail merge reports for individual students that removes the subjects (hence rows in a table) that aren't studied and keep those that are i.e. those with grades. See attachment. Apologies if there is already a thread - I found related ones but not a specific one. |
|
#2
|
||||
|
||||
|
Try adding the following macro to your mailmerge main document; when you click on Finish & Merge>Edit Individual Documents, the macro will automatically delete all table rows where the Grade is empty.
Code:
Sub MailMergeToDoc()
Application.ScreenUpdating = False
Dim Tbl As Table, r As Long
ActiveDocument.MailMerge.Execute
With ActiveDocument
For Each Tbl In .Tables
With Tbl
For r = .Rows.Count To 3 Step -1
With .Rows(r)
If Len(.Cells(2).Range.Text) = 2 Then .Delete
End With
Next
End With
Next
End With
Application.ScreenUpdating = False
End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#3
|
|||
|
|||
|
Thank you for taking the time to do this Paul. It's very much appreciated.
I shall give this a go. A quick question - will it work with more columns of data re: For r = .Rows.Count To 3 Step -1 if I had say six columns maybe - please excuse my VBA ignorance. Kind regards Julie |
|
#4
|
|||
|
|||
|
Paul
This is the Mail Merge Template.The table that needs to change with the macro is Unit 1 Assessment. All of the others are static. |
|
#5
|
||||
|
||||
|
Quote:
For r = .Rows.Count To 3 Step -1 refers to rows, not columns. As coded, the macro tests column 2 (via the .Cells(2) reference). Provided that column is empty, the row will be deleted; the number of columns (provided there are at least 2) is of no consequence.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#6
|
|||
|
|||
|
Paul, this code is magic. Just curious, can you think of any way to do the same thing for an email merge. Realize the macro as written works on the merged file as an individual document.
Appreciate any help you can offer as I have been looking for a solution to this challenge for quite a while! |
|
#7
|
||||
|
||||
|
Quote:
Depending on what you're doing and how your data are configured, though, you might be able to • use a DATABASE field. See, for example: Many to one email merge using tables - Microsoft Community ; or • use IF tests with multiple versions of the table embedded within. See, for example: https://www.msofficeforums.com/128352-post6.html
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#8
|
|||
|
|||
|
Thanks for the quick reply and great ideas, Paul! Is it possible to parse the Individual Documents into an email merge by adding the email address --a two step process?
|
|
#9
|
||||
|
||||
|
Mailmerge automation could be used to generate individual documents and send them as email attachments or as the email body. If that's what you're after, I suggest you start a new thread.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#10
|
|||
|
|||
|
Thanks so much for this. The macro works if there is only the table in question. I have more table above this where I won't need to apply this macro to tables above - is there a way I can only apply the macro to a specific table on word before mail merging?
|
|
#11
|
||||
|
||||
|
No, that's not possible, because the tables concerned don't exist in a populated form until after the merge has completed. Instead, the code could be re-written to process every nth table. For example:
Code:
Sub MailMergeToDoc()
Application.ScreenUpdating = False
Dim t As Long, r As Long
ActiveDocument.MailMerge.Execute
With ActiveDocument
For t = 1 To .Tables.Count Step 2
With .Tables(t)
For r = .Rows.Count To 3 Step -1
With .Rows(r)
If Len(.Cells(2).Range.Text) = 2 Then .Delete
End With
Next
End With
Next
End With
Application.ScreenUpdating = False
End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#12
|
|||
|
|||
|
Hi Please could someone help me re create this. I cannot get it to work?
|
|
#13
|
||||
|
||||
|
In what way can't you get it to work?
For PC macro installation & usage instructions, see: Installing Macros For Mac macro installation & usage instructions, see: Word:mac - Install a Macro
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#14
|
|||
|
|||
|
Quote:
Code:
Sub HideRowWhereSecondColumnBlank()
Dim Pwd As String
Dim oRow As Integer
Dim oTable As Table
Dim iTable As Table
Dim pState As Boolean
With ActiveDocument
pState = False
If .Tables.Count > 0 Then
For Each iTable In .Tables
If iTable.Tables.Count > 0 Then
For Each oTable In iTable.Tables
For oRow = oTable.Rows.Count To 1 Step -1
If Len(Replace(oTable.Cell(oRow, 2).Range.Text, Chr(13) & Chr(7), vbNullString)) = 0 Then
On Error Resume Next 'skip vertically merged cells
oTable.Rows(oRow).Delete
End If
Next oRow
Next oTable
End If
Next iTable
End If
If pState = True Then .Protect wdAllowOnlyFormFields, Noreset:=True, Password:=Pwd
pState = False
Pwd = ""
End With
End Sub
|
|
#15
|
||||
|
||||
|
That still doesn't tell me anything about your particular problem. In any event, the code you posted is overkill for a problem such as this - much of it is simply irrelevant. Did you actually add the macro in post #12 to your mailmerge main document?
I see you've now started a duplicate thread: https://www.msofficeforums.com/mail-...l-merging.html Kindly don't do that. In any event the problem as described there is quite different: it's not only column 2 that might be empty.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
How to remove almost a full page of blank space in between Word table rows
|
garrisonsdad | Word Tables | 4 | 10-18-2018 09:09 PM |
Mail merge: remove empty rows when a field is not showed
|
Yarikh | Mail Merge | 4 | 09-23-2018 12:17 AM |
Remove blank table rows AFTER mailmerge
|
Formd | Mail Merge | 5 | 05-11-2018 03:43 PM |
How to remove blank spaces between rows in a table,
|
Jamal NUMAN | Word | 2 | 04-28-2017 12:59 PM |
Mail merge into table with two colums and several rows
|
kathriiin | Mail Merge | 3 | 03-30-2015 07:06 AM |