2010-06-18 16 views
39

Me di cuenta de 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?¿Cuáles son las diferencias entre VBA 6.0 y VBA 7.0?

Respuesta

37

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). Estos son los principales cambios:

apoyo
  1. 64-bits, principalmente para llamadas de API . Esto es tanto utiliza para hacer su trabajo de código con su sistema operativo/versión de Office, así como los demás (es decir, alguien en la oficina 2003/WinXP)

    • Si se encuentra en una versión de 64 bits de Windows, pero están en una versión de 32 bits de Office, puede declarar llamadas a 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 se encuentra en una versión de 64 bits de de Windows, y están en una versión de 64 bits de oficina, puede declarar llamadas 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 palabras clave nuevas (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 utiliza anterior: VBA7 y Win64

+7

@Todd Solo quiero señalar que LongPtr es un alias y apunta al tipo de datos correcto al usar 64 bits o 32 bits de palabra. Así que LongPtr apuntaría a LongLong en la oficina de 64 bits y Long en la oficina de 32 bits. La declaración a continuación funcionaría en oficinas de 32 y 64 bits. Función Declare PtrSafe GetTickCount Lib "kernel32"() Como LongPtr – Syler

+0

@Syler, ese es un buen punto. Aún no lo he probado, pero tiene sentido lo que dijiste. –

6

VBA7 es compatible con las versiones de Office de 64 bits.

9

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

+5

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – Marco13

+2

Usted es, por supuesto, correcto, pero recuerde que esta fue una respuesta de los primeros días de SO, antes de que tales convenciones estuvieran realmente codificadas. Piensa en la respuesta aceptada y esta prácticamente cubre las cosas :) – Lunatik

+1

Este comentario se insertó automáticamente durante una revisión (las respuestas solo-enlace tienden a terminar en la cola de revisión de baja calidad) – Marco13

0

T aquí hay otros cambios también ... 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) 

Se imprime una línea hecha de "=" personajes como un descanso visual, luego mira a misdatos, salta sobre caracteres y obtiene de ellos, el resultado se almacena en mynewdata. Falla en VBA7 (Excel 2010).

Lo que encontrar una solución potencial ...

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 los cambios todavía sería útil ... y/o un conversor de archivos.

Cuestiones relacionadas