Writing a macro to change our drawing sheet template on alarge number of drawings. We wanted to automate some of the processwith a macro that is to be run by the operator after the drawing isloaded.
The macro uses "SetTemplateName" method to replace one custom sheetwith another. They are both custom sheets so i didn't have to worryabout the template index being changed.
Problem is after the macro runs the "Sheet properties" dialog showthe new template name in the file field but the sheet does notchange after a rebuild.
I think this is linked to when i change the template manually. Ireceive a dialog box saying "The current sheet format has notesthat have been modified. Do you want these deleted?" If I answerYes to this everything works (after a rebuild). If I answer no Iget a doubling up of the notes on the drawing sheet for the drawingtitles and copyright notice.
I think its the the API's handling of this dialog box that iscausing the problems?
Either way is there a way around this problem?
Code Below:
(Its not pretty and it has a bit of extra debugging stuff in therewhich was to get me back into the VB groove as I haven't used it inquite a while.)
'******************************************************************************
' Macro for changing the template for drawing sheets.
' Checks the number of sheets and sheets names.Gathers the sheetinfo from the
' Cycles through each sheet and replaces the sheet template withthe new template
' Currently has debugging info at teh start for file name etc...
' When finished working will include the following logic
' Check size of drawings sheet and use either A2 or A3 template.
'
'******************************************************************************
Option Explicit
' Drawing Paper Sizes
Public Enum swDwgPaperSizes_e
swDwgPaperAsize = 0
swDwgPaperAsizeVertical = 1
swDwgPaperBsize = 2
swDwgPaperCsize = 3
swDwgPaperDsize = 4
swDwgPaperEsize = 5
swDwgPaperA4size = 6
swDwgPaperA4sizeVertical = 7
swDwgPaperA3size = 8
swDwgPaperA2size = 9
swDwgPaperA1size = 10
swDwgPaperA0size = 11
swDwgPapersUserDefined = 12
End Enum
' Drawing Templates
Public Enum swDwgTemplates_e
swDwgTemplateAsize = 0
swDwgTemplateAsizeVertical = 1
swDwgTemplateBsize = 2
swDwgTemplateCsize = 3
swDwgTemplateDsize = 4
swDwgTemplateEsize = 5
swDwgTemplateA4size = 6
swDwgTemplateA4sizeVertical = 7
swDwgTemplateA3size = 8
swDwgTemplateA2size = 9
swDwgTemplateA1size = 10
swDwgTemplateA0size = 11
swDwgTemplateCustom = 12
swDwgTemplateNone = 13
End Enum
Sub main()
Dim swApp As Object
Dim swModel As Object
Dim swDraw As Object
Dim swSheet As Object
Dim bstatus As Boolean
Dim SheetCnt As Integer
Dim SheetNameArr As Variant
Dim SheetName As Variant
Dim TemplateName As Variant
Dim SheetProps As Variant
Dim A3Template As Variant
Dim A2Template As Variant
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
A3Template = "l:\solidworks\cm templates\cmp a3 - SALT LOGO.slddrt"'Set new templates to use
A2Template = "l:\solidworks\cm templates\cmp a2.slddrt"
SheetCnt = swModel.GetSheetCount() 'get number of sheets
SheetNameArr = swModel.GetSheetNames() 'get sheet names
Debug.Print "File = " & swModel.GetPathName 'filename
Debug.Print "Sheet Count = " & SheetCnt 'for number of sheets
For Each SheetName In SheetNameArr
' gather all the sheet information
Set swSheet = swDraw.GetCurrentSheet
TemplateName = swSheet.GetTemplateName 'get template name
Debug.Print " SheetName = " & SheetName 'print sheet names
Debug.Print " TemplateName = " & TemplateName 'print templatenames
bstatus = swModel.ActivateSheet(SheetName) 'activate sheet
SheetProps = swSheet.GetProperties() 'get sheet properties
' got all the info we need for the sheet
bstatus = swSheet.SetTemplateName(A3Template) 'Change to newtemplate
Next SheetName
End Sub
SolidworksApi macros
The macro uses "SetTemplateName" method to replace one custom sheetwith another. They are both custom sheets so i didn't have to worryabout the template index being changed.
Problem is after the macro runs the "Sheet properties" dialog showthe new template name in the file field but the sheet does notchange after a rebuild.
I think this is linked to when i change the template manually. Ireceive a dialog box saying "The current sheet format has notesthat have been modified. Do you want these deleted?" If I answerYes to this everything works (after a rebuild). If I answer no Iget a doubling up of the notes on the drawing sheet for the drawingtitles and copyright notice.
I think its the the API's handling of this dialog box that iscausing the problems?
Either way is there a way around this problem?
Code Below:
(Its not pretty and it has a bit of extra debugging stuff in therewhich was to get me back into the VB groove as I haven't used it inquite a while.)
'******************************************************************************
' Macro for changing the template for drawing sheets.
' Checks the number of sheets and sheets names.Gathers the sheetinfo from the
' Cycles through each sheet and replaces the sheet template withthe new template
' Currently has debugging info at teh start for file name etc...
' When finished working will include the following logic
' Check size of drawings sheet and use either A2 or A3 template.
'
'******************************************************************************
Option Explicit
' Drawing Paper Sizes
Public Enum swDwgPaperSizes_e
swDwgPaperAsize = 0
swDwgPaperAsizeVertical = 1
swDwgPaperBsize = 2
swDwgPaperCsize = 3
swDwgPaperDsize = 4
swDwgPaperEsize = 5
swDwgPaperA4size = 6
swDwgPaperA4sizeVertical = 7
swDwgPaperA3size = 8
swDwgPaperA2size = 9
swDwgPaperA1size = 10
swDwgPaperA0size = 11
swDwgPapersUserDefined = 12
End Enum
' Drawing Templates
Public Enum swDwgTemplates_e
swDwgTemplateAsize = 0
swDwgTemplateAsizeVertical = 1
swDwgTemplateBsize = 2
swDwgTemplateCsize = 3
swDwgTemplateDsize = 4
swDwgTemplateEsize = 5
swDwgTemplateA4size = 6
swDwgTemplateA4sizeVertical = 7
swDwgTemplateA3size = 8
swDwgTemplateA2size = 9
swDwgTemplateA1size = 10
swDwgTemplateA0size = 11
swDwgTemplateCustom = 12
swDwgTemplateNone = 13
End Enum
Sub main()
Dim swApp As Object
Dim swModel As Object
Dim swDraw As Object
Dim swSheet As Object
Dim bstatus As Boolean
Dim SheetCnt As Integer
Dim SheetNameArr As Variant
Dim SheetName As Variant
Dim TemplateName As Variant
Dim SheetProps As Variant
Dim A3Template As Variant
Dim A2Template As Variant
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
A3Template = "l:\solidworks\cm templates\cmp a3 - SALT LOGO.slddrt"'Set new templates to use
A2Template = "l:\solidworks\cm templates\cmp a2.slddrt"
SheetCnt = swModel.GetSheetCount() 'get number of sheets
SheetNameArr = swModel.GetSheetNames() 'get sheet names
Debug.Print "File = " & swModel.GetPathName 'filename
Debug.Print "Sheet Count = " & SheetCnt 'for number of sheets
For Each SheetName In SheetNameArr
' gather all the sheet information
Set swSheet = swDraw.GetCurrentSheet
TemplateName = swSheet.GetTemplateName 'get template name
Debug.Print " SheetName = " & SheetName 'print sheet names
Debug.Print " TemplateName = " & TemplateName 'print templatenames
bstatus = swModel.ActivateSheet(SheetName) 'activate sheet
SheetProps = swSheet.GetProperties() 'get sheet properties
' got all the info we need for the sheet
bstatus = swSheet.SetTemplateName(A3Template) 'Change to newtemplate
Next SheetName
End Sub
SolidworksApi macros