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 les Applications 7.0. Cependant, je ne trouve pas beaucoup de documentation sur les changements apportés. Quelqu'un aurait-il un résumé des changements, ou toutes les ressources de décrire les différences?

41
demandé sur Todd Main 2010-06-18 22:54:34

4 réponses

il n'y a pas beaucoup de choses qui ont changé entre VBA6 et VBA7. VBA7 a été introduit pour prendre en charge les versions 64 bits de Office et Windows (voir ci-dessous sur ce que sont ces différences). Voici les principaux changements:

  1. prise en charge 64 bits, principalement pour l'API appels. Ceci est à la fois utilisé pour faire fonctionner votre code avec votre version OS/Office ainsi que d'autres' (c.-à-d. quelqu'un sur Office 2003/WinXP)

    • Si vous êtes sur un 64 bits la version de Windows, mais sont sur une version 32 bits de bureau, vous pouvez déclarer les appels API comme ci-dessous. .

      #If Win64 Then
          Declare PtrSafe Function GetTickCount64 Lib "kernel32"() As LongLong
      #Else
          Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
      #End If
    • si vous utilisez une version 64 bits de Windows,et sont sur une version 64 bits de bureau, vous pouvez déclarer les appels API comme: .

      #If VBA7 Then
         Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
             ByVal lpClassName As String, _
             ByVal lpWindowName As String) As LongPtr
       #Else
         Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
             lpClassName As String, ByVal lpWindowName As String) As Long
      #End If
  2. À l'appui de cela, il y a:

    • Trois nouveaux mots-clés (2 types de données et 1 modificateur): LongPtr, LongLong et PtrSafe

    • Une nouvelle fonction:CLngLng()(i.e. Int64)

    • les nouvelles constantes de compilation utilisées :VBA7 et Win64

40
répondu Todd Main 2015-04-13 12:12:07
10
répondu Lunatik 2010-06-21 08:23:48

VBA7 est compatible avec les versions 64 bits de Office.

7
répondu buckbova 2010-06-18 19:03:11

Il y a d'autres changements... Des utilisateurs sur le terrain rapportent que le code qui fonctionnait correctement en 2007 ne fonctionne plus et montre des erreurs.

exemple, cela fonctionne dans 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, saute par-dessus 15 caractères et devient 4 d'entre eux, le résultat est stocké dans mynewdata. Il échoue en VBA7 (Excel 2010).

j'ai trouvé une solution de contournement potentiel...

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 fichier.

0
répondu Askjerry 2012-12-09 15:10:28