Access
 sql >> Base de données >  >> RDS >> Access

Visual Basic pour les applications dans Microsoft Access

Présentation

Microsoft Access comprend un certain nombre de fonctionnalités permettant aux développeurs de bases de données de créer des formulaires de saisie de données, des rapports et des requêtes qui peuvent guider les utilisateurs dans l'interrogation des données existantes dans la base de données et la saisie de nouvelles données. Divers outils de création de requêtes et d'assistants facilitent ce processus de développement. Cependant, même avec ces outils, il peut arriver que le développeur souhaite ajouter encore plus de fonctionnalités qui ne sont pas déjà fournies par les outils de développement MS Access. Par exemple, le développeur peut souhaiter corriger automatiquement les mauvaises données avant qu'elles ne soient enregistrées dans la base de données, afficher une alerte en cas de violation d'une règle métier, aider l'utilisateur à naviguer d'un formulaire de saisie de données à un autre ou lancer un rapport avec des filtres personnalisés. La façon d'accomplir une telle personnalisation consiste à ajouter du code à l'aide du langage de programmation Visual Basic pour Applications.

Visual Basic pour Applications (VBA) est le langage de programmation utilisé dans la famille de produits logiciels Microsoft Office tels qu'Excel et Access. Le langage VBA est dérivé du langage "Basic" inventé en 1964 qui est devenu populaire sur les ordinateurs personnels dans les années 1970. La partie "Visuel" du nom a été ajoutée par Microsoft pour refléter l'utilisation du langage de programmation de base dans Microsoft Windows.

Il existe de nombreux didacticiels qui présentent la programmation de base. Ce didacticiel se concentrera sur un petit sous-ensemble de fonctionnalités du langage VBA utilisé dans MS Access.

Contenu

  • Événements dans Microsoft Access
  • Exemple de code VBA :s'assurer que les noms sont dans la casse appropriée
  • Le langage VBA – Déclarer et attribuer des variables, des instructions conditionnelles et des commentaires
  • Le langage VBA – Fonctions, méthodes et exemples
  • Le langage VBA – Propriétés
  • Exercices de codage VBA
  • Gestion des erreurs dans VBA
  • Exécuter des requêtes SQL personnalisées dans VBA

La page suivante présente les événements dans Microsoft Access.

Événements dans Microsoft Access

Dans Access, le code de programmation VBA est attaché aux formulaires et aux rapports et peut être configuré pour s'exécuter à un moment précis ou en réaction à un événement spécifique. Ce style de programmation est parfois appelé programmation "basée sur les événements", ce qui signifie que le code écrit par le développeur s'exécutera en réponse à un événement .

Lorsqu'un formulaire est affiché en mode formulaire, il interroge généralement toutes les données existantes des tables sous-jacentes, puis reste inactif jusqu'à ce que l'utilisateur fasse quelque chose. Par exemple, l'utilisateur peut cliquer sur l'un des boutons de navigation pour passer à l'enregistrement suivant, il peut cliquer dans une zone de texte et commencer à saisir de nouvelles données ou il peut cliquer sur le bouton Fermer pour fermer le formulaire. Chacune de ces actions se traduit par un événement passe sous la forme. Chaque clic de souris ou coup de clavier est traité comme un événement.

Pour la plupart, les événements ont un comportement par défaut. Cliquer sur le bouton de navigation « enregistrement suivant » fait défiler le formulaire jusqu'à l'enregistrement de données suivant. Si vous tapez la lettre "C" lorsque le curseur se trouve dans une zone de texte, la lettre "C" apparaît dans la zone de texte. En appuyant sur la touche TAB, le curseur passe à la zone de texte (ou contrôle) suivante sur le formulaire et ainsi de suite. Un programmeur peut remplacer ou améliorer ce comportement par défaut et insérer son propre code à exécuter en réponse à l'événement.

La programmation VBA sur les formulaires d'accès et les rapports se concentre principalement sur l'écriture de code pour répondre à différents événements.

