-
| .
|
|
|
Quindi, prima di chiamare il metodo che apre il dialogo occorre predisporre le sue proprietà allo scopo specifico. Allora illustro i vari passi della sub ApriPozzetto().
CODICE Private Sub ApriPozzetto(ByRef Nome As String, ByRef pzz As TipoPozz) Dim NomeOrigi As String Dim flag As Boolean NomeOrigi = Nome Dim ApriFile As Boolean dlg.DialogTitle = "Apri Pozzetto ..."
Alla sub vengono passati come parametri il nome del file (Nome) e la variabile atta a contenere i dati letti (pzz) Inizializzo alcune variabili finalizzate a:
NomeOrigi , contiene il nome del file passato e lo conservo nel caso in cui l'operazione di apertura non andasse a buon fine per mantenere inalterato il nome passato
Flag , variabile booleana che mi indica che i dati letti sono in effetti quelli di un pozzetto (potrebbe capitare il caso che pur superando tutti i controlli, il file sia stato modificato con notepad in maniera impropria tanto da rendere illeggibili i dati)
Aprifile, altra variabile booleana che mi indica che tutti i controlli sul nome del file sono stati positivamente superati.
Inizio quindi a settare le varie proprietà del dialogo iniziando dal titolo:
dlg.DialogTitle = "Apri Pozzetto ..."
Questa istruzione produce quanto segue:
Continuando col codice:
CODICE If ThisDrawing.Path = "" Then dlg.InitDir = CurDir Else dlg.InitDir = ThisDrawing.Path End If dlg.Filter = "File pozzetti (*.pzz)|*.pzz|All Files (*.*)|*.*" dlg.FilterIndex = 1 dlg.DefaultExt = ".pzz" dlg.FileName = ""
con queste righe imposto i parametri .initdir (cioè la directory che deve inizialmente puntare il dialogo- ho stabilito di iniziare dalla stessa directory dove è salvato il file di disegno), il filtro delle estensioni da visualizzare (ne ho stabilita una specifica per i pozzetti *.pzz), il filtro attivo all''atto dell'apertura, quello di default da attribuire al nome del file ed il nome inizialmente proposto.
Adesso posso invocare il metodo dlg.showOpen ma devo poter gestire eventuale errore (come per esempio la pressione del tasto Cancel) e se è il caso riproporre il dialogo di apertura per una nuova scelta:
CODICE ApriFile = False While Not (ApriFile) On Error Resume Next dlg.ShowOpen If Err <> 0 Then Err.Clear MsgBox "Apertura file annullata" Exit Sub Else On Error GoTo 0 ... ...
Inserisco quindi la chiamata al metodo entro un ciclo While ... Wendgovernato dalla variabile Aprifile. A monte della chiamata al metodo .ShowOpen attivo il segnalatore di errore (On Error Resume Next ) e se all'interno del dialogo viene premuto Cancel avrò di ritorno un errore. In questo caso avviso che l'operazione è stata annullata ed esco senza far nulla.
In caso contrario il codice continua con il controllo di esistenza del file selezionato (o digitato nel dialogo):
CODICE If (FileEsiste(dlg.FileName)) Then ' controllo se il file esiste Nome = dlg.FileName ApriFile = True Else ' il file non esiste MsgBox ("Selezionare un file da aprire." _ & vbCrLf & "Impossibile procedere all'apertura del file") ApriFile = False End If
Se il file esiste pongo a vero la variabile Aprifile in modo da poter uscire dal ciclo While ma dopo aver letto il nome e depositato nella variabile Nome che era stata passata alla sub. In caso contrario visualizzo un avviso e ripropongo nuovamente il dialogo di apertura.
Il codice prosegue con:
CODICE If ApriFile Then ' qui posso leggere i dati del pozzetto flag = True Call LeggiFilePzz(Nome, pzz, flag) If flag Then Call Scrivi_Dati_Pozzetto(pzz) MsgBox "Lettura ok." Else Nome = NomeOrigi MsgBox "Il file non contiene dati di pozzetto" End If Lbl_NomeFile.Caption = Nome End If
Se tutto è andato bene, cioè è stato selezionato un file esistente, la variabile Aprifile è stata posta a True quindi si procede con la lettura dei dati. Ma ancora non sappiamo se i dati contenuti nel file scelto sono davvero dati di un pozzetto. Ecco che entra in gioco il flag che per adesso viene posto a vero ma che verrà modificato dalla sub LeggiFilePzz() dedicata alla lettura dei dati. Se il valore di ritorno della variabile flag è ancora vero, significa che l'esito della lettura dei dati è positivo e tutto è andato liscio. In questo caso aggiorno i dati del pozzetto (Scrivi_Dati_Pozzetto()) nel dialogo di input del pozzetto ed esco.
Edited by afazio - 21/11/2016, 09:46
|
|
| .
|
-
| .
|
|
|
Per completezza, riporto il codice dedicato alla vera e propria lettura dei dati:
CODICE Private Sub LeggiFilePzz(Nome As String, ByRef pzz As TipoPozz, ByRef flag As Boolean) Dim FileNumber As Long FileNumber = FreeFile Dim i As Integer On Error GoTo GestioneErrore Open Nome For Input As #FileNumber For i = 0 To 3 Input #FileNumber, pzz.elem(i).Lx, pzz.elem(i).Ly, pzz.elem(i).s, _ pzz.elem(i).H, pzz.elem(i).a, pzz.elem(i).Kx, pzz.elem(i).Ky, _ pzz.elem(i).FlagForma, pzz.elem(i).Flag_Dsgn Next For i = 1 To 4 Input #FileNumber, pzz.Tubi(i).d, pzz.Tubi(i).Kx, pzz.Tubi(i).Kz, _ pzz.Tubi(i).FlagI_O, pzz.Tubi(i).Flag_Dsgn Next Close #FileNumber Exit Sub GestioneErrore: Close #FileNumber Err.Clear flag = False End Sub
Vengono passati: il nome del file che ha già subito il controllo dell'esistenza la variabile atta a contenere i dati letti il flag atto a stabilire se i dati letti sono effettivamente quelli di un pozzetto.
Si apre un canale in lettura e si leggono i dati secondo il formato che ho stabilito nella sub che scrive i dati. Al primo errore il codice salta nella sezione dedicata alla gestione errori. Qui viene posta a False la variabile Flag, viene chiuso il file e si ritorna alla sub chiamante.
|
|
| .
|
-
| .
|
|
|
Sempre per completezza riporto la sub dedicata alla scrittura dei dati su file:
CODICE Private Sub scrifiFilePzz(Nome As String, pzz As TipoPozz) Dim FileNumber As Long FileNumber = FreeFile Dim i As Integer Open Nome For Output As #FileNumber For i = 0 To 3 Write #FileNumber, pzz.elem(i).Lx, pzz.elem(i).Ly, pzz.elem(i).s, _ pzz.elem(i).H, pzz.elem(i).a, pzz.elem(i).Kx, pzz.elem(i).Ky, _ pzz.elem(i).FlagForma, pzz.elem(i).Flag_Dsgn Next For i = 1 To 4 Write #FileNumber, pzz.Tubi(i).d, pzz.Tubi(i).Kx, pzz.Tubi(i).Kz, _ pzz.Tubi(i).FlagI_O, pzz.Tubi(i).Flag_Dsgn Next Close #FileNumber End Sub
Questo produce un file di tipo testo (ma con estensione *.pzz) come il seguente:
Notate che nel file di testo sono presenti 8 righe di cui le prime quattro dedicate, una ciascuna, ai quattro elementi componenti un pozzetto (fondazione, cameretta, colletto e chiusino) e le successive 4 dedicate ai dati dei tubi nelle pareti. Questo è, per adesso, il formato del file ma potrebbe anche cambiare in futuro se decido di aggiungere qualcosa altro.
Da qui è immediato comprendere che il passaggio tra dati in Excel e macro VBA di autocad può facilmente avvenire duplicando ed adattando il suesposto codice in una macro VBA per excel. Excel salva i dati in questo formato e la macro *.dvb li legge permettendo poi la loro modifica in comodo dialogo e il disegno del pozzetto.
|
|
| .
|
-
| .
|
|
|
Rendo pubblica la nuova versione del file
Pozzetti v_ 1.0.2
In questa è possibile salvare i dati del pozzetto o leggere dati già salvati.
|
|
| .
|
-
| .
|
Junior Member
- Group
- Member
- Posts
- 2
- Reputation
- 0
- Location
- Italia
- Status
- Offline
|
|
Buon giorno, sono Fabrizio e sono nuovo nel Forum ,chiedo scusa da subito per eventuali errori o altro. Incuriosito dalla possibilità data dallo sviluppo effettuato, Excel --> Autocad. Disegno Automatico camerette CLS da soli dati Excel volevo scaricare i file per testarne l'utilizzo ma non riesco ad accedere al collegamento. Cliccando compare il seguente messaggio:
Per qualche motivo il caricamento non è riuscito Se è stato un caso, potrebbe essere sufficiente aggiornare la pagina. Puoi anche chiedere assistenza. Premetto che la piattaforma di lavoro è già predisposta a supportare i file (EXCEL e AUTOCAD).
Chiedevo se qualcuno può aiutarmi. Ringrazio anticipatamente Fabrizio
|
|
| .
|
-
| .
|
|
|
CITAZIONE (D'ANDREA FABRIZIO @ 24/3/2023, 13:38) Buon giorno, sono Fabrizio e sono nuovo nel Forum ,chiedo scusa da subito per eventuali errori o altro. Incuriosito dalla possibilità data dallo sviluppo effettuato, Excel --> Autocad. Disegno Automatico camerette CLS da soli dati Excel volevo scaricare i file per testarne l'utilizzo ma non riesco ad accedere al collegamento. Cliccando compare il seguente messaggio:
Per qualche motivo il caricamento non è riuscito Se è stato un caso, potrebbe essere sufficiente aggiornare la pagina. Puoi anche chiedere assistenza. Premetto che la piattaforma di lavoro è già predisposta a supportare i file (EXCEL e AUTOCAD).
Chiedevo se qualcuno può aiutarmi. Ringrazio anticipatamente Fabrizio Ti ho inviato un link alternativo dove poterlo scaricare. Inoltre, come ti ho già scritto in MP, per poter funzionare devi installare il VBA nel tuo Autocad, dato che le nuove versioni non lo includono. Quindi anche se la tua postazione è predisposta con Autocad, devi installarvi anche il VBA. Per farlo devi reperire il VBA INSTALLER relativo alla versione di autocad che hai in uso. Installato l'ambiente VBA il progetto si richiama attraverso il menu strumenti-> carica applicazione e successivamente lo avvii.
|
|
| .
|
-
| .
|
Junior Member
- Group
- Member
- Posts
- 2
- Reputation
- 0
- Location
- Italia
- Status
- Offline
|
|
Grazie mille, VBA lo avevo già installato quindi ho provato il file che gira tranquillamente. Ringrazio molto per la disponibilità ed auguro una buona giornata. Fabrizio
|
|
| .
|
-
| .
|
|
|
CITAZIONE (D'ANDREA FABRIZIO @ 25/3/2023, 08:52) Grazie mille, VBA lo avevo già installato quindi ho provato il file che gira tranquillamente. Ringrazio molto per la disponibilità ed auguro una buona giornata. Fabrizio Ok, buona giornata anche a te. --- per eventuali dubbi sull'uso dell'applicativo leggi prima tutti gli sviluppi del topic.
|
|
| .
|
217 replies since 30/9/2016, 09:08 7895 views
.