Indetare codice sorgente



  • Indetare codice sorgente
    di MatteoM data: 31/08/2016 10:29:25

    Un saluto al forum.

    Qualcuno mi saprebbe dire se esiste un tasto o una funzione che permette di indetare automaticamente un codice sorgente?

    Grazie



  • di alfrimpa data: 31/08/2016 10:36:57

    Per quanto ne sappia no.

    Alfredo





  • di Vecchio Frac data: 31/08/2016 11:26:54

    L'indentazione automatica (senza librerie di terze parti) non è prevista per il fatto che non è richiesta dal compilatore.
    Cioè, il compilatore esegue tutto senza battere ciglio purchè la sintassi sia corretta.
    Ciò a differenza di altri linguaggi di programmazione (python) dove l'indentazione è obbligatoria e fa parte della sintassi del linguaggio (se non è rispettata la corretta indentazione tra i diversi sintagmi l'esecuzione viene negata con errore di sintassi o peggio, potrebbero verificarsi errori logici).

    Tuttavia indentare correttamente migliora la leggibilità e aiuta la manutenzione del codice.
    Purtroppo deve essere manuale.
    Il modo più veloce per farlo è usare il tasto Tab (equivalente a 4 spazi). Poi ognuno usa un metodo e un stile propri.






  • di patel data: 31/08/2016 12:20:03

    indentare durante la scrittura del codice aiuta chi lo scrive, permette di evitare dimenticanze che talvolta il compilatore segnala in modo erroneo





  • di Vecchio Frac data: 31/08/2016 13:32:04

    A meno di non ricorrere dicevo a software di terze parti (sì, sto parlando di MZTools naturalmente, chi non lo conosce?).
    Hanno rilasciato la versione 8.0 (siamo stati fermi sulla 3.0 per anni) e mi sembra una vera bomba.
    Considerando le features offerte, anni luce oltre quelle della versione precedente, è una favola, compresa l'indentazione.
    Purtroppo il tool non è più gratuito ma a pagamento.
    Che poi voglio dire, 60 dollari non sono neanche una spesa eccessiva per uno strumento così ben fatto. Dipende sempre dai propri obiettivi naturalmente. Se io fossi un professionista un pensierino serio lo avrei già fatto.





  • di MatteoM data: 31/08/2016 13:35:01

    Grazie per le info!
    In effetti la cosa migliore da fare è indetare mentre si programma, il problema è che spesso si vanno a fare dei copia/incolla da altre macro (magari si copiano anche decine di righe di codice) e questo rende macchinoso dover riandare ogni volta a sistemare l'indetazione.




  • di alfrimpa data: 31/08/2016 14:38:29

    In verità il termine esatto è "indentare"

    Alfredo





  • di MatteoM data: 31/08/2016 15:45:49

    Un'altra curiosità,

    il vba ti da la possibilità di verificare la correttezza del codice senza necessariamente mandarlo in esecuzione?



  • di alfrimpa data: 31/08/2016 16:17:13

    Nell'Editor di VBA se vai sul menù Debug e scegli Compila VBAProject viene fatto un controllo ed in linea di massima se si passa il test il codice dovrebbe funzionare.

    Ma non è detto perché se il codice è formalmente corretto potrebbe non funzionare per problemi lato foglio.

    Altro consiglio mettere in testa ai moduli Option Explicit in modo da rendere obbligatoria la dichiarazione delle variabili.

    Questo lo puoi impostare di default nell'editor in Strumenti, Opzioni e spuntare la casella Dichiarazione obbligatoria delle variabili.

    Alfredo





  • di MatteoM data: 31/08/2016 16:22:52

    Ti ringrazio



  • di Vecchio Frac data: 31/08/2016 19:43:49

    cit. "se il codice è formalmente corretto potrebbe non funzionare per problemi lato foglio. "
    ---> Eh già, questi sono i famosi "problemi di logica di esecuzione" cui accennavo anch'io.
    Un programma può essere sintatticamente corretto ma dare risultati sbagliati per errori di programmazione.
     
    Option Explicit
    
    Public Sub predici_il_risultato()
    Dim i As Long, j As Long, k As Long
        i = 10
        j = i
        k = i
        
        test (i)
        test j
        test k + 20
        
        MsgBox Replace("i = " & i & ", j = " & j & ", k = " & k, ",", vbNewLine), vbQuestion, "Hai indovinato?"
    End Sub
    
    Private Sub test(ByRef var As Long)
        var = 5
    End Sub
    






  • di alfrimpa data: 31/08/2016 20:12:38

    Francesco io non mi riferivo solo a quelli che hai citato ma anche a quegli errori (debug) che vengono fuori anche se il codice ha superato il test del Compila VBAProject.

    Alfredo





  • di Vecchio Frac data: 31/08/2016 21:09:54

    Naturale, perchè Range("A1:A" & ur), per esempio, è corretto e compilando non segnala nulla ma si ferma suito in esecuzione se "ur" non è valorizzato o supera i limiti.
    Avete provato il codice di esempio? avete indovinato i risultati? confesso... io no :)