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?
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:
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
À l'appui de cela, il y a:
Trois nouveaux mots-clés (2 types de données et 1 modificateur):
LongPtr
,LongLong
etPtrSafe
Une nouvelle fonction:
CLngLng()
(i.e. Int64)les nouvelles constantes de compilation utilisées :
VBA7
etWin64
Cette pièce sur MSDN a plus sur les changements dans VBA 7 pour Office 2010:
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.