1. "&" remplace "+"
2. La dénomination des variables doit être sensible à la casse, les instructions doivent être bien organisées et la maintenance du code source doit être effectuée
3. Veuillez développer les bonnes habitudes suivantes en matière de « convention de dénomination des objets »
4. Dans le cas de conditions de sélection simples, utilisez la fonction IIf()
5. Essayez d'utiliser Debug.Print pour le débogage
6. Lorsque vous modifiez à plusieurs reprises les propriétés d'un objet, essayez d'utiliser With....End With
7. Essayez d'utiliser des icônes de message dans MsgBox afin que le programme soit plus standardisé. 8. Utilisez des énumérations lorsque cela est possible.
1. "&" remplace "+"
Dans de nombreux langages de programmation, "+" est utilisé pour connecter des chaînes, ce qui peut facilement conduire à une ambiguïté. Une bonne pratique consiste à utiliser "&" pour concaténer des chaînes.
Incorrect:
Dim sMessage sous forme de chaîne
sMessage = "1" + "2"
correct:
Dim sMessage sous forme de chaîne
sMessage = "1" et "2"
Remarque : Il y a un espace après "&"
2. La dénomination des variables doit être sensible à la casse, les instructions doivent être bien organisées et la maintenance du code source doit être effectuée
Comparons les deux morceaux de code suivants :
Lire du code difficile :
Dim SNAME en tant que chaîne
Dim NTURN comme entier
Si NTURN = 0 Alors
Si SNAME = "vbeden" Alors
Faire pendant que NTURN <4
NTURN = NTURN + 1
Boucle
Fin si
Fin si
Code facile à lire :
Dim sName sous forme de chaîne
Dim nTurn comme entier
Si nTour = 0 Alors
Si sName = "vbeden" Alors
Faire pendant que nTurn <4
nTour = nTour + 1
Boucle
Fin si
Fin si
[retour à l'index]
3. Veuillez développer les bonnes habitudes suivantes en matière de « convention de dénomination des objets »
Préfixes de contrôle recommandés
Exemple de préfixe de type de contrôle
Panneau 3D pnl pnlGroupe
ADO Data ado adoBiblio
Bouton animé ani aniMailBox
Case à cocher chk chkReadOnly
Combo box, drop-down list box cbo cboAnglais
Bouton de commande cmd cmdExit
Boîte de dialogue commune dlg dlgFileOpen
Communications avec comFax
Contrôle (utilisé dans les procédures lorsque le type spécifique est inconnu) ctr ctrCurrent
Données dat datBiblio
Zone de liste déroulante liée aux données dbcbo dbcboLanguage
Grille liée aux données dbgrd dbgrdQueryResult
Zone de liste liée aux données dblst dblstJobType
Combinaison de données dbc dbcAuthor
Grille de données dgd dgdTitres
Liste de données dbl dblPublisher
Répéteur de données drp drpEmplacement
Sélecteur de date dtp dtpPublished
Zone de liste de répertoire dir dirSource
Zone de liste de lecteurs drv drvTarget
Zone de liste de fichiers fil filSource
Barre de défilement plate fsb fsbMove
Formulaire à partir de frmEntry
Cadre fra fraLangue
Jauge gau gauStatut
GraphgragraRevenue
Grille grd grdTarifs
Flexgrid hiérarchique flex flexOrders
Barre de défilement horizontale hsb hsbVolume
Image img imgIcône
Combinaison d'images imgcbo imgcboProduit
ImageList ils ilsAllIcons
Étiquette lbl lblHelpMessage
Case à cocher légère lwchk lwchkArchive
Combo box léger lwcbo lwcboallemand
Bouton de commande léger lwcmd lwcmdRemove
Cadre léger lwfra lwfraSaveOptions
Barre de défilement horizontale légère lwhsb lwhsbVolume
Zone de liste légère lwlst lwlstCostCenters
Bouton d'option léger lwopt lwoptIncomeLevel
Zone de texte légère lwtxt lwoptStreet
Barre de défilement verticale légère lwvsb lwvsbYear
Ligne lin linVerticale
Zone de liste lst lstPolicyCodes
ListView lvw lvwEn-têtes
Message MAPI mpm mpmSentMessage
Session MAPI mps mpsSession
MCI mci mciVidéo
Menu mnu mnuFichierOuvrir
Vue mensuelle mvw mvwPeriod
MS Chart ch chSalesbyRegion
MS Flex grille msg msgClients
Onglet MS mst mstFirst
Conteneur OLE ole oleWorksheet
Bouton d'option opt optGender
Boîte à images pic picVGA
Clip photo clp clpBarre d'outils
ProgressBar prg prgLoadFile
Données distantes rdTitres
RichTextBox rtf rtfReport
Forme shp shpCercle
Curseur sld sldScale
Faire tourner spn spnPages
StatusBar sta staDateTime
SysInfo sys sysMonitor
Onglet TabStrip tabOptions
Zone de texte txt txtLastName
Minuterie tmr tmrAlarm
Barre d'outils tlb tlbActions
TreeView tre treOrganisation
UpDown upd updDirection
Barre de défilement verticale vsb vsbRate
-------------------------------------------------- ----------------------------------
Préfixes recommandés pour les objets d'accès aux données (DAO)
Utilisez les préfixes suivants pour indiquer les objets d'accès aux données
Exemple de préfixe d'objet de base de données
Conteneur conconReports
Base de données dbAccounts
DBEngine dbe dbeJet
Document doc docSalesReport
Champ fld fldAdresse
Groupe grp grpFinance
Index ix idxAge
Paramètre prm prmJobCode
QueryDef qry qrySalesByRegion
Enregistrement du jeu d'enregistrements recForecast
Relation rel relEmployeeDept
TableDef à déterminer à déterminerClients
Utilisateur usr usrNouveau
Espace de travail wsp wspMine
-------------------------------------------------- ----------------------------------
Les applications utilisent fréquemment de nombreux contrôles de menu et il est utile de disposer d'un ensemble unique de conventions de dénomination pour ces contrôles. En plus de la balise "mnu" initiale, le préfixe du contrôle de menu doit être développé : un préfixe supplémentaire est ajouté pour chaque niveau d'imbrication, plaçant le titre final du menu à la fin de la chaîne de nom. Le tableau ci-dessous répertorie quelques exemples.
Préfixes de menu recommandés
Nom du gestionnaire de menu de la séquence de titres de menu
Fichier Ouvrir mnuFichierOuvert
Fichier Envoyer un e-mail mnuFileSendEmail
Fichier Envoyer un fax mnuFileSendFax
Formater le caractère mnuFormatCharacter
Contenu de l'aide mnuHelpContents
Lorsque vous utilisez cette convention de dénomination, tous les membres d'un groupe de menus spécifique sont répertoriés les uns après les autres dans la fenêtre Propriétés Visual Basic. De plus, les noms des contrôles de menu indiquent clairement les éléments de menu auxquels ils appartiennent.
Choisissez un préfixe pour les autres contrôles
Les contrôles non répertoriés ci-dessus doivent être standardisés avec un préfixe unique à deux ou trois caractères pour des raisons de cohérence. Utilisez des préfixes de plus de trois caractères uniquement lorsque des éclaircissements sont nécessaires.
Conventions de dénomination des constantes et des variables
En plus des objets, les constantes et les variables nécessitent également des conventions de dénomination bien formées. Cette section répertorie les conventions recommandées pour les constantes et les variables prises en charge par Visual Basic. et discute des problèmes d'identification des types et des plages de données.
Les variables doivent toujours être définies dans la portée la plus petite possible. Les variables globales (publiques) peuvent conduire à des structures d'état extrêmement complexes et rendre la logique d'une application très difficile à comprendre. Les variables globales rendent également la réutilisation et la maintenance du code plus difficiles.
Les variables dans Visual Basic peuvent avoir les étendues suivantes
position de la déclaration de portée position visible
« Privé » dans une procédure de niveau procédure, une sous-procédure ou une procédure de fonction dans la procédure dans laquelle il est déclaré
« Privé » dans la section de déclaration d'un formulaire ou d'un module de code au niveau d'un module (.frm, .bas) Chaque procédure dans un formulaire ou un module de code
'Public' dans la section déclarations du module de code global (.bas) partout dans l'application
Dans une application Visual Basic, utilisez des variables globales uniquement lorsqu'il n'existe aucun autre moyen pratique de partager des données entre des formulaires. Lorsque des variables globales doivent être utilisées, déclarez-les dans un seul module et regroupez-les par fonction. Donnez à ce module un nom significatif pour indiquer son rôle, tel que Public.bas.
Une bonne pratique de codage consiste à écrire un code aussi modulaire que possible. Par exemple, si votre application affiche une boîte de dialogue, placez tous les contrôles et le code nécessaires pour compléter la boîte de dialogue dans un seul formulaire. Cela permet d'organiser le code de l'application en composants utiles et de réduire sa surcharge d'exécution.
À l'exception des variables globales (qui ne doivent pas être transmises), les procédures et fonctions ne doivent opérer que sur les objets qui leur sont transmis. Les variables globales utilisées dans une procédure doivent être identifiées dans la section de déclaration au début de la procédure. De plus, ByVal doit être utilisé pour transmettre des paramètres aux procédures Sub et aux procédures de fonction, sauf s'il existe un besoin évident de modifier la valeur du paramètre transmis.
À mesure que la taille du projet augmente, le travail de cadrage des variables augmente rapidement. Placer un préfixe de plage d'une seule lettre devant le préfixe de type marque cette croissance, mais la longueur du nom de la variable n'augmente pas beaucoup.
préfixe de portée variable
Exemple de préfixe de plage
Nom d'utilisateur gstr global
Niveau du module mmblnCalcInProgress
Local à traiter sans dblVelocity
Si une variable est déclarée comme Public dans un module standard ou un module de formulaire, alors la variable a une portée globale. Si une variable est déclarée Private dans un module standard ou un module de formulaire respectivement, alors la variable a une portée au niveau du module.
Remarque : La cohérence est essentielle pour utiliser cette technique efficacement ; le vérificateur de syntaxe de Visual Basic ne détectera pas les variables au niveau du module commençant par « p ».
constante
Le corps d'un nom de constante est en casse mixte, la première lettre de chaque mot étant en majuscule. Bien que les constantes Visual Basic standard ne contiennent pas d'informations sur le type de données et la plage, les préfixes tels que i, s, g et m sont utiles pour comprendre la valeur et la plage d'une constante. Pour les noms de constantes, les mêmes règles doivent être suivies que pour les variables. Par exemple:
mintUserListMax 'Limite maximale sur la liste des utilisateurs
'(valeur entière, locale au module)
gstrNewLine 'Caractère de nouvelle ligne
'(Chaîne, utilisée globalement par l'application)
variable
La déclaration de toutes les variables permettra de gagner du temps de programmation car il y aura moins d'erreurs causées par les opérations de saisie (par exemple, s'agit-il de aUserNameTmp, sUserNameTmp ou sUserNameTemp). Dans l'onglet Editeur de la boîte de dialogue Options, cochez l'option Exiger une déclaration de variable. L'instruction Option Explicit nécessite que toutes les variables soient déclarées dans le programme Visual Basic.
Les variables doivent être préfixées pour indiquer leur type de données. Et le préfixe peut être étendu pour indiquer une portée variable, en particulier pour les grands programmes.
Utilisez les préfixes suivants pour indiquer le type de données d'une variable.
Type de données variables
Exemple de préfixe de type de données
Chaîne (Type de chaîne) str strFName
Entier (type entier court) int intQuantity
Long (type entier long) lng lngDistance
Single (type de nombre à virgule flottante simple précision) sng sngAverage
Double (type à virgule flottante double précision) dbl dblTolerance
Booléen (type booléen) bln blnFound
Octet (type d'octet) byt bytRasterData
Date (type de date) dte dteNow
Devise (calcul de devise et type de calcul à virgule fixe) cur curRevenue
Objet (type d'objet) obj objCurrent
Variante vnt vntCheckSum
Décrire les noms de variables et de procédures
Le corps d'un nom de variable ou de procédure doit être en casse mixte et doit être suffisamment long pour décrire son objectif. De plus, le nom de la fonction doit commencer par un verbe, tel que InitNameArray ou CloseDialog.
Pour les termes fréquemment utilisés ou longs, il est recommandé d’utiliser des abréviations standards pour rationaliser la longueur du nom. D'une manière générale, les noms de variables de plus de 32 caractères sont difficiles à lire sur un moniteur VGA.
Lorsque vous utilisez des abréviations, assurez-vous qu’elles sont cohérentes dans toute l’application. Dans un projet, si vous utilisez Cnt pendant un certain temps et Count pendant un certain temps, cela entraînera une confusion inutile.
type défini par l'utilisateur
Dans un grand projet comportant de nombreux types définis par l'utilisateur, il est souvent nécessaire de donner à chaque type son propre préfixe à trois caractères. Si ces préfixes commencent par « u », il est facile d'identifier rapidement ces types lorsque vous travaillez avec un type défini par l'utilisateur. Par exemple, ucli peut être utilisé comme préfixe pour une variable de type client définie par l'utilisateur.
[retour à l'index]
4. Dans le cas de conditions de sélection simples, utilisez la fonction IIf()
Le code de Rosso :
Si nNum = 0 Alors
sNom = "sancy"
Autre
sNom = "Xu"
Fin si
Code simple :
sName=IIf(nNum=0,"sancy","Xu")
5. Essayez d'utiliser Debug.Print pour le débogage
Dans de nombreux débogages débutants, MsgBox est utilisé pour suivre les valeurs des variables. En fait, Debug.Print peut non seulement obtenir le même effet, mais sera également ignoré lors de la compilation finale du programme et devra être commenté ou supprimé manuellement.
en général:
MsgBox nNom
devrait:
Debug.Print nName
6. Lorsque vous modifiez à plusieurs reprises les propriétés d'un objet, essayez d'utiliser With....End With
en général:
Formulaire1.Hauteur = 5000
Form1.Largeur = 6000
Form1.Caption = "Voici MyLabel"
devrait:
Avec Form1
.Hauteur = 5000
.Largeur = 6000
.Caption = "Voici MonÉtiquette"
Terminer par
L'efficacité d'exécution du programme de cette structure est relativement élevée, en particulier dans les instructions de boucle.
7. Essayez d'utiliser des icônes de message dans MsgBox afin que le programme soit plus standardisé.
En général
vbInformation est un message utilisé pour demander une confirmation ou une opération réussie
vbExclamation est utilisé pour afficher des messages d'avertissement
vbMessages critiques utilisés pour déclencher des situations de crise
vbQuestion est un message utilisé pour poser des questions
[retour à l'index]
8. Utilisez des énumérations lorsque cela est possible
Le format de l'énumération est
[Public | Privé] Nom de l'énumération
nom de membre [= expression constante]
nom de membre [= expression constante]
....
Fin de l'énumération
L'instruction Enum contient les parties suivantes :
description partielle
Public Facultatif. Indique que le type Enum est visible tout au long du projet. La valeur par défaut pour les types Enum est Public.
Privé facultatif. Indique que le type Enum n'est visible que dans le module déclaré.
nom requis. Le nom de ce type Enum. name doit être un identifiant Visual Basic légal utilisé pour spécifier le type lors de la définition d'une variable ou d'un paramètre de ce type Enum.
nom de membre requis. Un identifiant Visual Basic légal qui spécifie le nom des éléments constitutifs de ce type Enum.
expression constante facultative. La valeur de l'élément (de type Long). Peut être d’autres types Enum. Si constanteexpression n'est pas spécifiée, la valeur attribuée est soit 0 (si l'élément est le premier nom de membre), soit supérieure à la valeur de son prédécesseur immédiat.
illustrer
Les variables dites d'énumération font référence à des variables définies avec le type Enum. Les variables et les paramètres peuvent être définis comme type Enum. Les éléments de type Enum sont initialisés à la valeur constante spécifiée dans l'instruction Enum. La valeur attribuée peut inclure des nombres positifs et négatifs et ne peut pas être modifiée au moment de l'exécution. Par exemple:
Enum SecurityLevel IllegalEntry = -1 SecurityLevel1 = 0 SecurityLevel2 = 1 Fin Enum
Les instructions Enum ne peuvent apparaître qu'au niveau du module. Après avoir défini le type Enum, vous pouvez l'utiliser pour définir des variables, des paramètres ou des procédures qui renvoient ce type. Les types d'énumération ne peuvent pas être qualifiés avec des noms de module. Les types Public Enum dans un module de classe ne sont pas membres de la classe ; ils sont simplement écrits dans la bibliothèque de types. Les types d'énumération définis dans les modules standard ne sont pas écrits dans la bibliothèque de types. Les types Public Enum portant le même nom ne peuvent pas être définis à la fois dans un module standard et dans un module de classe car ils partagent le même espace de noms. S'il existe deux types Enum dans des bibliothèques de types différentes avec le même nom mais des membres différents, la référence à une variable de ce type dépendra de la bibliothèque de types ayant une priorité de référence plus élevée.
Vous ne pouvez pas utiliser le type Enum comme cible dans un bloc With.
Exemple d'instruction Enum
L'exemple suivant montre l'utilisation de l'instruction Enum pour définir une collection de constantes nommées. Dans ce cas, certaines constantes de couleur sélectionnables sont utilisées pour concevoir le formulaire de saisie de données pour la base de données.
Couleurs d'interface d'énumération publique
icMistyRose = &HE1E4FF&
icSlateGray = &H908070&
icDodgerBlue = &HFF901E&
icDeepSkyBlue = &HFFFF00&
icSpringGreen = &H7FFF00&
icForestGreen = &H228B22&
icGoldenrod = &H20A5DA&
icFirebrick = &H2222B2&
Fin de l'énumération
L'avantage est que cela accélère la programmation