Question

Alors, mon entreprise a finalement mis à niveau vers MS Office 2010. Jusqu'à présent, je travaille en 2003. Je suis un programmeur SQL, et je crée constamment des rapports dans Excel que les données d'attraction de notre base de données. La plupart du temps, je vais créer des macros qui acceptent des paramètres que les utilisateurs tapera dans des cellules spécifiques, modifier la requête, puis l'actualiser en fonction des paramètres.

Voici un exemple très simple:

  1. Dans Excel 2003 j'ouvrir un nouveau classeur.
  2. Cliquez sur « Données » puis « Importer des données externes » puis « Créer une requête ».
  3. Il vous invite alors à choisir une source de données, donc je choisirais la base de données que je voulais requête à partir (qui avait été déjà mis en place avec une connexion ODBC).
  4. Je puis annuler par la fenêtre Assistant de requête et puis quand je suis dans l'éditeur Microsoft Query, j'entrer seulement dans ma requête.

    • Par souci de simplicité, je vais sélectionnerez * à partir d'une table appelée Agents qui est juste une liste des agents qui travaillent pour l'entreprise et leur EmployeeIds.

    • select * from Agents

  5. Alors je « x » de l'éditeur de requête et une pops up boîte appelée « Importer des données » où il demande où vous voulez mettre les données: dans une feuille de calcul existante? une nouvelle feuille de calcul? etc. Je viens de le faire revenir les données dans la feuille de calcul existante à partir de cellules A2

Alors je vous écris cette macro simple dans l'éditeur Visual Basic dans un module pour le classeur:

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

créer un bouton qui exécute cette macro et le coller dans B1. Ainsi, l'utilisateur ouvre le rapport, tape un nom dans A1, clique sur le bouton et que l'agent et leur carte d'identité vient dans le tableau ci-dessous. Vraiment simple à droite? Mais je ne peux pas obtenir ce travail dans Excel 2010.

Voici mes étapes et l'erreur qui suit:

  1. J'ouvre Excel 2010, et allez dans l'onglet « Données ».
  2. Dans la section « Données externes » Je clique sur « d'autres sources » et sélectionnez « De Mircrosoft requête » du bas de baisse.
  3. Ensuite, la zone Choisir la source de données apparaît et il est essentiellement exactement le même que les étapes 3,4 et 5 ci-dessus.

Alors j'écris la même macro, créer le bouton et l'affecter à l'marco, mais quand je clique sur le bouton, je reçois l'erreur suivante:

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

Je frappé le débogage et le débogueur met en évidence cette ligne

Set oQuery = Sheet1.QueryTables(1)

J'ai essayé de faire plus comme spécifique cette ligne afin:

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

Mais je reçois juste la même erreur.

Donc, fondamentalement, ce que je dois savoir comment faire ce genre de chose dans Excel 2010. Mais voici une note intéressante: si je crée ce rapport dans Excel 2003, l'enregistrer comme .xls, puis ouvrez-le en 2010 , ça va marcher. Je peux même enregistrer une copie en .xlsm puis ouvert et travaillerai avec cette même macro. Il est seulement quand je crée le rapport en 2010 que je ne peux pas le faire au travail. Il semble pour quelque raison que ce ne peut pas trouver la requête de modifier le texte de commande, puis rafraîchir. S'il vous plaît aider, je suis coincé sur ce pendant plusieurs jours!

Était-ce utile?

La solution

Dans XL2007 et 2010 QueryTables sont contenus dans un « ListObject » dans la feuille de calcul, vous avez juste besoin d'ajuster votre code:

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

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

Tim

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top