web-dev-qa-db-fra.com

Quelles sont les différences entre VBA 6.0 et VBA 7.0?

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?

43
romandas

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:

  1. 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
  2. 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

44
Todd Main
10
Lunatik

VBA7 est compatible avec les versions 64 bits d'Office.

7
buckbova

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.

0
Askjerry