In my line of work, I need to create documents that contain many tables. These tables must follow a rigid structure, including the requirement that no cell can be empty. (If a cell would otherwise be empty, it must contain the characters "N/A".)
To aid in working with this requirement for tables, I created a macro that examines the table for me and adds the N/A characters, where appropriate. All I need to do is place the insertion point within the target table, and then run this macro:
Sub AddTableNA() Dim NumRows As Integer Dim NumCols As Integer Dim J As Integer Dim K As Integer Dim ChkTxt As String If Not Selection.Information(wdWithInTable) Then Exit Sub End If NumRows = Selection.Tables(1).Rows.Count NumCols = Selection.Tables(1).Columns.Count 'Loop to select each row in the current table For J = 1 To NumRows 'Loop to select each cell in the current row For K = 1 To NumCols 'Select the cell to check Selection.Tables(1).Rows(J).Cells(K).Select 'Copy any text in the cell ChkTxt = Selection.Text 'Strip off the last 2 characters (removes end of cell marker) ChkTxt = Left(ChkTxt, Len(ChkTxt) - 2) 'If empty, add "n/a" text If (ChkTxt = "") Then Selection.TypeText ("N/A") Next K Next J End Sub
The macro first checks to see if the insertion point is within a table. If not, then the macro is exited early. If so, then the NumRows and NumCols variables are set to the number of rows and columns in the table, respectively.
The macro then steps through each cell of each row, determining if the cell contains anything. Because of the way that Word constructs tables, a cell will always contain something—the end-of-cell marker—even if nothing else is in it. The solution was to subtract two characters from the end of the text in the cell, and then see if anything was left. If not, then the characters "N/A" are typed into the cell.
Note:
WordTips is your source for cost-effective Microsoft Word training. (Microsoft Word is the most popular word processing software in the world.) This tip (13265) applies to Microsoft Word 2007, 2010, and 2013. You can find a version of this tip for the older menu interface of Word here: Putting Something in Every Cell of a Table.
Do More in Less Time! Are you ready to harness the full power of Word 2013 to create professional documents? In this comprehensive guide you'll learn the skills and techniques for efficiently building the documents you need for your professional and your personal life. Check out Word 2013 In Depth today!
Need to make a copy of every single table in a document? There's a quick and easy way to do it using the macro in this tip.
Discover MoreFor some programming needs, it is important to determine the index of an object within a collection of such objects. This ...
Discover MoreNeed to jump from one end of a table row to another? Word provides a couple of handy shortcuts that can make this type of ...
Discover MoreFREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."
2018-06-08 09:50:59
Paul Hanson
It would be beneficial if this macro looped through an open Word document and performed this action for each table contained within.
From https://www.techrepublic.com/article/pro-tip-ways-to-convert-word-tables-to-text/, I found this:
|
Sub ConvertAllTablesToText()
'Convert all the tables in current document to text.
Dim tbl As Table
For Each tbl In ActiveDocument.Tables
tbl.ConvertToText Separator:=wdSeparateByTabs
Next
End Sub
|
And then there's the code above:
|
Sub AddTableNA()
Dim NumRows As Integer
Dim NumCols As Integer
Dim J As Integer
Dim K As Integer
Dim ChkTxt As String
If Not Selection.Information(wdWithInTable) Then
Exit Sub
End If
NumRows = Selection.Tables(1).Rows.Count
NumCols = Selection.Tables(1).Columns.Count
'Loop to select each row in the current table
For J = 1 To NumRows
'Loop to select each cell in the current row
For K = 1 To NumCols
'Select the cell to check
Selection.Tables(1).Rows(J).Cells(K).Select
'Copy any text in the cell
ChkTxt = Selection.Text
'Strip off the last 2 characters (removes end of cell marker)
ChkTxt = Left(ChkTxt, Len(ChkTxt) - 2)
'If empty, add "n/a" text
If (ChkTxt = "") Then Selection.TypeText ("N/A")
Next K
Next J
End Sub
|
This code DOES NOT WORK!!!! but it's as close as I can get to better explain what I am envisioning SO IT NEEDS SOMEONE WHO CAN CODE VBA to look at it.
|
Sub CanWePutSomethingInEveryCellOfATable()
' Sub PutSomethingInEveryCellOfATable()
'Combine two macros:
' https://wordribbon.tips.net/T013265_Putting_Something_in_Every_Cell_of_a_Table.html
' https://www.techrepublic.com/article/pro-tip-ways-to-convert-word-tables-to-text/
Dim tbl As Table
Dim NumRows As Integer
Dim NumCols As Integer
Dim J As Integer
Dim K As Integer
Dim ChkTxt As String
For Each tbl In ActiveDocument.Tables
'Loop to select each row in the current table
For J = 1 To NumRows
'Loop to select each cell in the current row
For K = 1 To NumCols
'Select the cell to check
Selection.Tables(1).Rows(J).Cells(K).Select
'Copy any text in the cell
ChkTxt = Selection.Text
'Strip off the last 2 characters (removes end of cell marker)
ChkTxt = Left(ChkTxt, Len(ChkTxt) - 2)
'If empty, add "n/a" text
If (ChkTxt = "") Then Selection.TypeText ("N/A")
Next K
Next J
Next
End Sub
|
Again, the above code DOES NOT WORK!!!! but it's as close as I can get to better explain what I am envisioning SO IT NEEDS SOMEONE WHO CAN CODE VBA to look at it.
So.... help? <grin>
2018-06-07 15:47:34
Peter Kirkpatrick
Allen,
Out of curiosity, why strip TWO characters? Is there a danger of overwriting valid cell content?
Got a version of Word that uses the ribbon interface (Word 2007 or later)? This site is for you! If you use an earlier version of Word, visit our WordTips site focusing on the menu interface.
FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."
Copyright © 2019 Sharon Parq Associates, Inc.
Comments