2008-10-13 18 views
7

Donde estoy los desarrolladores se han actualizado a Excel 2007, pero la mayoría de los usuarios no. Estoy construyendo una plantilla de hoja de cálculo (* .xlt) para un usuario que va a necesitar un código vba incluido, y me pregunto qué problemas me encontrarán al crear esto en 2007 en lugar de 2003. No tengo acceso a una máquina con Excel 2003 para probar, y me preocupa que este proyecto en particular se dirija a un desastre.Escritura de VBA en Excel 2007 para su uso en Excel 2003

+0

Convencí a mi jefe para que me permitiera compilar esto en una página ASP.Net en lugar de en una hoja de cálculo (se relacionará muy bien con el resto de nuestras aplicaciones de intranet), por lo que esta pregunta ahora es discutible desde mi punto de vista. Sin embargo, la información aquí puede ser útil para otra persona, así que la dejo activa. –

+0

Realmente esta pregunta es bastante interesante, pero desafortunadamente debido a un sinfín de escenarios de casos de uso probablemente nunca la completemos. Realmente no hay excusa para no usar una VM con Office 2003 para desarrollo y prueba. –

Respuesta

8

El idioma de VBA no ha cambiado, pero hay objetos adicionales en Office 2007 que no están en Office 2003. Naturalmente, esto provocará un error de tiempo de ejecución cuando intente acceder a estos elementos en un entorno de 2003. ¿Qué le impide configurar una máquina virtual con Excel 2003 para desarrollarla?

+1

No tengo acceso para hacer ningún trabajo de máquina virtual aquí. Si puedes dirigirme a una lista de objetos adicionales para que pueda evitarlos, estaría bien. –

2

billb2112 tiene razón. Existen numerosos cambios en Excel 2007 sobre excel 2003 que no son retrocompatibles. Si bien es posible que el idioma no haya cambiado, los objetos se han actualizado. Algunos han agregado propiedades adicionales, algunos funcionan de manera diferente y algunas funciones en Excel han cambiado.

Debe tener mucho cuidado de que el código funcione en Excel 2003. Sugeriría que billb2112 dijera que tiene una máquina virtual no solo para probar sino también para codificar. Hago todo mi desarrollo de Excel para clientes que solo tienen 2003 en una máquina 2003. Tenga en cuenta que si los usuarios tienen Excel 2002 o 2000, existen aún más diferencias a medida que retrocede y simplemente obtendrá errores de tiempo de ejecución en cualquier código que estas versiones anteriores no admitan.

actualización por desgracia jeffs answer no es del todo correcto. mientras que sí, el idioma vba no se ha actualizado, no es lo mismo en 2007 que en 2003. como en 2003 no es lo mismo que en 2002, etc. lo que sucedió es funciones extra y adicionales y argumentos para las funciones se han agregado. por ejemplo, hay más opciones en la función BUSCAR en Excel en 2003 que en 2002. por lo tanto, si registra una macro (la mejor manera de encontrar estos problemas) en 2003 y luego la ejecuta en 2002, tendrá errores de tiempo de ejecución relacionados con la nuevos argumentos que simplemente no funcionan en el editor VBA 2002. seguir el mismo proceso para las funciones que han cambiado en Excel 2007 y luego volver al 2003 para probarlo lo ayudará a localizar estos problemas. algunos ejemplos incluyen el formato condicional, colores (temas) y numerosas funciones nuevas de hoja de cálculo. jon peltier tiene el mejor consejo al respecto: desarrolle en la versión más antigua posible que usará el cliente/usuario. Virtual PC 2007 se puede descargar e instalar de forma gratuita. solo necesitará una copia con licencia de XP/Vista y la oficina para instalarla.

+0

Lamentablemente, una máquina virtual no es una opción. Realmente necesito una lista de qué elementos no están disponibles en 2003. –

5

En lugar de depender de una lista probablemente incompleta de objetos y métodos que se han agregado a la biblioteca de objetos de Excel 2007, la mejor práctica (la más útil) es desarrollarla siempre en la versión más antigua de Excel que probablemente se utilizará para ejecutar el código.

+0

Lamentablemente, no tengo esa opción. –

+0

Esta es la mejor respuesta, ya que señala correctamente que cualquier lista probablemente estará al menos parcialmente incompleta y se relaciona muy bien con la respuesta de VM. –

-3

solía desarrollar una gran cantidad de macros en 2003, lo que un POTA ,, cosas como Find, Dir y algunos otros no están disponibles o algo cambia. por lo tanto, se pueden esperar algunos errores, solía contar desde 65000 filas hasta la primera fila no vacía para contar las filas en las que trabajar ... ahora más filas significan más trabajo por hacer

+0

no realmente, solo use la propiedad .End para la que está allí, para que no tenga que contar hasta el "final" de la última fila. –

4

Una diferencia que descubrí es que la subrutina debe tener una firma diferente para llamar desde un menú (en Excel 2003) que cuando se llama desde la cinta (en Excel 2007). Además, Excel 2003 no reconoce IRibbonControl y arroja errores de compilación.

Para trabajar hacia la compatibilidad de versiones cruzadas, utilizo un Argumento de compilación condicional y luego lo compruebo en las macros del preprocesador.

p. Ej.

#If USINGRIBBON Then 
    Public Sub CallFromRibbon(control As IRibbonControl) 
#Else 
    Public Sub CallFromRibbon() 
#End If 
    ' Code here 
    End Sub 

Esto significa que usted tiene que guardar una versión de su complemento con la bandera USINGRIBBON se pone a falso (por Excel2003) y otro con la bandera USINGRIBBON establecido en true (por Excel2007), pero esto es mucho más fácil que mantener dos bases de código completamente separadas.

Cuestiones relacionadas