Il Bar dell'Ingegneria

Excel --> Autocad. Disegno Automatico camerette CLS da soli dati Excel

« Older   Newer »
 
  Share  
.
  1.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    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:

    Lv06TOz



    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
     
    Top
    .
  2.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    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.
     
    Top
    .
  3.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    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:

    lwZVSvi

    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.
     
    Top
    .
  4.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    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.
     
    Top
    .
  5.     +1   -1
     
    .
    Avatar

    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
     
    Top
    .
  6.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    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.
     
    Top
    .
  7.     +1   -1
     
    .
    Avatar

    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
     
    Top
    .
  8.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    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.
     
    Top
    .
217 replies since 30/9/2016, 09:08   7895 views
  Share  
.