alxG88
Utente Junior
professione: Ingegnere Meccanico
software: SolidWorks, Solid Edge, Inventor, Autocad
regione: Emilia Romagna
Buongiorno a tutti,
Per facilitarmi nel mio lavoro sto scrivendo una serie di macro per Solid Edge che mi semplifichino le operazioni che svoglo più di frequente.
Il problema che voglio sottoporvi è il seguente: io sto cercando di scrivere una macro che individui tutti i DFT aperti e, per ognuno di essi, ne salvi una copia in formato PDF e una in formato DXF all'interno di una directory specifica.
Precedentemente avevo scritto una macro che eseguiva la stessa operazione con un DFT alla volta, ma adesso non riesco a estendere questo concetto anche a tutti i DFT aperti.
Vi posto il codice che ho scritto:
Come potete notare ho cercato di creare un ciclo Do...Loop Until in modo tale che lui vada a cercare di volta in volta i DFT aperti, ma non funziona: il risultato è che mi salva soltanto il primo DFT attivo e poi si interrompe, costringendomi a fare partire la macro nuovamente per ciascun file.
Mi sapreste aiutare? Dove sto sbagliando?
Grazie a tutti in anticipo
Alex
Per facilitarmi nel mio lavoro sto scrivendo una serie di macro per Solid Edge che mi semplifichino le operazioni che svoglo più di frequente.
Il problema che voglio sottoporvi è il seguente: io sto cercando di scrivere una macro che individui tutti i DFT aperti e, per ognuno di essi, ne salvi una copia in formato PDF e una in formato DXF all'interno di una directory specifica.
Precedentemente avevo scritto una macro che eseguiva la stessa operazione con un DFT alla volta, ma adesso non riesco a estendere questo concetto anche a tutti i DFT aperti.
Vi posto il codice che ho scritto:
Codice:
Module Module1
Dim objApp As SolidEdgeFramework.Application
Dim objDft As SolidEdgeDraft.DraftDocument
Dim filename As String
Dim pathname_1 As String
Dim pathname_2 As String
Sub Main()
On Error Resume Next
objApp = GetObject(, "SolidEdge.Application") ' Crea un'applicazione con determinate caratteristiche
If objApp Is Nothing Then
MsgBox("Solid Edge non è aperto! Aprire Solid Edge.", vbCritical, "Attenzione")
Exit Sub
End If
If objApp.ActiveDocumentType <> SolidEdgeFramework.DocumentTypeConstants.igDraftDocument Then
MsgBox("Nessun documento DRAFT aperto! Aprire un DRAFT.", vbInformation, "Attenzione")
Exit Sub
End If
objDft = objApp.ActiveDocument
If objDft Is Nothing Then
MsgBox("Nessun documento aperto!", vbInformation, "Attenzione")
Exit Sub
End If
Do 'Esegue il ciclo fintanto che ci sono DRAFT aperti
Call objDft.Save() ' Messo prima del nome, per i file nuovi viene correttamente chiesto di dare il nome
filename = Left(objDft.Name, Len(objDft.Name) - 4) ' Ricava solo il nome file
pathname_1 = "S:\ug\dxf\" ' percorso file dxf
pathname_2 = "S:\ug\dati\" ' percorso file pdf
objApp.DisplayAlerts = False 'Sovrascrive in automatico i file con lo stesso nome senza chiedere
Call objDft.SaveAs(pathname_1 + filename + "." + "dxf") ' salva con nome
Call objDft.SaveAs(pathname_2 + filename + "." + "pdf") ' salva con nome
objApp.DisplayAlerts = True 'Riattiva i messaggi di allerta di Windows
Call objDft.Close() 'Chiude il file DRAFT di cui ha appena creato pdf e dxf
objDft = Nothing
objApp = Nothing
Loop Until objApp.ActiveDocumentType <> SolidEdgeFramework.DocumentTypeConstants.igDraftDocument
End Sub
End Module
Come potete notare ho cercato di creare un ciclo Do...Loop Until in modo tale che lui vada a cercare di volta in volta i DFT aperti, ma non funziona: il risultato è che mi salva soltanto il primo DFT attivo e poi si interrompe, costringendomi a fare partire la macro nuovamente per ciascun file.
Mi sapreste aiutare? Dove sto sbagliando?
Grazie a tutti in anticipo
Alex