Avant de plonger dans les détails des événements, il peut être instructif de mettre en œuvre un exemple simple. Pour voir du code en action, la section suivante de ce didacticiel fournit une procédure pas à pas pour ajouter du code VBA à un formulaire de saisie de données.

Exemple de code VBA :s'assurer que les noms sont dans la casse appropriée

Ce qui suit est un exemple relativement bref et simple d'ajout de code VBA à un formulaire de saisie de données dans MS Access. Plusieurs détails seront ignorés par souci de brièveté. Après cet exemple, le reste de ce didacticiel remplira ces détails.

Cet exemple utilise le Client formulaire de saisie de données qui a été personnalisé dans le didacticiel Advanced MS Access Forms. Vous souhaiterez peut-être suivre ce didacticiel (ou au moins les parties traitant du formulaire de saisie des données client) avant de continuer.

Lors de la saisie de nouvelles informations client, nous souhaitons nous assurer que les noms du client sont saisis dans la « casse appropriée ». Autrement dit, la première lettre du nom doit être une majuscule et le reste du nom doit être en minuscule. Si l'utilisateur saisit :"joe", nous aimerions que le formulaire corrige automatiquement cette casse avec la casse appropriée :"joe".

En termes d'événements, nous ajouterons du code qui est connecté à l'événement Après la mise à jour pour le champ Prénom du formulaire client. Cela signifie que après quelque chose a été changé (mis à jour ) dans le champ Prénom, l'événement Après la mise à jour sera déclenché, puis le code que nous écrirons entrera en action pour s'assurer que le nom saisi est converti dans la casse appropriée.

