visual tutorial office microsoft libreria for bibliotecas applications vba ms-office office-2010

office - vba tutorial



¿Cuáles son las diferencias entre VBA 6.0 y VBA 7.0? (4)

Esta pieza en MSDN tiene más información sobre los cambios en VBA 7 para Office 2010:

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

Noté que Office 2010 viene con Visual Basic para Aplicaciones 7.0. Sin embargo, parece que no puedo encontrar mucha documentación sobre los cambios que se hicieron. ¿Alguien tiene un resumen de los cambios o cualquier recurso que describa las diferencias?


No hay mucho que haya cambiado entre VBA6 y VBA7. VBA7 se introdujo para admitir las versiones de 64 bits de Office y Windows (consulte a continuación cuáles son esas diferencias). Aquí están los cambios clave:

  1. Soporte de 64 bits, principalmente para llamadas API . Esto se usa para hacer que su código funcione con su versión de OS / Office y con otros (es decir, alguien en Office 2003 / WinXP)

    • Si está en una versión de 64 bits de Windows, pero tiene una versión de 32 bits de Office, puede declarar las llamadas de API como a continuación. .

      #If Win64 Then Declare PtrSafe Function GetTickCount64 Lib "kernel32"() As LongLong #Else Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long #End If

    • Si tiene una versión de 64 bits de Windows y tiene una versión de Office de 64 bits, puede declarar llamadas de API como:.

      #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. Para apoyar esto, hay:

    • Tres nuevas palabras clave (2 tipos de datos y 1 modificador): LongPtr , LongLong y PtrSafe

    • Una nueva función : CLngLng() (es decir, Int64)

    • Las nuevas constantes de compilación como se utilizó anteriormente : VBA7 y Win64


También hay otros cambios ... Tengo usuarios en el campo informan que el código que funcionaba correctamente en 2007 ya no funciona y muestra errores.

Ejemplo, esto funciona en VBA6 ( Excel 2007 )

PRINT STRING$(80,"=") mynewdata = MID$(mydata, 15,4)

Imprime una línea hecha de " = " caracteres como un salto visual, luego mira mydata , salta más de 15 caracteres y obtiene 4 de ellos, el resultado se almacena en mynewdata . Falla en VBA7 ( Excel 2010 ).

Encontré una posible solución alternativa ...

PRINT VBA.STRING$(80,"=") mynewdata = VBA.MID$(mydata, 15,4)

O

PRINT VBA.STRING(80,"=") mynewdata = VBA.MID(mydata, 15,4)

Una lista completa de cambios aún sería útil ... y / o un convertidor de archivos.


VBA7 es compatible con versiones de Office de 64 bits.