Creare messaggi e guide in linea con il VBA
Impariamo come creare messaggi e guide in linea con il VBA Visual Basic for Application
Chi si intende davvero di programmazione può servirsi di Microsoft Word o di uno dei molti prodotti disponibili per preparare file di tipo rich text format (rtf) utilizzabili con il Windows Help Compiler per creare un sistema di guida a tutto tondo per la sua applicazione.
Nei database è possibile impostare proprietà che rimandano a un file di guida personalizzato.
Si può anche impostare una proprietà ID argomento Guida in maschere, report e in molti controlli per saltare a un argomento specifico all’interno di un file di guida.
Tuttavia, se l’applicazione che si sta costruendo ha bisogno soltanto di qualche finestra messaggio e di semplici spiegazioni orientative per le maschere, vi sono in Access parecchie funzionalità facili da usare, alle quali si può ricorrere per aggiungere un tocco personale alle proprie applicazioni.
Sfruttare i messaggi formattati di MsgBox
Abbiamo già visto come si usa lafunzione MsgBox per visualizzare informazioni e chiedere all’utente di dare una risposta.
I proprimessaggi di errore possono assumere un aspetto ancora più professionale sfruttando i caratteri indicatori di sezione per definire nel messaggio sezioni intestazione, descrizione del problema e soluzioni suggerite.
Per vedere come funzionano queste cose, si apra ildatabase Libri tenendo premuto il tasto Maiusc, in modo che l’applicazione non si avvi.
Se l’applicazione è già partita, fare clic sul pulsante Esci del pannello comandi principale per tornare alla finestra Database.
Trovare la maschera frmPrincipale in quella finestra e provare ad aprirla direttamente da lì.
Dovrebbe comparire una casella messaggio formattata, come quella riprodotta nella figura (figura 1).
La routine evento Su apertura (Open) della maschera genera questo messaggio quando si accorge che l’utente non si è ancora registrato. Il codice della routine è listato qui di seguito:
Private Sub Form_Open(Cancel As Integer)
If glngCurrentCustID = 0 Then
' Quanto segue esemplifica bene una MsgBox
' che utilizza le tre sezioni di Windows
If vbOK = MsgBox("No customer is currently 'signed on' to this application." & _
"@Are you sure you want to continue?" & _
"@Click OK to continue without signing on -- you won't be able to create any new orders." & _
vbCrLf & vbCrLf & "Click Cancel to return to the database window. " & _
"Start the application and sign on by opening 'frmSignon'.", _
vbQuestion + vbOKCancel, "Booksi") Then
gintPrintPreview = acPreview
Exit Sub
End If
Cancel = True
DoCmd.SelectObject acTable, "tblAuthors", True
End If
End Sub Il segreto sta nell’incorporare il carattere speciale “@“ all’interno del testo del messaggio per indicare la fine di una sezione e l’inizio di un’altra.
Quando la funzione MsgBox rileva questi caratteri delimitatori di sezione, visualizza la prima sezione in caratteri grassetto, inserisce una riga vuota dopo questa “intestazione”, presenta la seconda sezione in carattere normale e quindi visualizza la terza sezione in caratteri normali dopo aver saltato un’altra riga.
In questo caso è stata inserita un’ulteriore riga vuota includendo due volte la costante speciale VBA per un ritorno a capo e un avanzamento di riga (vbCRLF) verso la metà del testo della terza sezione.
L’unica limitazione è data dal fatto che la lunghezza totale della stringa di messaggio non può superare i 1024 caratteri.
Usare l’Assistente di Office e il fumetto Guida personalizzato
Fra le novità di Office c’è l’Assistente di Office. Questa nuova interfaccia potrà sembrare un po’ stravagante, ma è possibile programmare l’Assistente creando un oggetto “fumetto” (i messaggi di guida emessi dall’Assistente sono chiamati fumetti o baloon in inglese), definendone le proprietà e utilizzando un metodo Show per visualizzarlo.
In molte maschere del database Libri si può trovare una routine sub pubblica chiamata FormHelp, che definisce e attiva unfumetto di guida personalizzato per quella maschera. (La ragione per dichiarare pubbliche queste routine risulterà chiara fra un momento.)
Se si vuole vedere una di queste routine in azione, aprire una qualunque maschera (nell’esempio che segue si usa la maschera frmBookList) e premere il tasto F1 (il tasto universale per la Guida) quando la maschera è focalizzata.
Quel che ne esce dovrebbe assomigliare all’incirca a quanto illustrato nella figura (figura 2).
Se si ha il database Libri aperto, si può anche fare clic sul pulsante dell’Assistente di Office nella barra degli strumenti o scegliere Assistente di Office dal menu Guida.
Tutti e due hanno bisogno di barre comandi personalizzate che impareremo a creare nei prossimi tutorials.
Il tasto F1 funziona in questo modo perché il database ha una macro speciale chiamata AutoKeys.
Si può usare questa macro per intercettare qualunque tasto di funzione, i tasti Ins e Canc e il tasto Ctrl usato in combinazione con qualunque lettera, numero o tasto di funzione o con i tasti Ins e Canc.
I comandi che si programmano nella macro rimpiazzano le azioni normali di queste battute da tastiera.
Si può vedere la macro AutoKeys per il database Libri nella figura (figura 3).
Il concetto è davvero molto semplice. Nella colonna Nome macro si immette il codice speciale del tasto che si vuole intercettare. L’elenco dei tasti è riportato nella tabella qui sotto.
Nome macro Autokeys
Tasto intercettato
^lettera o ^numero
Ctrl-[qualunque tasto di lettera o di numero]
{Fn}
Il tasto di funzione richiamato (F1-F12)
^ {Fn} Ctrl+[il tasto di funzione richiamato]
+ {Fn} Maiusc+ [il tasto di funzione richiamato] [Insert]
Ins
? [Insert] Ctrl+Ins
+ [Insert] Maiusc+Ins
[Delete] o [Del]
Canc
^ [Delete] o ^[Del] Ctrl+Canc
+ [Delete] o +[Del] Maiusc+Canc
Si possono aggiungeretest nellacolonna Condizione e, naturalmente, bisogna definire almeno una azione macro nella colonna Azione.
In questo caso, la macro intercetta soltanto il tasto di funzione F1 e attiva unafunzione chiamata FormA ssist.
Si può trovare la funzione FormAssist nel modulo modutility. Il codice è listato qui di seguito
Public Function FormAssist()
' Funzione di carattere generico per rispondere a OnAction su
' comandi di menu personalizzati o di barre degli strumenti
' La funzione controlla se c’è una maschera attiva,
' quindi cerca un gestore per la subroutine “ForniHelp”
' su quella maschera.
Dim frm As Form
' Imposta un’intercettazione di errore
On Error Resume Next
' Cerca di localizzare la maschera che ha il focus
Set frm = Screen.ActiveForm
If Err <> 0 Then
' Error means no active form,
' so open standard Office Assistant
Application.Assistant.Help
Exit Function
End If
' Nessun errore, quindi chiama il metodo FormHelp
' sulla maschera attiva
frm.FormHelp
If Err <> 0 Then
' Error means no FormHelp method for
' the current form,
' so open standard Office Assistant
Application.Assistant.Help
End If
End Function Questa funzione in primo luogo controlla se qualche maschera ha il focus in visualizzazione Maschera.
Se trova una maschera, verifica se questa ha una routine sub pubblica chiamata FormHelp, che chiama come metodo dell’oggetto maschera.
Come si ricorderà, Access costruisce tutte le routine funzione e sub nei moduli delle maschere e dei report comeprivate, il che significa che normalmente possono essere chiamate soltanto da altre routine all’interno dello stesso modulo.
Si vedrà nell’esempio di codice che segue che FormHelp è definita invece come routine sub pubblica, in modo da poter essere chiamata da questa funzione esterna, FormAssist.
Se non c’è una maschera attiva o se la maschera non ha la routine sub di guida, la funzione passa per default a chiamare il metodo Help dell’Assistente di Office.
Per chiamare direttamente l’Assistente di Office, bisogna aggiungere nel database un riferimento alla libreria Office VBA.
Questo si può fare aprendo un qualunque modulo, scegliendo Riferimenti dal menu Strumenti e quindi selezionando Microsoft 0ffice X.0 Object Library (dove X è la versione: 8 per Access97, 9 per Access 2000, 10 per Access 2002, 11 per Access 2003) (figura 4).
L’azione vera e propria si manifesta nellaroutine sub FormHelp di ciascuna maschera. Qui di seguito riportiamo la routine sub della maschera frmBookList.
Public Sub FormHelp()
' Metodo personalizzato per l’Assistente di questa maschera
Dim balCurrent As Balloon
' Crea un nuovo fumetto per 1 ‘Assistente
Set balCurrent = Assistant.NewBalloon
With balCurrent
' Imposta il tipo di fumetto con pallini
.BalloonType = msoBalloonTypeBullets
' Imposta la modalità su chiusura automatica non appena
' l’utente fa clic da qualche altra parte
.Mode = msoModeAutoDown
' Aggiunge un pulsante OK tanto per bellezza
.Button = msoButtonSetOK
' Definisce il titolo del fumetto
.Heading = "Sample Balloon Help for Book List"
' Questo è un suggerimento, quindi si deve usare l’icona giusta
.Icon = msoIconTip
' Mostra la guida in funzione dello status di Amministratore
If gintIsAdmin Then
' Usa etichette per visualizzare suggerimenti utili
.Labels(1).Text = "Click Edit to edit books you have chosen in the list."
.Labels(2).Text = "Click Edit All to edit all book records."
.Labels(3).Text = "Click Search... to open the book search criteria form."
.Labels(4).Text = "Click New to add a new book."
Else
.Labels(1).Text = "Click View to view books you have chosen in the list."
.Labels(2).Text = "Click View All to view all book records."
.Labels(3).Text = "Click Search... to open the book search criteria form."
End If
' Imposta il testo del titolo all ‘interno del fumetto
.Text = "Choose one or more books, then select the option you want."
' Attiva il fumetto
.Show
' Il codice si ferma fino a quando l’utente chiude il fumetto
End With
End Sub Dopo aver aggiunto un riferimento alla Microsoft Office X.0 Object Library, si può usare il visualizzatore oggetti per esplorare le proprietà e i metodi dell’oggetto Balloon.
Il codice di esempio qui sopra si serve dell’enunciato With per semplificare i riferimenti a proprietà e metodi dell’oggetto Balloon.
Il codice imposta il fumetto come un semplice elenco puntato con pallini. Il testo è definibile all’interno di un massimo di cinque etichette incorporate.
L’impostazione di Mode su msoModeAutoDown significa che il fumetto si chiude non appena l’utente fa clic in un punto qualunque della finestra, compreso il pulsante OK che sta all’interno del fumetto.
Come si può vedere nella figura, il testo definito comeHeading (intestazione) compare in grassetto in cima al fumetto e il testo definito per le etichette (label) compare subito sotto in caratteri normali.
Esempi di accesso ai dati con VBA Microsoft Access
Tutorials su Microsoft Access
Dr.Maurizio Cucchiara
autore del corso:
"Corso Base di Microsoft Access"
disponibile on line su questo sito
MC2 E-Learning S.a r.l.
Formazione per il Web
http://www.mc2.it/html/access.html
Cerca sul web con Google:
Ricerca personalizzata
