50 votes

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 at-il un résumé des modifications ou des ressources décrivant les différences?

46voto

Todd Main Points 24036

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:

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

11voto

Lunatik Points 2468

Cet article sur MSDN en dit plus sur les modifications apportées à VBA 7 pour Office 2010:

http://msdn.microsoft.com/en-us/library/ee691831(loband).aspx#odc_office2010_Compatibility32bit64bit_IntroducingVBA7CodeBase

7voto

buckbova Points 1020

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

0voto

Askjerry Points 11

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X