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 a-t-il un résumé des changements ou des ressources décrivant les différences?
Il n'y a pas grand-chose qui ait changé entre VBA6 et VBA7. VBA7 a été introduit pour prendre en charge les versions 64 bits d'Office et de Windows (voir ci-dessous quelles sont ces différences). Voici les principaux changements:
prise en charge 64 bits, principalement pour les appels API. Ceci est à la fois utilisé pour faire fonctionner votre code avec votre version OS/Office ainsi qu'avec d'autres (c'est-à-dire quelqu'un sur Office 2003/WinXP)
Si vous utilisez une version 64 bits de Windows, mais une version 32 bits d'Office, vous pouvez déclarer des appels d'API comme ci-dessous. .
#Si Win64 Alors Déclarer la fonction PtrSafe GetTickCount64 Lib "kernel32" () comme LongLong # Sinon Déclarer la fonction PtrSafe GetTickCount Lib "kernel32" () Comme Long #Fin si
Si vous utilisez une version 64 bits de Windows, et utilisez une version 64 bits d'Office, vous pouvez déclarer des appels API comme:.
#Si VBA7 Alors Déclarez la fonction PtrSafe FindWindow Lib "user32" Alias "FindWindowA" (_ ByVal lpClassName As String, _ ByVal lpWindowName As String) As LongPtr #Else Déclarer la fonction FindWindow Lib "user32" Alias "FindWindowA" (ByVal _ LpClassName As String, ByVal lpWindowName As String) As Long # End If
Pour soutenir cela, il existe:
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)
Les nouvelles constantes de compilation utilisées ci-dessus : VBA7
et Win64
Cette pièce sur MSDN contient plus sur les changements dans VBA 7 pour Office 2010:
VBA7 est compatible avec les versions 64 bits d'Office.
Il y a aussi d'autres changements ... J'ai des utilisateurs sur le terrain qui rapportent que le code qui a fonctionné correctement en 2007 ne fonctionne plus et affiche des erreurs.
Exemple, cela fonctionne dans VBA6 ( Excel 2007 )
PRINT STRING$(80,"=")
mynewdata = MID$(mydata, 15,4)
Il imprime une ligne composée de caractères "=" comme une rupture visuelle, puis regarde mesdonnées, saute par-dessus 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 potentielle ...
PRINT VBA.STRING$(80,"=")
mynewdata = VBA.MID$(mydata, 15,4)
OR
PRINT VBA.STRING(80,"=")
mynewdata = VBA.MID(mydata, 15,4)
Une liste complète des modifications serait toujours utile ... et/ou un convertisseur de fichiers.