• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Leggi altro.

Macro VBA per stampa automatica

3°minore

Utente Junior
Professione: disegnatore cad
Software: Inventor 2017, Autocad 2017, Vault Professional 2017
Regione: Veneto
#1
Buongiorno a tutti.

Lavoro con Inventor 2011;
sono in possesso di una macro VBA, presa da una discussione in questo forum e leggermente modificata, per la stampa automatica delle tavole dei sottogruppi .iam e delle loro singole parti .ipt, che compongono un file .iam.
Ho adesso l'esigenza di stampare esclusivamente le tavole associate ai sottogruppi .iam che appaiono in distinta componenti, escludendo quelle associate ai file .ipt e ai file .iam messi in riferimento.
Qualcuno sa suggerirmi se è possibile, e come, modificare la macro?

Copio e incollo:

Codice:
Function fileExists(fname) As Boolean
    If Dir(fname) <> "" Then fileExists = True Else fileExists = False
End Function

Public Sub Stampa_tutte_le_tavole_in_A4()

    Dim oAsmDoc As AssemblyDocument
    Set oAsmDoc = ThisApplication.ActiveDocument
    If ThisApplication.ActiveDocument.DocumentType <> kAssemblyDocumentObject Then
        MsgBox "This is NOT an assembly document!", vbExclamation
        Exit Sub
    End If

    Dim oPrintMgr As PrintManager
    Set oPrintMgr = ThisApplication.ActiveDocument.PrintManager
    If MsgBox("Usare la stampante di default """ & oPrintMgr.Printer & """  Vuoi continuare?", vbYesNo + vbQuestion) = vbNo Then
        Exit Sub
    End If

    Dim oDrgPrintMgr As DrawingPrintManager

    MsgBox "Stampante selezionata " & oPrintMgr.Printer & ", Stampare 1 copia, formato A4."

    dirpath = Left(oAsmDoc.FullFileName, Len(oAsmDoc.FullFileName) - Len(oAsmDoc.DisplayName))

    Dim oRefDocs As DocumentsEnumerator
    Set oRefDocs = oAsmDoc.AllReferencedDocuments
    Dim oRefDoc As Document
    numFiles = 0

    For Each oRefDoc In oRefDocs
        idwpathname = Left(oRefDoc.FullDocumentName, Len(oRefDoc.FullDocumentName) - 3) & "idw"
        If fileExists(idwpathname) Then
            numFiles = numFiles + 1
            'If numFiles = 10 Then Exit Sub
            Dim oDrawDoc As DrawingDocument
            Set oDrawDoc = ThisApplication.Documents.Open(idwpathname, True)
            oDrawDoc.Activate
            Set oDrawDoc = ThisApplication.ActiveDocument
            Set oDrgPrintMgr = oDrawDoc.PrintManager

            oDrgPrintMgr.AllColorsAsBlack = True
            oDrgPrintMgr.ScaleMode = kPrintBestFitScale
            Set oPrintMgr = ThisApplication.ActiveDocument.PrintManager

            ' Printer setup, default printer
            oPrintMgr.ColorMode = kPrintDefaultColorMode ' Set to default
            oPrintMgr.NumberOfCopies = 1 ' Set to print one copies.
            oPrintMgr.PaperSize = kPaperSizeA4 'Set the paper size.
            oPrintMgr.SubmitPrint ' Submit the print.
            oDrawDoc.Close (True)
        End If
    Next
    MsgBox numFiles & " file sono stati inviati alla stampante."
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#2
Alcune domande:
1) ad ogni tavola è collegato un solo assieme/parte?
2) l'assieme/parte viene impostata come a: riferimento nell'assieme dove viene inserita o b: in modo "assoluto", da Impostazioni Documento > Distinta componenti? O come mix delle due soluzioni?

Nel caso in cui 1) = vero e 2) = b: allora

dim oDoc as Document
' Si collega al primo documento in tavola (non controlla se la tavola è vuota)
Set oDoc = oDrawDoc.AllReferencedDocuments.Item(1)

if odoc.ComponentDefinition.BOMStructure <> kReferenceBOMStructure then
oPrintMgr.SubmitPrint ' Submit the print.
end if


Tutto questo sostituisce la riga
oPrintMgr.SubmitPrint ' Submit the print.

e dovrebbe andare (buttate giù le righe al volo senza testarle, tutto da migliorare ma per vedere se funziona è ok)

Se le condizioni di cui sopra non si verificano è un'altra storia, una di quelle che non si raccontano dopo le 16.30 del Venerdì...

Ciao!
 

3°minore

Utente Junior
Professione: disegnatore cad
Software: Inventor 2017, Autocad 2017, Vault Professional 2017
Regione: Veneto
#3
Alcune domande:
1) ad ogni tavola è collegato un solo assieme/parte?
2) l'assieme/parte viene impostata come a: riferimento nell'assieme dove viene inserita o b: in modo "assoluto", da Impostazioni Documento > Distinta componenti? O come mix delle due soluzioni?
1) si un solo collegamento
2) faccio tasto destro sulla parte nell'assieme generale; struttura distinta distinta componenti, riferimento.

Stasera non faccio a tempo, ma domani mattina faccio un tentativo con il tuo codice.
Grazie mille!
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#4
1) si un solo collegamento
2) faccio tasto destro sulla parte nell'assieme generale; struttura distinta distinta componenti, riferimento.

Stasera non faccio a tempo, ma domani mattina faccio un tentativo con il tuo codice.
Grazie mille!
Nel caso 2) purtroppo sono sicuro al 99% che non funziona... La macro che fa quello che chiedi è più complessa.