Disegnare una polilinea da valori di Excel

afazio

Utente Junior
Professione: ingegnere
Software: nessuno
Regione: sicilia
Un pulnsate ? Vermante ? :4404:

:hahahah: Scherzo dai... nel post precedente intedevo dire che ho trovato la macro e ho letto il codice all'interno.... (quello dentro il pulsante :finger:)...

e la macro genera prima il file dxf (che alla fine è un file di testo) e poi lo apre con autocad (ShellExecute 0, vbNullString, nprofilo, vbNullString, "", 1)

quindi per modificare o aggiungere qlc bisogna farlo inserendo all'interno del file il codice dxf relativo agli oggetti da aggiungere.

Esatto!
Non so se il tempo trascorso dalla pubblicazione del presente 3d ad adesso giustifichi o meno il mio intervento. Spero di non annoiare nessuno.

L'autore di quel file sono io.
Il file nasce da una richiesta specifica da parte di uno studente che aveva la necessità di disegnarsi i diagrammi dei momenti flettenti (in genere di forma parabolica) e del taglio in autocad ma prendendo i dati dalle elaborazioni che comunque eseguiva con l'aiuto di excel. Pensate per esempio alla risoluzione di una travata continua ad n appoggi. Ho semplicemente adattato parte del codice scritto per altro scopo (disegno di profilati metallici con dati ricavati da excel).
In effetti il codice scrive un file di tipo *.DXF contenente le uniche informazioni relative alle polilinee e successivamente viene aperto in Autocad.
Cercare di modificare il codice prevedendo la possibilita di inserire testi, formattazioni di testi, stili, layers, colori ed altro sarebbe cosa alquanto laboriosa.
Ho pubblicato il file in forma libera con codice leggibile da tutti, quindi nessun problema se qualcuno lo ha preso e modificato.

Saluti
 

afazio

Utente Junior
Professione: ingegnere
Software: nessuno
Regione: sicilia
Io non sono un esperto di dxf. per aggiungere delle quote occorre sapere come Acad scrive una quota in dxf e poi modificare il VBA. sinceramente ci vuole un po' di tempo e non è precisamente la direzione in cui vorrei utilizzare il mio.

Ho aggiunto come richiesto una colonna al file precedente, la cosa è banale e se ne possono aggiungere quante se ne desiderano.

All'interno del VBA ho aggiunto tre righe nel case select, le ho commentate quindi sono facilmente individuabili.

Volendo aggiungere la settima colonna all'interno del foglio excel invece occorre copiare e incollare le tre colonne di riferimento.

Poi occorre definire le seguenti variabili rinominate:

N_7 che indica il numero di punti che si andrebbe a trovare in AC11
C_7 in AA14
Tab_7 definita all'interno del form di definizione variabili e pari a: =SCARTO(C_7;0;0;N_7;3)

Occorre poi modificare la cella U8 e aggiungere anche la presenza della nuova colonna.

Per inciso, io normalmente preferisco far scrivere al VBA, piuttosto che un DXF uno script di autocad, che dopo è più facilmente editabile. inoltre è più semplice inserire dei comandi complessi. Questione di gusti!

Onda

Hai compreso perfettamente il codice.
 

erot79

Utente poco attivo
Professione: Ingegneria edile-strutture
Software: Autocad-Sap2000-Straus7-Modest-Allplan-ecc
Regione: Sardegna
Anche se in ritardo però ora ti posso ringraziare :finger:, sia per il file originale che avevi prodotto e sia perchè mi hai stimolato a studiare l'argomento tanto che ora programmo più che discretamente sia col vba che col vb.net. A presto!!
 

cecco13

Utente poco attivo
Professione: geometra
Software: autocad
Regione: BG
scrivi la sequenza in excel come si presenta nella riga di comando di autocad, incollala nella riga di comando di autocad
 

Alessandro De Fusco

Utente poco attivo
Professione: Ingegnere
Software: Autocad 2016
Regione: Campania
Io non sono un esperto di dxf. per aggiungere delle quote occorre sapere come Acad scrive una quota in dxf e poi modificare il VBA. sinceramente ci vuole un po' di tempo e non è precisamente la direzione in cui vorrei utilizzare il mio.

Ho aggiunto come richiesto una colonna al file precedente, la cosa è banale e se ne possono aggiungere quante se ne desiderano.

