Mz-Tools v3: add-in free (ancora disponibile)

G

gibra

Guest
#1
I più esperti conoscono già l'add-in per VBA di nome MZ-Tools.

Ma non tutti sanno che la vecchia versione 3.xxxx (l'unica gratuita) anche se ufficialmente non è più distribuita è ancora scaricabile grazie al servizio gratuito WAVEBACKMACHINE che memorizza milioni di siti.
Prima di correre a scaricarla, vi avverto che non funziona con Office 64 bit, ma solo con 32 bit.

Ecco il link:

MZ-Tools 3.0 - Productivity Tools for Visual Basic 6.0, 5.0 and VBA
https://web.archive.org/web/20150206030211/http://www.mztools.com/v3/mztools3.aspx
Selezionate Download (a sinistra della pagina) e vi troverete nella pagina di download ove è disponibile in 3 edizioni:
- VB6
- VB5
- VBA <-- questa è quella che ci interessa

L'interfaccia dell'add-in supporta vari linguaggi tra cui anche l'italiano.

La guida, invece, verrà installata sempre e solo quella in inglese, ma niente paura!
A suo tempo, in collaborazione con Carlos (l'autore di MZ-Tools) curai la traduzione della guida che potete scaricare dal mio sito:
http://www.vbcorner.net/download/mz-tools/MZTools3_help_ita_xp.zip

Scaricato lo zip, estrete il file MZTools3.chm e copiatelo nella cartella di MZTools3VBA
Codice:
C:\Program Files (x86)\MZTools3VBA
L'addin installerà la propria toolbar:


e nel menu Strumenti il proprio menu MZ-Tools:


Le caratteristiche dell'add-in sono tutte utili, ma una di quelle più interessanti, a mio avviso, è quella di poter creare dei modelli di codice che può essere inserito nella fienstra del codice VBA con una semplice scorciatoia rapida da tastiera.
Ad esempio, il più banale che ho fatto, è stato quello che premendo i tasti CTRL+B va inserito/eliminato un Bookmark.
La guida in linea vi permetterà in poco tempo di padroneggiare questo add-in.


Spero di aver fatto cosa gradita, in VB6 lo utilizzo da moltissimi anni ed ora che mi sono avvicinato ad Excel ho pensato subito di scaricarlo ed installarmelo, non potendo farne a meno.


P.S:
Si tenga presente che la nuova versione 8.x (però solo a pagamento) è ovviamente molto più avanzata.
Ma il prezzo vale la spesa davvero irrisoria (anche questa tradotta da me in italiano).
MZ-Tools - Productivity Tools for Visual Studio .NET (C#, VB.NET), Visual Basic and VBA
 
Ultima modifica da un moderatore:

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
12,411
105
63
Como
2011MAC 2016WIN
Miglior risposte
47
#2
Grazie della condivisione gibra, io già da qualche anno utilizzo la versione a pagamento e mi trovo molto bene.
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
12,411
105
63
Como
2011MAC 2016WIN
Miglior risposte
47
#5
Anch'io in verità lo sfrutto poco ma forse perché non ho compreso tutte le funzionalità fino in fondo.

Potresti dirci quali sono le funzionalità che ritieni più utili e se ti va darcene una spiegazione?
Grazie
 
G

gibra

Guest
#6
Volentieri, anche se per capire le vere potenzialità non basta certo un semplice post.
Farò un accenno sulle principali, ma poi consiglio di leggere con calma la guida perché aiuta molto a capire le potenzialità di questo add-in.
Io, avendola tradotta dall'inglese all'italiano, ho potuto scoprire molte cose che, probabilmente, difficilmente avrei imparato.

Nota: per semplicità il codice di esempio sarà attinente al VBA, ma anche con riferimenti a VB6 essendo questi due linguaggi praticamente identici.
Teniamo presente che per chi usa la versione per il NET (sia VB.NET che C#), questo add-in è ancora più potente ed avanzato.

1) Gestore degli errori

Assolutamente imperdibile! Anche molti utenti non sanno nemmeno cos'è la gestione degli errori e non sempre l'errore viene segnalato dove effettivamente si verifica, ma nella routine chiamante e così non si sa cosa l'abbia generato, generando confusione a volte il panico.
Vissuto proprio sul forum un paio di giorni.

Oltretutto il gestore è già preconfigurato e basta un semplice clic sull'apposito pulsante per aggiungerlo alle nostre routine, anche quelle già esistenti.
Vediamo come è l'impostazione predefinita:
Codice:
    On Error GoTo {PROCEDURE_NAME}_Error

    {PROCEDURE_BODY}

    On Error GoTo 0
    Exit {PROCEDURE_TYPE}

{PROCEDURE_NAME}_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure {PROCEDURE_NAME} of {MODULE_TYPE} {MODULE_NAME}"
Notare le variabili predefinite racchiuse tra le parentesi graffe {VARIABILE}, di cui parlerò dopo.
Esempio pratico, abbiamo una Sub MacroTest() che contiene una semplice chiamata
Codice:
Public Sub MacroTest()
    Dim bResult As Boolean
    bResult = FunzioneTest()
End Sub
Applicando il gestore degli errori la nostra routine si trasfomerà così:
Codice:
Public Sub MacroTest()
    Dim bResult As Boolean
    On Error GoTo MacroTest_Error

    bResult = FunzioneTest()
    
    On Error GoTo 0
    Exit Sub

MacroTest_Error:
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure MacroTest of Modulo Modulo1"
End Sub
La cosa estremamente utile è che possiamo personalizzare il gestore in base ai nostri gusti. :Entusiasta:
Ad esempio, se si verifica un errore appare il messaggio, ok, ma poi la routine esce! Invece a me interessa anche scoprire la causa per capire l'errore e correggerlo subito.
Allora dopo il MsgBox() posso inserire questo ulteriore codice:
Codice:
    Stop
    Resume
In questo caso l'esecuzione si ferma e mi permette di entrare in DEBUG, così premendo F8 inizio ad eseguire una istruzione e la chiamata di Resume mi rimanda alla riga che ha generato l'errore, ora sono in grado di esaminare il valore delle variabili in gioco in quel preciso momento e capire praticamente tutto. Se poi abbiamo l'abitudine di tener aperta la finestra delle Variabili locali, avremo una visione completa della situazione.

Purtroppo in VBA esiste solo una modalità di esecuzione, quindi non ho altre opzioni quindi quest'ultime righe vengono eseguite sempre e comunque, per cui terminata la fase di debug, se devo distribuire il file sono costretto a commentarle.

Assai diversa la situazione in VB6 ed in NET, in cui abbiamo due modalità di esecuzione:
VB6: VBIDE e compilato
NET: DEBUG e RELEASE
Questo mi permette di perfezionare ulteriormente il gestore degli errori e decidere quando eseguire determinate istruzioni.
Esempio, le istruzioni che abbiamo appena visto voglia che vengano eseguite solo quando siamo in fase di test (IDE/DEBUG), ma non nel programma distribuito (compilato/RELEASE), allora in VB6 scriveremo:
Codice:
MacroTest_Error:
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure MacroTest of Modulo Modulo1"
    If App.LogMode = 0 Then
        Stop
        Resume
    Else
        ' scrivo in un LOG
    End If

2) Modelli di codice
Se vi è piaciuta la prima, 'per questa impazzirete' (cit. Alien II - Scontro finale).

Questa caratteristica è assolutamente fantastica!
Il fatto di poter creare dei modelli di codice da inserire con un semplice shortcut è di una comodità insostituibile, anche per le cose che più banali, accresciuta dalla flessibilità di utilizzare non solo {variabili predefinite}, ma anche variabili personalizzate.

Ovviamente a questi 'snippet' di codice possiamo assegnare anche una Descrizione.
Qualche banale esempio (nota: la variabile {I} indica ove il cursore andrà posizionato dopo l'inserimento del modello):
- Inserisci data di oggi:
Codice:
Rem {DATE} :{I}
- Forza maiuscolo in un TextBox:
Codice:
KeyAscii = Asc(UCase(Chr(KeyAscii))) {I}
Oppure aggiungere in un modulo la chiamata per aprire un qualsiasi file con il programma predefinito dall'utente, senza preoccuparmi di sapere quale sia:
Codice:
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

Public Sub OpenURL(Optional ByVal strURL As String = "http://www.vbcorner.net")
    Call ShellExecute(0, "Open", strURL, 0&, 0&, 1)
End Sub
Ancora, supponiamo di avere un routine per disabilitare/abilitare gli aggiornamenti del foglio:
Codice:
Public Sub EnableDisableUpdate(ByVal pEnable As Boolean)
    On Error Resume Next
    With Application
        If pEnable Then
            .ScreenUpdating = True
            .Calculation = xlCalculationAutomatic
        Else
            .ScreenUpdating = False
            .Calculation = xlCalculationManual
        End If
    End With
End Sub
Possiamo definire il modello di codice per richiamarla con un shortcut CTRL+SHIFT+U
Codice:
EnableDisableUpdate {I}

Questi sono solo alcuni semplici esempi, ma qui la fantasia è l'unico limite!

Poter fare tutto questo con uno shortcut, oppure semplicemente selezionandolo dalla lista dei Modelli, è utilissimo non solo per chi scrive codice per hobby (per cui trova difficile ricordarseli a memoria), ma anche per chi lo fa per professione in quanto snellisce enormemente la stesura del codice.

Concludo questo brevissimo, e limitatissimo, 'escursus' su MZ-Tools consigliando di investire qualche minuto nella lettura della guida e sicuramente sarete in grado di sfuttare questo fantastico add-in.
Io non potrei farne più a meno.

_43_
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
12,411
105
63
Como
2011MAC 2016WIN
Miglior risposte
47
#8
Ciao, ho "liberato" il post.
Interessante la tua spiegazione non me ne ero curato più di tanto l'uso per queste funzionalità.
Grazie
 
G

gibra

Guest
#10
Prego! GrazieGrazie

Concordo, sono davvero comodi e sono tra quelli che io sfrutto di più.

Visto che siamo in argomento, segnalo anche i due pulsanti successivi (nella toolbar sono il 3° ed il 4° - vedi figura in post #1):

Trova
una comodissima funzione di ricerca, che ti mostra tutte le occorrenze in una finestra 'dockable' e da cui fai doppio clic sull'occorrenza e ti apre la finestra visualizzando la parte di codice. Naturalmente questa funzione ha numerose opzioni. ';)
Anche questa è tra le mie preferite.

Chiamata di routine
che ti mostra tutte le occorrenze in cui viene chiamata la routine corrente, sempre in una finestra 'dockable', così se devi modificare la routine puoi prima controllare dove e come è utilizzata la routine, per evitare poi brutte sorprese. Anche qui, doppio clic per andare alla finestra del codice.

Esempio pratico:
Ultimamente ho voluto ottimizzare (ora impiega metà tempo) una mia routine SetAdoParameter(...) che serve a creare un Parameter per un ADODB.Command.
Come si sa, la creazione di un Parameter richiede sempre di indicare il TIPO e la DIMENSIONE del campo, il che obbliga lo sviluppatore a doversi andare a guardare ogni volta la tabella sorgente, cosa alquanto tediosa!
Questa routine semplifica la creazione del Parameter perché solleva lo sviluppatore da questo onere, basta passare quattro parametri: Command, Tabella, Campo, Valore, ed al resto pensa tutto lei.
Grazie a questa funzionalità di MZ-Tools, ho potuto verificare velocemente e con molta semplicità che tutte le chiamate di questa routine ne soddisfacessero i requisiti, e non creassero problemi di sorta.
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!