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:
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:
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
Para apoyar esto, hay:
Tres nuevas palabras clave (2 tipos de datos y 1 modificador):
LongPtr
,LongLong
yPtrSafe
Una nueva función :
CLngLng()
(es decir, Int64)Las nuevas constantes de compilación como se utilizó anteriormente :
VBA7
yWin64
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.