Les étapes suivantes mettent ce code en place.

  1. Ouvrez la saisie des données client en mode Conception.
  2. Cliquez avec le bouton droit sur le Prénom zone de texte et sélectionnez Propriétés dans le menu contextuel.
  3. Lorsque la fiche de propriété s'affiche, cliquez sur l'onglet Événement. Ceci est illustré dans la figure ci-dessous :

    Notez la liste des événements affichés. Chacun peut être programmé pour répondre à l'événement spécifique qui arrive au Prénom zone de texte.

  4. Créez un nouveau gestionnaire d'événements en cliquant sur les trois points à droite de l'événement Après la mise à jour.
  5. Le choisir constructeur fenêtre apparaîtra. Sélectionnez Créateur de code puis cliquez sur OK bouton.
  6. La fenêtre d'édition du code VBA apparaîtra. Notez qu'Access a déjà créé le stub de la sous-routine qui commence par les mots Private Sub et se termine par les mots End Sub.
    Le nom de la sous-routine est créé à l'aide du nom du contrôle de formulaires (FirstName) et du nom du Evénement auquel cette sous-routine répondra (AfterUpdate).

    La ligne End Sub est l'endroit où ce sous-programme particulier se terminera.

  7. Ajoutez le code suivant sur la ligne vide entre Private Sub et End Sub. :
    FirstName = StrConv(FirstName, vbProperCase)
    
    

    Une fois terminé, le code apparaîtra comme suit :

    Cette nouvelle ligne de code effectue les opérations suivantes :

    StrConv est une fonction qui prend le contenu de la zone de texte FirstName et le convertit en fonction du deuxième paramètre donné qui est vbProperCase dans cet exemple. Une fois cette conversion effectuée, le résultat sera attribué (à l'aide du signe égal) à la zone de texte FirstName. Cela écrasera tout ce qui se trouve actuellement dans la zone de texte FirstName. Par exemple, cette fonction prendra "sally", le convertira en "Sally" puis mettra "Sally" dans la zone de texte FirstName.

  8. Enregistrez ce nouveau code en déroulant le Fichier menu et en sélectionnant Enregistrer .
  9. Testez le nouveau code. Revenez à l'écran du mode de conception de Microsoft Access. Modifiez la vue en mode formulaire.
  10. Accédez à un enregistrement vide. Cliquez sur le champ Prénom et saisissez un nom en toutes lettres minuscules :

  11. Appuyez sur Tab touche pour passer à la zone de texte suivante. Le nom de Joe doit être remplacé par "Joe" comme indiqué ci-dessous :
  12. Si vous recevez une erreur, revenez à l'éditeur de code VBA et assurez-vous d'avoir correctement orthographié toutes les parties du code. Vous devrez peut-être dérouler le bouton Exécuter menu et sélectionnez Réinitialiser afin d'arrêter l'exécution du code VBA.

L'exemple ci-dessus a fourni un aperçu rapide de la façon dont on peut personnaliser le comportement d'un formulaire pour aider l'utilisateur à entrer des données bien formatées dans la base de données. Plusieurs détails ont été ignorés au cours de cet exemple et ces détails seront abordés dans le reste de ce didacticiel.

Le langage VBA

Cette section présente brièvement les principales parties du langage VBA tel qu'il est utilisé dans MS Access. Un aperçu complet de VBA dépasse le cadre de ce didacticiel. Des références à des livres et des documents plus complets sont fournies à la fin de ce didacticiel.

Déclarer des variables

Une variable est un nom donné à un espace réservé où le programmeur peut stocker des données. Par exemple, une variable peut être utilisée pour stocker un nombre pendant que nous effectuons des opérations mathématiques dessus ou que nous comparons sa valeur à d'autres variables. Les variables peuvent être déclarées pour contenir des valeurs d'un type de données spécifique tels que des entiers, des chaînes ou des dates. Pour déclarer une nouvelle variable, utilisez l'instruction Dim. Par exemple, pour déclarer une nouvelle variable nommée MonNom et configurez-le pour qu'il contienne une chaîne (caractères), procédez comme suit :

Dim strMyName As String

Pour déclarer une nouvelle variable nommée "AccountBalance" et la configurer pour stocker un nombre avec une décimale, utilisez ce qui suit :

Dim dblAccountBalance As Double

Attribuer des valeurs

Une valeur peut être affectée à une variable ou à un champ du formulaire à l'aide du signe égal. Par exemple, pour stocker le nom "Alex" dans la variable MyName, utilisez ce qui suit :

strMonNom ="Alex"

Pour copier le contenu de la zone de texte FirstName dans la variable MyName, utilisez :

strMonNom =[Prénom]

Les valeurs peuvent également être calculées avant d'être affectées. Par exemple, l'expression suivante prend le solde du compte actuel du client à partir de la zone de texte [Solde], ajoute 1 % d'intérêt (en multipliant le solde par 1,01), puis réduit le résultat de 10 $. Enfin, le résultat est affecté à la variable AccountBalance.

dblAccountBalance =( [Solde] * 1.01 ) – 10.00

Énoncés conditionnels

Une instruction conditionnelle utilise un test logique pour déterminer les lignes de code à exécuter ensuite. L'instruction conditionnelle If … Then est utilisée assez fréquemment. Par exemple :

If AccountBalance < 1000 Then
      MonthlyFee = 10
Else
      MonthlyFee = 0
End If

L'expression logique AccountBalance <1000 est évaluée. Si cette expression est vraie (par exemple si AccountBalance est de 400 $), la ligne suivante après Then est exécutée. Dans cet exemple, MonthlyFee =10.

Si cette expression est False, alors la ligne après Else est exécutée.

L'expression logique peut comprendre plusieurs parties reliées par les opérateurs booléens OR, AND et NOT. Une discussion plus approfondie des expressions booléennes peut être trouvée sur ce tutoriel de programmation. Par exemple, supposons que nous renoncions aux frais mensuels si le compte a moins d'un an. Supposons que nous ayons AccountAge comme âge du compte en mois. Alors le code serait :

If AccountBalance < 1000 AND AccountAge > 12 Then
      MonthlyFee = 10
Else
      MonthlyFee = 0
End If

Plusieurs lignes de code peuvent être exécutées dans les instructions If … Then et If … Then peuvent être imbriquées les unes dans les autres.

Commentaires

Lors de la programmation dans n'importe quel langage de programmation, il est recommandé d'inclure des commentaires qui décrivent le code. Dans VBA, un commentaire peut être inclus en commençant par un seul guillemet. En prenant ce qui précède comme exemple, nous pourrions ajouter les commentaires suivants :

D'autres parties du langage VBA sont abordées à la page suivante.

Langage VBA – Suite

Fonctions

Le langage VBA possède un grand nombre de fonctions et de méthodes intégrées qui peuvent être utilisées pour effectuer diverses tâches telles que des fonctions mathématiques (sin, cos, tan), des fonctions de chaîne et bien d'autres. Les fonctions ont généralement un ou plusieurs paramètres d'entrée qui sont utilisés par la fonction. Par exemple, dans la fonction Cos(45), le "45" est l'angle d'entrée sur lequel la fonction cosinus opérera. La fonction StrConv nécessite deux paramètres d'entrée :la chaîne à convertir et le style de conversion :

StrConv(Prénom, vbProperCase)

Certaines fonctions pratiques incluent :

MsgBox (invite, boutons, titre) Afficher une boîte de message contextuelle avec le texte de l'invite, les boutons et le titre
StrConv( expression, style ) Convertir l'expression de chaîne en majuscule, minuscule ou casse appropriée
Gauche( expression, caractères ) Prenez les caractères les plus à gauche de l'expression de chaîne
Mid( expression, start, characters ) Prenez le jeu de caractères du milieu de l'expression de chaîne en commençant par start
EstNull( expression ) Tester si l'expression de chaîne (ou la zone de texte) n'a pas de contenu (est nul)
Nz( expression, value_if_null ) Si l'expression est nulle, renseignez une valeur par défaut
Maintenant() Renvoie la date et l'heure actuelles
Arrondi(expression, décimales ) Arrondit l'expression numérique à un certain nombre de décimales
RVB (rouge, vert, bleu) Renvoie l'entier de couleur basé sur une combinaison de rouge, vert et bleu

Méthodes

Les méthodes dans VBA sont comme des fonctions mais elles sont connectées à un contrôle ou à un autre objet sur un formulaire ou un état.

Voici quelques méthodes pratiques :

DoCmd.CancelEvent Annule l'événement en cours en cours de traitement
DoCmd.Close Fermer le formulaire (ou la base de données) en cours
DoCmd.OpenForm Ouvre un nouveau formulaire
DoCmd.OpenReport Exécutez une commande MS Access telle que l'enregistrement de données nouvelles ou mises à jour, l'annulation d'une modification ou la sortie d'un formulaire
.SetFocus Définir le focus sur le contrôle du formulaire
.Annuler Annuler la modification ou la commande la plus récente
.Actualiser Met à jour toutes les données sous-jacentes à un formulaire
.Requête Interroge les données fournies à un formulaire
.Repeindre Repeint tous les contrôles d'un formulaire

De nombreuses autres fonctions et méthodes sont répertoriées sur ce site Microsoft.

L'ensemble d'exemples suivant utilise diverses fonctions et méthodes dans différentes combinaisons.

Exemples

Afficher un avertissement à l'utilisateur si le solde du compte est inférieur à 1 000 USD

If AccountBalance < 1000 Then
      MsgBox("Warning: The Account Balance is now less than $1,000.")
End If

Si la zone de texte FirstName du formulaire contient quelque chose, convertissez-le en cas approprié

If Not IsNull( [FirstName] ) Then
   FirstName = StrConv( [FirstName], vbProperCase )
End If

la page suivante présente les propriétés des différents objets.

Propriétés

Chaque élément d'un formulaire ou d'un rapport de saisie de données possède un ensemble de propriétés associé avec. Les propriétés contrôlent l'emplacement, la couleur, la police, l'arrière-plan et d'autres attributs d'apparence et de mise en forme de chaque contrôle. Par exemple, certaines des nombreuses propriétés d'un TextBox incluent :

Visible Détermine si la zone de texte est visible sur le formulaire
Verrouillé Détermine si les données de la zone de texte peuvent être modifiées
Index des onglets L'ordre de chaque contrôle lorsque l'utilisateur navigue dans le formulaire en appuyant sur Tab
Libellé Identifie le nom de l'étiquette associée à la zone de texte
Largeur, Hauteur, Position Haut et Bas Indique la position relative et la taille de la zone de texte
Style et couleur d'arrière-plan Définit le style d'arrière-plan et la couleur de la zone de texte
Style et couleur de la bordure Définit le style et la couleur de la bordure autour de la zone de texte
Taille de la police, épaisseur, soulignement, italique, couleur et alignement Définit la police et le style
Marges et espacement de remplissage :définit les marges et le remplissage autour de l'intérieur de la zone de texte

Les propriétés peuvent être définies à l'aide de la vue de conception et enregistrées avec le formulaire ou le rapport. Les propriétés peuvent également être modifiées à l'aide du code VBA pendant l'exécution du formulaire. Pour accéder à une propriété dans VBA, utilisez le nom du contrôle, puis un point, puis le nom de la propriété. Par exemple, le code suivant change la couleur de la police de la zone de texte CustomerID en rouge :

IDClient.ForeColor =vbRed

Les sections qui suivent fournissent des exercices qui combinent différentes parties du langage de programmation VBA pour personnaliser le comportement de divers formulaires de saisie de données.

Exercices de code VBA

Essayez les exercices suivants qui personnalisent les formulaires. Reportez-vous aux sections précédentes pour des exemples de code pouvant être adaptés à l'exercice en cours.

Exercice 1

Modifiez le formulaire CustomerDataEntry pour ajouter deux gestionnaires d'événements AfterUpdate qui convertiront le prénom et le nom en casse appropriée (créez un gestionnaire AfterUpdate distinct pour chaque zone de texte). Écrivez du code pour vérifier d'abord que la zone de texte n'est pas nulle avant de tenter de convertir le texte.

Exercice 2

Modifiez le formulaire AccountsDataEntry pour ajouter un gestionnaire d'événements AfterUpdate qui affichera une boîte de message d'avertissement si le solde du compte est inférieur à 5 000 $. Activez également la couleur de la police de la zone de texte Solde en rouge.

Exercice 3

Modifiez le formulaire de saisie des données client. Créez une sous-routine On Lost Focus qui transforme l'étiquette de la zone de texte FirstName en rouge (vbRed) si l'utilisateur quitte la zone de texte FirstName sans rien taper. Définissez l'étiquette sur bleu (vbBlue) s'il y a quelque chose dans la zone de texte. Dans l'exemple ci-dessous, rien n'a été saisi dans la zone de texte FirstName, puis l'utilisateur a tabulé jusqu'à la zone de texte suivante, ce qui a fait passer l'étiquette FirstName en rouge.

La page suivante de ce didacticiel explique comment gérer les erreurs dans le code VBA.

Gestion des erreurs dans VBA

Parfois, le code VBA rencontre une erreur. Par exemple, si une zone de texte est vide et que nous essayons de convertir le contenu de la zone de texte en casse appropriée, la fonction StrCnv échouera. Un autre exemple est la division par zéro. Sans gestion des erreurs, ces problèmes peuvent entraîner le blocage du programme VBA. Lorsqu'une erreur se produit, un code spécial peut entrer en action pour gérer l'erreur et continuer à traiter le code VBA.

Les deux principales fonctionnalités de gestion des erreurs de VBA sont l'instruction On Error Goto et l'instruction Resume Next. Ces deux instructions de code VBA fonctionnent ensemble pour empêcher VBA de planter l'application.

L'instruction On Error Goto informe VBA de ce qu'il faut faire lorsqu'une erreur se produit dans une sous-routine. La partie Goto de l'instruction fait référence à une étiquette ailleurs dans le code où le VBA continuera à fonctionner. Une fois que le programme VBA atteint l'étiquette, toute erreur apparaîtra dans un objet appelé Err. La propriété Err.Description contiendra une description textuelle de la dernière erreur rencontrée. L'instruction Resume Next entraînera la poursuite de l'exécution du programme VBA à partir du moment où l'erreur s'est produite.

L'exemple suivant développe la routine FirstName_AfterUpdate introduite au début de ce didacticiel. Désormais, le programme VBA peut gérer toutes les erreurs pouvant survenir dans le programme.

Private Sub FirstName_AfterUpdate
     ' Subroutine to convert the FirstName of the customer to Proper Case
    On Error Goto FirstName_AfterUpdate_Error_Handler
     FirstName = StrConv(FirstName, vbProperCase)
     ' If the conversion was successful, exit this subroutine
     Exit Sub
FirstName_AfterUpdate_Error_Handler:
       ' If there is an error show the description of the error
      MsgBox Err.Description
      ' Resume with the next statement In the subroutine
     Resume Next
End Sub

la section suivante de ce didacticiel explique comment inclure du code SQL dans VBA.

Exécuter des requêtes SQL personnalisées dans VBA

Structured Query Language (SQL) est le langage de programmation utilisé dans les bases de données relationnelles telles que MS Access, SQL Server, Oracle et bien d'autres. Les instructions SQL peuvent être utilisées pour insérer, mettre à jour, supprimer et récupérer (sélectionner) des enregistrements de données à partir de tables (parmi de nombreuses autres capacités). Un exemple simple d'instruction SQL serait :

SELECT customerid, firstname, lastname
FROM  customer

Le code SQL peut être écrit dans VBA et exécuté au moment opportun. Par exemple, une sous-routine VBA peut être écrite pour interroger la table Customer afin de trouver le CustomerID le plus élevé. Ensuite, nous pourrions ajouter 1 à ce nombre pour obtenir un nouveau CustomerID inutilisé pour un nouvel enregistrement.

Les étapes générales pour effectuer ce type de tâche sont :

Créer une instruction SQL

Exécutez l'instruction SQL à l'aide de la connexion à la base de données ouverte (nommée CurrentDb dans VBA)

Récupérer les enregistrements résultants et utiliser les données récupérées

Pour créer cette sous-routine VBA, ouvrez le formulaire CustomerDataEntry et obtenez les propriétés du champ CustomerID. Sous l'onglet événements, cliquez sur les trois points à droite de l'événement On Dbl Click. Choisissez Générateur de code et le stub sera créé comme suit :

Private Sub CustomerID_DblClick(Cancel As Integer)

End Sub

Ajoutez le code suivant :

Private Sub CustomerID_DblClick(Cancel As Integer)
    ' Create a new CustomerID when user double-clicks in the CustomerID field
    On Error GoTo ErrorHandler
    Dim rstResults As Recordset ' This will hold the set of result records
    Dim strSQL As String        ' This variable will hold the text of the SQL Statement
    ' If there is nothing in the CustomerID text box
    If IsNull(CustomerID) Then
       ' Make the SQL statement
       strSQL = "SELECT MAX(customerid) + 1 AS NewID FROM customer"
       ' Run the SQL query against the current database
       Set rstResults = CurrentDb.OpenRecordset(strSQL)
       ' If at least 1 record is returned
       If rstResults.EOF = False Then
          ' Assign the NewID to the CustomerID field
          CustomerID = rstResults!NewID
       End If

        rstResults.Close              ' Close up the result set
       Set rstResults = Nothing      ' Empty out the result set
    End If
    Exit Sub

ErrorHandler:
    Set rstResults = Nothing
End Sub

Le code ressemblera à ceci une fois que tout sera en place :

Enregistrez le fichier, puis affichez le formulaire CustomerDataEntry. Accédez à un nouvel enregistrement, puis double-cliquez dans le champ CustomerID. Un nouveau CustomerID devrait être automatiquement créé.