I have a series of drawings which need to be released to the factory on a standard company title block, and also published to a spare parts manual on a spare parts specific title block. The drawings are exactly the same in both instances, except for the title block. I have tried to create a macro to do this for me, however I am not having much luck. I begin recording the macro and do the following steps:
right-click in a blank area in the drawing sheet
select 'Properties' from the menu
select alternative sheet format
click 'OK' to accept the change
stop recording
When i go to run the macro i get a run-time 450 message, saying wrong number of argument or invalid property assignment. Can anyone suggest anything or any existing macros to do the same thing? Any help would be much appreciated
Hi Matt, thanks for the reply. i thought it would have been too complex for the recorder to handle, but thought i'd give it a go. I am basically a beginner to VBA. The code i got when i recorded the macro is as follows:
'
****************************************************************************** ' C:\DOCUME~1\robryan\LOCALS~1\Temp\swx2688\Macro1.swb - macro recorded on 07/23/07 by robryan '
****************************************************************************** Dim swApp As Object Dim Part As Object Dim SelMgr As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim Feature As Object Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc Set SelMgr = Part.SelectionManager boolstatus = Part.Extension.SelectByID2("Model", "SHEET",
One of my coworkers made a similar macro. I don't have it with me, but I remember he had an issues with it. When you record the macro, the call setting the sheet format has an extra argument that won't play back. It's the argument telling the sheet format to be visible, the last argument in the call. If you delete that one, then the macro will run, but it will have the sheet format turned off. You'll need to add an extra command to turn the sheet format back on.
Hi Eman, thanks for the link. It sounds like that would be ideal if i were able to get it working properly, however i have a very limited experience with macros. i thought i followed the instructions fairly well, but still had an error message come up. i keep getting msgtext(3) appear "***ERROR: Can't set new sheetformat. Sheetformat file exists?" i changed the path and also added in the sheetformat names that currently exist. am a bit lost. attached is the code:
'
********************************************************************** ' * PLEASE change the path/filename for the sheet templates (see below) '
********************************************************************** ' * Macro changes the sheetformat (=3D the "paper" of your drawing) for ' * all sheets of the active drawing. You have to adjust the path and ' * the file names to the new sheet formats. After successfully changing ' * the sheetformat the drawing is saved with its current name. ' * ATTENTION: you CAN'T change the drawing template, this is not ' * possible. So with this macro you can't update document properties. ' * All sheet formats will be "userdefinied" after updating with this ' * macro. If you want to have the "standard" A-A0 formats and not ' * userdefinied you have to change the macro accordingly or use its ' * "compagnion" which reloads a standard sheettemplate ' * ' * This macro is intended to be used with PAC4SWX for batch reloading ' * of sheetformats, in case you changed you sheetformat with a new ' * company logo, new title block layout or similar. But it will also ' * word if fired from the GUI (taskplaner not tested, but should work; ' * but I would like to see you using PAC4SWX instead of taskplaner ;-)) ' * ' * PAC4SWX -
Dim msgtext(6) As String ' some texts for multi-language support
Sub main()
Dim sheetformatpath(12) As String Dim sheetformatdir As String
' choose active language CheckLanguage
' ************ EDIT path and file name HERE
************************
' After editing the sheetformats delete the next line or comment it 'If MsgBox(msgtext(6), vbOKOnly, "Please Edit Macro") =3D vbOK Then End
' Path to directory with sheetformats sheetformatdir =3D "U:\SOLIDWORKS\SOLIDWORKS ADMIN\TEREX-Templates"
' path to the various sheet formats from A to A0, you may also use ' full pathnames, but if they are all in the same subdir it's easier this way sheetformatpath(0) =3D sheetformatdir & "A4 - TEREX.slddrt" sheetformatpath(1) =3D sheetformatdir & "A4 - SPARE.slddrt" sheetformatpath(2) =3D sheetformatdir & "A3 - TEREX.slddrt" 'sheetformatpath(3) =3D sheetformatdir & "temp_c.slddrt" 'sheetformatpath(4) =3D sheetformatdir & "temp_d.slddrt" 'sheetformatpath(5) =3D sheetformatdir & "temp_e.slddrt" 'sheetformatpath(6) =3D sheetformatdir & "temp_a4.slddrt" 'sheetformatpath(7) =3D sheetformatdir & "temp_a4v.slddrt" 'sheetformatpath(8) =3D sheetformatdir & "temp_a3.slddrt" 'sheetformatpath(9) =3D sheetformatdir & "temp_a2.slddrt" 'sheetformatpath(10) =3D sheetformatdir & "temp_a1.slddrt" 'sheetformatpath(11) =3D sheetformatdir & "temp_a0.slddrt" ' already user defined sheetformatpath(12) =3D sheetformatdir & "A4 - BLANK.slddrt"
' ************************* EDIT END
*******************************
' zun=E4chst mal ein paar Deklarartionen die gebraucht werden Dim SwApp As Object Dim DrawingDoc As Object Dim Sheet As Object
Dim Titel As String Dim Datei As String Dim temp As String Dim pfad As String Dim msgtxt As String
Dim Name As String Dim paperSize As Long Dim templateIn As Long Dim scale1 As Double Dim scale2 As Double Dim firstAngle As Boolean Dim templateName As String Dim Width As Double Dim Height As Double Dim propertyViewName As String
Dim i As Long Dim AnzahlBl As Long Dim SheetNames As Variant Dim SheetProperties As Variant
' attach to SolidWorks Set SwApp =3D CreateObject("SldWorks.Application")
Set DrawingDoc =3D SwApp.ActiveDoc
If DrawingDoc Is Nothing Then ' check if document is open MsgBox msgtext(0) Exit Sub End If
If (DrawingDoc.GetType swDocDRAWING) Then ' check if document is a drawing MsgBox msgtext(1) Exit Sub End If
' get sheet count and traverse all sheets to reload sheetformat ' AnzahlBl =3D DrawingDoc.GetSheetCount SheetNames =3D DrawingDoc.GetSheetNames
' reset error messages msgtxt =3D ""
For i =3D 0 To AnzahlBl - 1 ' activate next sheet If DrawingDoc.ActivateSheet(SheetNames(i)) Then ' attach to sheet object Set Sheet =3D DrawingDoc.GetCurrentSheet SheetProperties =3D Sheet.GetProperties
' first we have to set the sheet to use "no sheetformat", for SolidWorks ' wont reload a sheetformat if it is the same name as before Name =3D Sheet.GetName paperSize =3D SheetProperties(0) ' set NO SHEETFORMAT templateIn =3D swDwgTemplateNone scale1 =3D SheetProperties(2) scale2 =3D SheetProperties(3) firstAngle =3D CBool(SheetProperties(4)) ' no sheetformat =3D no path templateName =3D "" ' but we need the sheet size Width =3D SheetProperties(5) Height =3D SheetProperties(6) propertyViewName =3D Sheet.CustomPropertyView
' and now we set the new sheetformat; it is necessary to set ' USER DEFINED sheetformat for SolidWorks will look for the ' standard templates temp_??.slddrt in your spefified folder ' if using the standard sheet sizes. templateIn =3D swDwgTemplateCustom
' get correct sheetformat for this size depending on the ' papersize, this will allow aleady userdefined sheetformats ' to properly be reloaded paperSize =3D GetSheetSizeFromPaperSize(Width, Height) templateName =3D sheetformatpath(paperSize)
' everything worked fine, no message here for automation
' save the document without backup If DrawingDoc.Save2(True) > 0 Then ' error saving file msgtxt =3D msgtxt & msgtext(5) & vbCrLf End If
End If
End If Else msgtxt =3D msgtxt & msgtext(4) & Name & vbCrLf End If Next i
' und noch die Zusammenfassung =FCbers Speichern ausgeben If Len(msgtxt) Then MsgBox msgtxt End If
End Sub
Private Sub CheckLanguage()
' check which language to apply. To make another language ' copy one of the CASE fileds and make your changes '
Set SwApp =3D CreateObject("SldWorks.Application") ' set by Sub main() Select Case SwApp.GetCurrentLanguage Case "german" msgtext(0) =3D "Kein Dokument offen, was sollte ich denn wohl tun?" msgtext(1) =3D "Nur sinnvoll bei Zeichnungen" msgtext(2) =3D "*** FEHLER: konnte Blatt nicht zur=FCcksetzen " msgtext(3) =3D "*** FEHLER: konnte Blatt nicht auf neuen Vordruck setzen. Vordruck vorhanden? " msgtext(4) =3D "*** FEHLER: konnte Blatt nicht aktivieren " msgtext(5) =3D "*** FEHLER: konnte Dokument nicht speichern " msgtext(6) =3D "Bitte erst das Makro anpassen, dazu auf Extras/ Makros/Editieren klicken" ' Case "english" ' english is default, so change there ' Case "spanish" ' Case "french" ' Case "italian" ' Case "japanese" Case Else ' english is default msgtext(0) =3D "Nothing opened, so what should I look at?" msgtext(1) =3D "Only useful with drawing" msgtext(2) =3D "*** ERROR: can't reset sheet " msgtext(3) =3D "*** ERROR: can't set new sheetformat for drawing. Sheetformat file exists? " msgtext(4) =3D "*** ERROR: cant activate sheet " msgtext(5) =3D "*** ERROR: cant save document " msgtext(6) =3D "Please edit macro first (Extras/Macros/Edit)" End Select
End Sub
Function GetSheetSizeFromPaperSize(SheetWidth, SheetHeight) ' Function returns the SheetSize constant based on the width and heigth ' useful for userdefined sheetformats
PolyTech Forum website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.