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.