All'interno del VBA ho aggiunto tre righe nel case select, le ho commentate quindi sono facilmente individuabili.

Volendo aggiungere la settima colonna all'interno del foglio excel invece occorre copiare e incollare le tre colonne di riferimento.

Poi occorre definire le seguenti variabili rinominate:

N_7 che indica il numero di punti che si andrebbe a trovare in AC11
C_7 in AA14
Tab_7 definita all'interno del form di definizione variabili e pari a: =SCARTO(C_7;0;0;N_7;3)

Occorre poi modificare la cella U8 e aggiungere anche la presenza della nuova colonna.

Per inciso, io normalmente preferisco far scrivere al VBA, piuttosto che un DXF uno script di autocad, che dopo è più facilmente editabile. inoltre è più semplice inserire dei comandi complessi. Questione di gusti!

Onda

salve a tutti ragazzi, premetto che sono nuovo del forum e soprattutto sono novizio anche di VBA.
ho una domanda per onda.
Innanzitutto complimenti, mi sta aiutando tantissimo questa tua modifica al file originale.
L'unico mio dubbio (che sorge dal fatto che di combinazioni ne abbiamo sempre minimo 32 in zona sismica) è nella dichiarazione della tabella.
Sono riuscito a definire C_7 e N_7, ma tab_7 e la modifica della cella U8 non sono andate a buon fine, potresti aiutarmi inviandomi il codice?
 

afazio

Utente Junior
Professione: ingegnere
Software: nessuno
Regione: sicilia
Se invece vuoi capire come fare in autonomia allora segui le istruzioni:

occorre attribuire tre nomi diversi:

il nome N_xx alle cellette gialle. Qui è riportato il numero dei punti nella relativa tabella
il nome C_xx alla prima cella di ciascuna tabella (la cella dove è riportato il numero 1). Questa serve per stabilire il riferimento di partenza della tabella dinamica
il nome Tab_xx a ciascuna tabella. Ma la tabella deve essere dinamica e quindi va definita mediante il comando "Formule"-->"gestione nomi". Il nome va definito mediante la formula "=SCARTO(C_xx;0;0;N_xx;3)".
Naturalmente "xx" indica il numero sequenziale delle tabelle.

Infine devi apportare una leggera modifica nel codice per prevedere anche i casi di un numero di tabelle maggiori:

Select Case conta_poly
Case 1
Numero_r = Range("N_1").Value
CoOrdinate = Range("tab_1")
Case 2
Numero_r = Range("N_2").Value
CoOrdinate = Range("tab_2")
...
...
...

Case 31
Numero_r = Range("N_31").Value
CoOrdinate = Range("tab_31")
Case 32
Numero_r = Range("N_32").Value
CoOrdinate = Range("tab_32")

Case Else
MsgBox "Errore nel numero di diagrammi da disegnare"
Exit Sub
End Select

Ciao
 

rpor66

Utente Standard
Professione: Programmatore
Software: Lisp, Vba per Autocad e GstarCAD, CadWorx, Termus BIM.
Regione: Sicilia
Suggerimento:
Select Case conta_poly
Case 1
Numero_r = Range("N_1").Value
CoOrdinate = Range("tab_1")
....
End Select

puoi trasformarlo in

Select Case conta_poly
Case 1 to 32
Numero_r = Range("N_" & conta_poly).Value
CoOrdinate = Range("tab_" & conta_poly)
End select

Per utilizzare il software anche con Office x64 includi queste righe:
#If VBA7 Then
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#Else
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#End If

Bye
 

afazio

Utente Junior
Professione: ingegnere
Software: nessuno
Regione: sicilia
Grazie rpor66
un suggerimento che fa risparmiare molte righe.

Le righe per far funzionare il codice anche per office x64, le righe che hai riportato sostituiscono l'unica adesso presente relativa alla chiamata shell?
 

afazio

Utente Junior
Professione: ingegnere
Software: nessuno
Regione: sicilia
Ok, le ho sostituite.
Accade che la prima delle due righe viene riconosciuta come errore da VBA per excel x32, e quindi evidenziata in rosso (non riconosce la parola prtsafe) ma eseguendolo il codice non va in errore.
Grazie ancora.
 

Statistiche forum

Discussioni
56,403
Messaggi
481,032
Utenti registrati
97,888
Ultimo utente registrato
langella53

Utenti online


Top