| Autore |  Discussione  |  | 
              
                | asetechNuovo Utente
 
 
 
                
   6 Messaggi
 | 
                    
                      |  Inserito il - 23/09/2009 :  16:06:36       
 |  
           	| Salve Il mio problema e quello di capire quali sono i comandi in vba per creare una macro che mi trovi un determinato blocco (Freccia) all'interno di un layer che corrisponde al nome di ricerca che gli inserisco io tramite un messagBox e che mi restituisca i parametri che contiene all'interno e che questi testi e i valori me li scriva in un determinato posto (Le coordinate di dove scrivere il risultato sono contenute all'interno del blocco.
 Es. Blocco
 Parametri contenuti all'interno
 - Nome
 - Pagina
 - Riga
 
 Grazie
 |  | 
              
                | adminAmministratore
 
   
 
 
 
                Regione: Veneto
 Prov.: TV
 Città: Treviso
 
 
   188 Messaggi
 | 
                    
                      |  Inserito il - 23/09/2009 :  20:14:51         
 |  
                      | Ciao, ma conosci VBA o non l'hai mai usato, tanto per capire da che punto aiutarti.
 |  
                      |  |  | 
              
                | asetechNuovo Utente
 
 
 
                 
               
   6 Messaggi
 | 
                    
                      |  Inserito il - 24/09/2009 :  12:47:46       
 |  
                      | Si lo conosco non sono una cima. Il mio problema è quello di conoscere le funzioni relativi ad autocad quelle di vba le conosco.
 Mi aiuterebbe molto anche degli esempi.
 Grazie
 |  
                      |  |  | 
              
                | adminAmministratore
 
   
 
 
 
                Regione: Veneto
 Prov.: TV
 Città: Treviso
 
 
   188 Messaggi
 | 
                    
                      |  Inserito il - 29/09/2009 :  13:56:11         
 |  
                      | Intanto ti copio un'email che mi ha mandato qualcuno per fare il filtro di ricerca per il singolo blocco e anche del layer. Dall'esempio quì sotto togli quello che non ti interessa e aggiungi quello relativo al nome del blocco (il codice per i blocchi è il 2 come in autolisp).
 Premetto che questo esempio non l'ho mai provato. Intanto ti mando questo, poi magari da questo prendiamo spunto se ti serve.
 
 'Definiamo il set di selezione, dicendo che scegliamo tutti gli oggetti che rispettano le seguenti condizioni:
 '1) sono sul layer MioLayer
 '2) sono del colore DaLayer
 '3) contengono all'interno la stringa definita in Criterio
 ' da notare l'uso dei caratteri jolly, che dicono che la stringa contenuta in criterio può essere preceduta
 ' da qualsiasi stringa (*) e susseguita da qualsiasi stringa (*)
 '4) sono o oggetti TEXT o MTEXT
 ' da notare l'uso della notazione polacca inversa per la creazione delle sequenze di filtri.
 FilterType(0) = -4
 FilterData(0) = "FilterType(1) = 8
 FilterData(1) = "MIOLAYER"
 FIlterType(2) = 62
 FilterData(2) = 256 'colore DaLayer
 ' Ora inseriamo il criterio di ricerca
 FilterType(3) = 1
 FilterData(3) = "*" & Criterio & "*"
 FilterType(4) = -4
 FilterData(4) = "FilterType(5) = 0
 FilterData(5) = "TEXT"
 FilterType(6) = 0
 FilterData(6) = "MTEXT"
 FIlterType(7) = -4
 FilterData(7) = "OR>"
 FilterType(8) = -4
 FilterType(8) = "AND>"
 
 ' Qui andiamo a selezionare tutti gli oggetti del disegno (acSelectionSelAll) che rispettano le condizioni
 SetDiSelezione.Select acSelectionSetAll, , , FilterType, FilterData
 
 For Each Testo In SetDiSelezione
 ' Esegui le istruzioni sui testi che corrispondono ai criteri.
 Next
 |  
                      |  |  | 
              
                | adminAmministratore
 
   
 
 
 
                Regione: Veneto
 Prov.: TV
 Città: Treviso
 
 
   188 Messaggi
 | 
                    
                      |  Inserito il - 30/09/2009 :  14:13:57         
 |  
                      | Riciao, questo è un piccolo esempio di ricerca di un blocco di nome NEWCART.
 con 0 e "INSERT" definisci un filtro di ricerca di soli blocchi
 con 2 e "NEWCART" aggiungo al filtro di ricerca il nome del blocco
 "SelectOnScreen" vai a selezionare gli oggetti visivi.
 credo però che se ti serve filtrare quel X blocco su tutto il disegno e quindi anche dei layer congelati, credo che questo metodo non funzioni. Devo verificare anch'io perchè è una cosa che servirebbe pure a me.
 
 Dim sstext As AcadSelectionSet
 Dim FilterType(1) As Integer
 Dim FilterData(1) As Variant
 Set sstext = ThisDrawing.SelectionSets.Add("SS8")
 
 FilterType(0) = 0
 FilterData(0) = "INSERT"
 FilterType(1) = 2
 FilterData(1) = "NEWCART"
 
 sstext.SelectOnScreen FilterType, FilterData
 
 Poi dal gruppo di selezione "sstext" si comincia a fare le proprie verifiche come ricavare i dati che ti interessano.
 Ciao!
 |  
                      |  |  | 
              
                | asetechNuovo Utente
 
 
 
                 
               
   6 Messaggi
 | 
                    
                      |  Inserito il - 09/10/2009 :  15:49:41       
 |  
                      | Ciao Grazie degli esempi ma se ho capito bene questi servono per trovare dei blocchi o per filtrarli
 Domanda che cosa e "SS8"
 |  
                      |  |  | 
              
                | adminAmministratore
 
   
 
 
 
                Regione: Veneto
 Prov.: TV
 Città: Treviso
 
 
   188 Messaggi
 | 
                    
                      |  Inserito il - 09/10/2009 :  19:14:38         
 |  
                      | Ma siccome tu devi trovare un solo blocco con questo filtro dovrebbe selezionarti solo quelli, quindi alla fine si fare un for o un while dove all'interno andrai a trovarti le proprietà o quello che vuoi dei blocchi (nel tuo caso i valori di alcuni attributi se non erro). SS8 (è un nome a caso) è un gruppo di selezione dove sarà raccolto tutti i blocchi trovati col filtro.
 Una volta trovati i valori si può fare quello che si vuole:
 creare una tabella
 esportarli
 scriverli direttamente
 .....
 Ciao.
 |  
                      |  |  | 
              
                | asetechNuovo Utente
 
 
 
                 
               
   6 Messaggi
 | 
                    
                      |  Inserito il - 13/10/2009 :  11:18:22       
 |  
                      | Ciao Grazie delle tue risposte
 Ho provato a creare un nuovo progetto con tre layer
 su ogni layer o inserito un blocco con 1 attributo e su ogni foglio ad ogni blocco ho inserito tre valori diveri Es. layer 1 Blocco pippo valre 1 - layer 2 Blocco Pippo valore 2 - layer 3 blocco pippo valore 3
 Io ho provato a inserire il seguente codice
 Sub prova()
 Dim Blocchi As AcadSelectionSets
 Dim i As Integer
 
 Set Blocchi = ThisDrawing.SelectionSets
 
 End Sub
 Ma non riesco a capire lui trova i blocchi ma solo 1 e non 3 e poi il valore dell attributo non lo trovo da nessuna parte della struttura Blocchi
 Io non uso un blocco diverso per ogni pagina ma un blocco solo con valori diverso in piu pagine.
 L'esempio che mi hai passato con il comando .add lui crea una tabella dove nella struttura ci sono le stesse informazioniche posso trovare in "application"
 Scusa se sono un po duro di comprendonio
 Andrea
 |  
                      |  |  | 
              
                | asetechNuovo Utente
 
 
 
                 
               
   6 Messaggi
 | 
                    
                      |  Inserito il - 13/10/2009 :  11:19:50       
 |  
                      | Ciao di nuovo Scusa volevo dire che io utilizzo lo stesso blocco che si chiama "freccia" enne volte nel progetto.
 Ciao e grazie di nuovo
 |  
                      |  |  | 
              
                | asetechNuovo Utente
 
 
 
                 
               
   6 Messaggi
 | 
                    
                      |  Inserito il - 13/10/2009 :  12:56:10       
 |  
                      | Annulla Tutto In parte ci sono riuscito avevo capito male i tuoi esempi.
 Il codice che ho fatto e che funziona è il seguente:
 Sub Trova()
 Dim Tabelle, Blocchi As AcadSelectionSet
 Dim FilterType(1) As Integer
 Dim FilterData(1) As Variant
 Dim idx, Contatore As Integer
 
 ' Seleziono tutte le Tabelle create del Progetto
 Set Tabelle = ThisDrawing.SelectionSets
 
 ' Le cancello
 If ThisDrawing.SelectionSets.Count <> 0 Then
 Contatore = ThisDrawing.SelectionSets.Count
 
 For idx = 0 To Contatore - 1
 ThisDrawing.SelectionSets.Item(0).Delete
 Next idx
 End If
 
 
 ' Creo una nuova tabella, e ci infilo dentro tutti i blocchi di nome "Blocco_Test"
 
 Set Tabella = ThisDrawing.SelectionSets.Add("B1")
 
 FilterType(0) = 0
 FilterData(0) = "INSERT"
 FilterType(1) = 2
 FilterData(1) = "Blocco_Test"
 Tabella.Select acSelectionSetAll, , , FilterType, FilterData
 
 End Sub
 Ti dico in parte perche non riesco a trovare il valore dell'attributo di ogni blocco, mi puoi aiutare
 Grazie
 |  
                      |  |  | 
              
                | adminAmministratore
 
   
 
 
 
                Regione: Veneto
 Prov.: TV
 Città: Treviso
 
 
   188 Messaggi
 | 
                    
                      |  Inserito il - 15/10/2009 :  17:10:52         
 |  
                      | Ciao, volevo solo avvisarti che per una fino al 25 sono in ferie e quindi non potrò aiutarti.
 |  
                      |  |  | 
              
                | adminAmministratore
 
   
 
 
 
                Regione: Veneto
 Prov.: TV
 Città: Treviso
 
 
   188 Messaggi
 | 
                    
                      |  Inserito il - 27/10/2009 :  18:50:53         
 |  
                      | Ciao, sei riuscito a fare più niente da solo?
 |  
                      |  |  | 
              
                |  |  Discussione  |  |