Pregunta

Por lo tanto, mi compañía finalmente actualizar a MS Office 2010. Hasta ahora he estado trabajando en 2003. Soy un programador de SQL, y constantemente crear informes en Excel que los datos de extracción de nuestra base de datos. La mayoría de las veces, voy a crear macros que aceptan parámetros que los usuarios tendrán que escribir en células específicas, alterar la consulta, y luego actualizarlo de acuerdo a los parámetros.

Este es un ejemplo muy simple:

  1. En Excel 2003 que abriría un nuevo libro.
  2. Haga clic en "datos" y luego "Importar datos externos" y luego "Nueva base de datos de consultas".
  3. A continuación, le pedirá que seleccione un origen de datos, así que seleccione la base de datos que quería consulta desde (que se había establecido con una conexión ODBC ya).
  4. a continuación, cancelar por las ventanas Asistente para consultas y luego, cuando estoy en el Editor de consultas de Microsoft, acabo de entrar en mi consulta.

    • Para simplificar, voy a estar seleccionando * de una tabla llamada Agents que es sólo una lista de los agentes que trabajan para la empresa y su EmployeeIds.

    • select * from Agents

  5. Entonces "x" del editor de consultas, y una caja surge llamado "Importación de datos" donde se pregunta dónde desea colocar los datos: en una hoja de cálculo existente? una nueva hoja de cálculo? etc. Sólo tengo que devolver los datos en la hoja de cálculo existente a partir de la célula A2

Así que escribo este sencillo macro en el Editor de Visual Basic en un módulo para el libro:

Sub Refresh()

Dim oQuery as QueryTable
Dim oAgent as String

set oQuery = Sheet1.QueryTables(1)

oAgent = Sheet1.Range("A1")

oQuery.CommandText = "select * from Agents where Agent = '"+oAgent+"'"
oQuery.Refresh

End Sub

crear un botón que ejecuta esta macro y pegarlo en B1. Por lo que el usuario abre el informe, introduce un nombre en A1, golpea el botón y que el Agente y su identificación aparece en la siguiente tabla. derecho realmente simple? Pero no puedo conseguir que esto funcione en Excel 2010.

Aquí están mis pasos y el error que sigue:

  1. abro Excel 2010, e ir a la pestaña "Datos".
  2. En la sección "Obtener datos externos" hago clic en "De otras fuentes" y seleccione "Desde Mircrosoft de consulta" de la gota abajo.
  3. A continuación, el cuadro Elegir origen de datos aparece y es básicamente exactamente los mismos que los pasos 3,4 y 5 anteriores.

Luego escribir la misma macro, crear el botón y asignarlo al marco, pero cuando hago clic en el botón me sale el siguiente error:

Run-time error '9':
Subscript out of range

Me golpeó de depuración y los aspectos más destacados del depurador esta línea

Set oQuery = Sheet1.QueryTables(1)

I intentado hacer esta línea más específica de esta manera:

Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").QueryTables(1)

Pero me acaba de obtener el mismo error.

Así que básicamente lo que necesita saber es cómo hacer este tipo de cosas en Excel 2010. Pero aquí es una interesante nota: si creo este informe en Excel 2003, guardarlo como .xls, luego abrirlo en 2010 , funcionará. Incluso puedo guardar una copia como .xlsm entonces abierto que se ponga a funcionar con esta misma macro. Es sólo cuando se crea el informe en 2010 que no puedo conseguir que funcione. Parece, por alguna razón que no puede encontrar la consulta para alterar su texto de comando y luego refrescarse. Por favor ayuda, me han pegado en esto durante días!

¿Fue útil?

Solución

En XL2007 y 2010 QueryTables están contenidos en un "ListObject" dentro de la hoja, por lo que sólo necesita ajustar su código a:

Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").ListObjects(1).QueryTables(1)

http://msdn.microsoft.com/en-us/library/ ff841237.aspx

Tim

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top