Come impostare lo stesso carattere su tutte le maschere

Quando un cliente vede l’applicativo che hai sviluppato e ti dice: “Ah, mi ero dimenticato un dettaglio. Abbiamo un nostro tipo di carattere che vorrei fosse utilizzato in tutte le maschere”, ti chiedi come impostare lo stesso carattere su tutte le maschere senza doverlo fare manualmente per tutti i controlli di tutte le maschere (e magari anche di tutti i report, se ci sono report)!

Come sempre sono sufficienti poche istruzioni di codice VBA in Microsoft Access.

In un nuovo modulo (non all’interno di un evento di una maschera) possiamo creare la nostra procedura:

Sub sSetControlProperties()
Dim obj As Object ' la variabile di tipo Object è necessaria perché la collezione AllForms restituisce un oggetto (e non un Form)
Dim frm As Form
Dim ctl As Control
' per ogni maschera esistente
For Each obj In CurrentProject.AllForms
 ' apro la maschera in struttura
 DoCmd.OpenForm obj.Name, acDesign
 ' imposto una variabile che faccia riferimento alla maschera appena aperta
 Set frm = Forms(obj.Name)
 ' per ogni controllo presente sulla maschera
 For Each ctl In frm.Controls
 ' se il controllo è casella di testo, casella di riepilogo, etichetta, controllo a schede, pulsante di comando
 If TypeOf ctl Is TextBox _
 Or TypeOf ctl Is ComboBox _
 Or TypeOf ctl Is ListBox _
 Or TypeOf ctl Is Label _
 Or TypeOf ctl Is TabControl _
 Or TypeOf ctl Is CommandButton Then
 ' imposto il nome del carattere
 ctl.FontName = "Calibri"
 ' imposto la dimensione
 ctl.FontSize = 9
 ' imposto il colore del carattere a Nero
 ctl.ForeColor = vbBlack
 ' adatto il controllo, ossia se ho diminuito la dimensione, la casella si riduce in altezza in modo da essere adatta alla nuova dimensione
 ' questo non ha nulla a che vedere con il contenuto effettivo del controllo. Non è l'AutoFit di Excel, per capirci
 ctl.SizeToFit
 End If
 Next ' prossimo controllo
 ' chiudo la maschera e salvo le modifiche
 DoCmd.Close , , acSaveYes
Next ' prossima maschera
End Sub

 

Naturalmente se le mie maschere hanno una etichetta come titolo, dovrò poi riaprire ogni maschera e reimpostarne le caratteristiche come desiderato.

Lo stesso codice può essere utilizzato per impostare le medesime proprietà sui report: si lavora con la variabile rp as Report, con la collezione AllReports e useremo DoCmd.OpenReport.