Pagina 9 di 9 PrimaPrima ... 789
Risultati da 81 a 87 di 87

Discussione: [MACRO] - Apri DFT

  1. #81
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    952
    Professione
    disegnatore
    Regione
    Romagna
    Software
    Solid Edge

    Predefinito

    La cosa più probabile è che hai messo un "On Error Resume ..." per ignorare gli errori, poi durante la iterazione "For" la riga "Set objProps =..." a volte non funziona ('.OccurrenceDocument' e '.Properties("Custom")' siamo sicuri che esistano sempre? no).
    rev potrebbe rimanere "vecchio" e per questo "non corrisponde a niente".
    Tratti in maniera molto diversa name e rev anche se in alcuni casi devono comportarsi in modo simile. Di per sè non è sbagliato, soltanto che in caso di eccezioni (e con il controllo errori non gestito) diventa complicato immaginarsi cosa viene letto bene e cosa rimane indietro, e perché.

    Devi decidere se revisionare tutto oppure se limitarti ad aggiungere:
    Codice:
    If name = "" Then 
     name = objAsm.SelectSet(i).object.OccurrenceDocument.FullName
     rev  = objAsm.SelectSet(i).object.OccurrenceDocument.Properties("Custom").Item("Rev.").Value   ' che non è detto che restituisca sempre un valore valido
    End If
    in fondo
    Codice:
    name = ""
    rev = ""
    Se invece decidi di cambiare approccio, ti suggerisco in improntare il codice così:
    Codice:
    ' Esempio di iterazione degli oggetti selezionati in ambiente Assembly
    Sub Main()
    	Dim objApp As SolidEdgeFramework.Application
    	Dim objDoc As solidedgeAssembly.AssemblyDocument
    
    	Dim objSel As SolidEdgeFramework.SelectSet
    	Dim objComp As solidedgeAssembly.Occurrence
    
    	
    	Title = "Il mio programma"
    
    	Set objApp = GetObject(, "SolidEdge.Application")
    	objApp.Visible = True
    	If Err Then
    		Err.Clear
    		MsgBox "Prima apri solid edge!!!" , vbOKOnly, Title
    	Else
    		Set objDoc = objApp.ActiveDocument
    
    		' Get the active Selection
    		Set objSel = objApp.ActiveSelectSet
    		If objSel.Count < 1 Then
    			MsgBox "Prima di lanciare la macro, Selezionare almeno un componente" , vbOKOnly, Title
    		Else
    			For Each objComp In objSel
    				' per ogni componente nella selezione (il set dell'oggetto viene fatto automaticamente)
                                MsgBox(objComp.PartFileName)
                                ' .... objComp.OccurrenceDocument
    			Next
    		End If
    	End If
    End Sub

  2. #82
    Utente Standard
    Iscritto dal
    2013
    Messaggi
    135
    Professione
    Progettista
    Regione
    Marche
    Software
    Solid Edge ST8

    Predefinito

    Innanzitutto grazie per la risposta.

    Citazione Originariamente Scritto da vespa_83 Visualizza Messaggio
    La cosa più probabile è che hai messo un "On Error Resume ..." per ignorare gli errori, poi durante la iterazione "For" la riga "Set objProps =..." a volte non funziona ('.OccurrenceDocument' e '.Properties("Custom")' siamo sicuri che esistano sempre? no).
    Non credo che il problema sia sul trattamento degli errori perché la macro funziona, non è che si interrompa; solo che quando lavori su assiemi multilivello non sempre ti apre il draft giusto.

    Citazione Originariamente Scritto da vespa_83 Visualizza Messaggio
    Tratti in maniera molto diversa name e rev
    Sì, è vero, me ne sono reso conto. È che in realtà io sono partito dal listato di BoE senza capire a pieno tutto e/o mettere in discussione; ho preso quello, ho eliminato le parti della proprietà "draftlink", ho aggiunto le parti della proprietà "rev" in modo analogo a come venivano trattate quelle della "draftlink", e ho rivisto la formula di generazione del path completo del file da aprire.
    Questo per lo meno nelle intenzioni.

    Quello che noto da quello che scrivi è che dopo l'istruzione "objAsm.SelectSet(i)" tu metti sempre un ".object" che invece nella seconda riga della parte di codice che ho riportato io non c'è. Che possa essere questo il problema?
    D'altra parte perché negli assiemi multilivello la macro funziona sempre correttamente?

    Un'altra cosa: l'ultimo listato che mi hai messo a cosa serve? A capire nei vari casi cosa Solid Edge va a leggere? È una macro per il debug dell'altra?

    Ciao

  3. #83
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    952
    Professione
    disegnatore
    Regione
    Romagna
    Software
    Solid Edge

    Predefinito

    1. Ti funziona senza errori perchè prima di queste istruzioni hai un "On Error Resume Next" che significa: "in caso di errore, ignora e prosegui con la prossima istruzione". Ok, la macro gira, ma in caso di problemi il codice come si deve comportare? infatta hai trovato dei comportamenti inspiegabili.

    2. " .object " l'ho copiato dal tuo, ovvero è un refuso del codice originale, bisognerebbe indagare sul cosa serve, forse dice di trattare l'oggetto come oggetto generico, boh è nuovo per me. Se c'era, male non farà.

    3. Ti ho riportato un esempio nel caso uno volesse riscrivere un po' tutto da zero, ma nel tuo caso ti interessa la porzione da "For Each objComp In objSel" a "Next"

    ci dò una occhiata poi ti rispondo come la si potrebbe modificare, ciao.

  4. #84
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    952
    Professione
    disegnatore
    Regione
    Romagna
    Software
    Solid Edge

    Predefinito

    Per ApeGana:
    fai un backup del tuo codice, poi prova a sostituire così il tuo "FOR ... NEXT":
    Codice:
    Dim objComp As solidedgeAssembly.Occurrence
    
    ' ripristina il controllo degli errori
    On Errore Goto 0
    
    ' per ogni componente nella selezione (il set dell'oggetto viene fatto automaticamente)
    For Each objComp In objSel
    	Set objProps = objComp.OccurrenceDocument.Properties("Custom")
    	
    	name = ""
    	name = objComp.OccurrenceFileName ' originale: objProps.Item("DraftLink").Value
    	If name = "" Then name = objComp.OccurrenceDocument.FullName
    	
    	rev = ""
    	rev = objProps.Item("Rev.").Value
    	If rev = "" Then rev = "01"
    	
    	l = Len(name)
    	' attenzione: non è bene impostare una lunghezza fissa del nome file.
    	' Ape_Gana: dftname = Mid(name, 1, InStrRev(name, "\") + 6) & " " & rev & ".dft"
    	dftname = Left(name, l - 4) & " " & rev & ".dft"
    	If file_exist(dftname) Then
    		objDft = objApp.Documents.Open(dftname)
    		objDft.InactiveDrawingViewMode = false ' stato
    	End If
    Next
    Note:
    A. ho inserito il rispristino ERRORI: On Errore Goto 0 , se ti da noie inutili, commentalo.
    B. in caso nel Componente non esista la scheda "Custom" (Proprietà Personalizzate), oppure la proprietà "Rev."), si avrà rev="" , quindi verrà inserito un valore di default: rev="01". Adattata questo valore alla tua realtà (0, 1, A, ....)
    C. ho cambiato una tua riga con: dftname = Left(name, l - 4) & " " & rev & ".dft"
    dove era 3 ho messo 4 per tagliare il punto: "dft" -> ".dft"
    D. non posso provare il codice ma dovrebbe andare. Buona fortuna

  5. #85
    Utente Standard
    Iscritto dal
    2013
    Messaggi
    135
    Professione
    Progettista
    Regione
    Marche
    Software
    Solid Edge ST8

    Predefinito

    per Vespa:
    per il momento ti ringrazio molto; appena riesco provo e poi ti faccio sapere.

  6. #86
    Utente Standard
    Iscritto dal
    2013
    Messaggi
    135
    Professione
    Progettista
    Regione
    Marche
    Software
    Solid Edge ST8

    Predefinito

    Ho risolto!!!
    Era quel maledetto .object che mancava. In pratica ho corretto la riga così
    Codice:
    Set objProps = objAsm.SelectSet(i).object.OccurrenceDocument.Properties("Custom")
    e adesso funziona.

    Scusa Vespa se ti ho fatto perder tempo, di questa stranezza mi ero già accorto, ma sono talmente fesso ed inesperto che continuavo a fare modifiche in Notepad++ senza rendermi conto che non le stavo salvando... vabè, meglio tacere!

    Per BeOnEdge: io sono partito dal tuo listato, forse anche te succede qualcosa di strano negli assiemi multipli....

  7. #87
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    952
    Professione
    disegnatore
    Regione
    Romagna
    Software
    Solid Edge

    Predefinito

    Macro Apri_Draft.vbs (formato aperto)
    Questa versione non è ufficiale ed è parallela alla ufficiale di Be_on_edge.

    Funzione aggiuntiva: in Draft apre i Draft dei Pallini selezionati (per viste aggiornate)

    minor bug fixed for sub-asm.

    (invito il Moderatore a cancellare i miei messaggi in questo thread dal 10-dic al 07-gen compresi )
    File Allegati File Allegati


  • Pagina 9 di 9 PrimaPrima ... 789

    Discussioni Simili

    1. Macro x PDF
      Di BOSCO '71 nel forum Solid Edge
      Risposte: 93
      Ultimo Messaggio: 05-09-2017, 16: 07
    2. Macro (VBA) e BOM
      Di Avoplus nel forum Inventor
      Risposte: 0
      Ultimo Messaggio: 08-03-2010, 23: 32
    3. Apri dft "avanzato"
      Di ipotemusa nel forum Solid Edge
      Risposte: 1
      Ultimo Messaggio: 30-11-2009, 19: 33
    4. Macro ???
      Di BOSCO '71 nel forum Solid Edge
      Risposte: 12
      Ultimo Messaggio: 28-08-2009, 23: 42
    5. Apri IME
      Di lostico nel forum NX (Unigraphics)
      Risposte: 0
      Ultimo Messaggio: 28-04-2008, 16: 03

    Segnalibri

    Segnalibri

    Permessi di Scrittura

    • Tu non puoi inviare nuove discussioni
    • Tu non puoi inviare risposte
    • Tu non puoi inviare allegati
    • Tu non puoi modificare i tuoi messaggi
    •  





    CAD3D.it - la community dei progettisti