J'ai remarqué qu'Office 2010 est fourni avec Visual Basic pour Applications 7.0. Cependant, je n'arrive pas à trouver beaucoup de documentation sur les modifications apportées. Quelqu'un at-il un résumé des modifications ou des ressources décrivant les différences?
Réponses
Trop de publicités?Il n'y a pas beaucoup qui a changé entre VBA6 et VBA7. VBA7 a été introduit pour prendre en charge des versions 64 bits de Office et Windows (voir ci-dessous sur ce que ces différences sont). Voici les principaux changements:
-
Prise en charge 64 bits, principalement pour l'API les appels. C'est à la fois utilisé pour faire de votre code fonctionne avec votre système d'exploitation/version d'Office ainsi que les autres " (c'est à dire quelqu'un sur Office 2003/WinXP)
-
Si vous êtes sur une version 64 bits de Windows, mais sur une version 32 bits de Bureau, vous pouvez déclarer les appels d'API comme ci-dessous. .
#Si Win64 Alors Déclarer PtrSafe Fonction GetTickCount64 Lib "kernel32"() Comme LongLong #Else Déclarer PtrSafe Fonction GetTickCount Lib "kernel32" () as Long #Fin De Si
-
Si vous êtes sur une version 64 bits de Windows, et sont sur une version 64 bits de Bureau, vous pouvez déclarer les appels d'API comme: .
#Si VBA7 Alors Déclarer PtrSafe la Fonction FindWindow Lib "user32" Alias "FindWindowA" ( _ ByVal lpClassName as String, _ ByVal lpWindowName as String) as LongPtr #Else Déclarer une Fonction FindWindow Lib "user32" Alias "FindWindowA" (ByVal _ lpClassName as String, ByVal lpWindowName as String) as Long #Fin De Si
-
-
Pour ce faire, il y a:
Trois nouveaux mots-clés (2 types de données et 1 modificateur): LongPtr, LongLong et PtrSafe
Une nouvelle fonction: CLngLng() (c'est à dire Int64)
La nouvelle compilation des constantes utilisées ci-dessus:
VBA7
etWin64
Il y a d'autres changements... je vais avoir des utilisateurs dans le domaine du rapport que le code qui fonctionnait correctement en 2007 ne fonctionne plus et affiche des erreurs.
Exemple, cela fonctionne en VBA6 (Excel 2007)
PRINT STRING$(80,"=")
mynewdata = MID$(mydata, 15,4)
Il imprime une ligne faite de "=" caractères comme une pause visuelle, puis regarde mydata, sauts de plus de 15 caractères et obtient 4 d'entre eux, le résultat est stocké dans mynewdata. Il échoue dans VBA7 (Excel 2010).
J'ai trouvé une solution de contournement potentiel...
PRINT VBA.STRING$(80,"=")
mynewdata = VBA.MID$(mydata, 15,4)
OU
PRINT VBA.STRING(80,"=")
mynewdata = VBA.MID(mydata, 15,4)
Une liste complète des changements pourraient encore être utiles... et/ou un convertisseur de fichier.