#1
|
|||
|
|||
Applying a VBA code only on a selected table
Hello,
I was made this macro to format a selected table Code:
Sub FormatTable() ' On Error GoTo ErrMsg Selection.Tables(1).Select With Selection.Tables(1) With .Borders(wdBorderLeft) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderRight) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderTop) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderBottom) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderHorizontal) .LineStyle = wdLineStyleSingle .LineWidth = wdLineWidth050pt .Color = wdColorAutomatic End With With .Borders(wdBorderVertical) .LineStyle = wdLineStyleSingle .LineWidth = wdLineWidth050pt .Color = wdColorAutomatic End With .Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone .Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone .Borders.Shadow = False End With With Options .DefaultBorderLineStyle = wdLineStyleSingle .DefaultBorderLineWidth = wdLineWidth050pt .DefaultBorderColor = wdColorAutomatic End With Selection.Font.Bold = wdToggle Selection.Font.BoldBi = wdToggle Selection.Font.Size = 14 Selection.Font.Name = "Times New Roman" ErrMsg: MsgBox "Select a Table Firstly", vbCritical End Sub I used if conditions like, if Activedocument.Selection.Tables = 1 then my macro else error message but it fails. In summary, I want to apply a macro to a selected table only Thanks a lot. |
#2
|
||||
|
||||
You need to exit the sub before the error message, or forget the error message and make sure it doesn't appear e.g.
Code:
Sub FormatTable() If Selection.Information(wdWithInTable) = True Then Selection.Tables(1).Select With Selection.Tables(1) With .Borders(wdBorderLeft) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderRight) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderTop) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderBottom) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderHorizontal) .LineStyle = wdLineStyleSingle .LineWidth = wdLineWidth050pt .Color = wdColorAutomatic End With With .Borders(wdBorderVertical) .LineStyle = wdLineStyleSingle .LineWidth = wdLineWidth050pt .Color = wdColorAutomatic End With .Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone .Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone .Borders.Shadow = False End With With Options .DefaultBorderLineStyle = wdLineStyleSingle .DefaultBorderLineWidth = wdLineWidth050pt .DefaultBorderColor = wdColorAutomatic End With Selection.Font.Bold = True Selection.Font.BoldBi = True Selection.Font.Size = 14 Selection.Font.Name = "Times New Roman" Else MsgBox "Select a Table First", vbCritical End If End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
#3
|
|||
|
|||
Thank you very much
Just to learn and according to your instructions, the code will be Code:
Sub FormatTable() ' On Error GoTo ErrMsg Selection.Tables(1).Select With Selection.Tables(1) With .Borders(wdBorderLeft) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderRight) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderTop) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderBottom) .LineStyle = wdLineStyleThinThickSmallGap .LineWidth = wdLineWidth300pt .Color = wdColorAutomatic End With With .Borders(wdBorderHorizontal) .LineStyle = wdLineStyleSingle .LineWidth = wdLineWidth050pt .Color = wdColorAutomatic End With With .Borders(wdBorderVertical) .LineStyle = wdLineStyleSingle .LineWidth = wdLineWidth050pt .Color = wdColorAutomatic End With .Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone .Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone .Borders.Shadow = False End With With Options .DefaultBorderLineStyle = wdLineStyleSingle .DefaultBorderLineWidth = wdLineWidth050pt .DefaultBorderColor = wdColorAutomatic End With Selection.Font.Bold = wdToggle Selection.Font.BoldBi = wdToggle Selection.Font.Size = 14 Selection.Font.Name = "Times New Roman" Exit Sub ErrMsg: MsgBox "Select a Table Firstly", vbCritical End Sub |
#4
|
||||
|
||||
That should work, but it is better that the error doesn't occur in the first place.
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
#5
|
||||
|
||||
I would write it so it can do zero to n selected tables without needing to handle errors
Code:
Dim aTbl as Table For each aTbl in Selection.Range.Tables With aTbl.Borders(wdBorderLeft) .... End With Next aTbl
__________________
Andrew Lockton Chrysalis Design, Melbourne Australia |
#6
|
|||
|
|||
Graham and Andrew
Thanks with my love |
Tags |
word table, word vba, word vba code |
Thread Tools | |
Display Modes | |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Applying a VBA code only on a selected text or range | RobertDany | Word VBA | 2 | 10-09-2021 08:31 AM |
Run code if selected cell is in column | Javi78503 | Word VBA | 0 | 09-21-2021 12:31 PM |
Applying a style to a table row pops out the row | mazloum91 | Word Tables | 2 | 06-29-2021 07:21 AM |
run code only when certain cells selected | trevorc | Excel | 2 | 06-19-2018 02:40 AM |
After applying a title style, the row in a table doesn't break | Salix | Word | 6 | 05-05-2016 12:48 PM |