Frage

Also, mein Unternehmen Upgrade schließlich zu MS Office 2010. Bis jetzt habe ich im Jahr 2003 arbeitet worden Ich bin ein SQL-Programmierer, und ich ständig Berichte in Excel erstellen, die Pull-Daten aus unserer Datenbank. Die meiste Zeit werde ich Makros erstellen, die Parameter akzeptieren, dass die Benutzer in bestimmte Zellen geben wird, ändern Sie die Abfrage, und dann aktualisieren die Parameter nach.

Hier ist ein wirklich einfaches Beispiel:

  1. In Excel 2003 Ich würde eine neue Arbeitsmappe öffnen.
  2. Klicken Sie auf „Data“ und dann „Externe Daten importieren“ und dann „Neue Datenbankabfrage“.
  3. Es fordert Sie dann eine Datenquelle zu wählen, so dass ich die Datenbank auswählen würde ich Abfrage wollte aus (die mit einer ODBC-Verbindung bereits eingerichtet worden war).
  4. ich stornieren dann der Assistent Fenster Abfrage aus und dann, wenn ich in der Microsoft Query Editor bin ich gerade in meiner Abfrage eingeben.

    • Der Einfachheit halber werde ich * aus einer Tabelle namens Agents werden ausgewählt werden, die nur eine Liste der Agenten, die Arbeit für die Gesellschaft und ihre EmployeeIds ist.

    • select * from Agents

  5. Dann habe ich „x“ aus dem Abfrage-Editor und ein Box erscheint „Daten importieren“, wo sie fragt, wo Sie die Daten eingefügt werden sollen: in einem vorhandenen Arbeitsblatt? ein neues Arbeitsblatt? usw. Ich habe es nur die Daten in dem vorhandenen Arbeitsblatt zurückzukehren in Cell starten A2

Also dann schreibe ich diese einfache Makro in Visual Basic-Editor in einem Modul für die Arbeitsmappe:

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

erstelle ich eine Schaltfläche, die dieses Makro läuft und kleben Sie es in B1. So ist der Benutzer den Bericht, Typen ein Name in A1 öffnet, trifft auf den Button und dass Agenten und ihre Id kommen unten in der Tabelle nach oben. Wirklich einfach nicht wahr? Aber ich kann das nicht in Excel 2010 an der Arbeit.

Hier sind meine Schritte und der Fehler, der folgt:

  1. öffne ich Excel 2010, und gehen Sie auf die Registerkarte „Daten“.
  2. Unter dem Abschnitt „Externe Daten“ Ich klicke auf „Aus anderen Quellen“ und wählen Sie „Aus Mircrosoft Query“ aus dem Dropdown.
  3. Wählen Sie dann die Datenquelle Kasten angezeigt und es ist im Grunde genau das gleiche wie die Schritte 3,4 und 5 oben.

Dann schreibe ich das gleiche Makro, erstellen Sie die Taste und weisen Sie auf die marco, aber wenn ich auf die Schaltfläche ich die folgende Fehlermeldung erhalten:

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

schlug ich debug und der Debugger hebt diese Zeile

Set oQuery = Sheet1.QueryTables(1)

Ich habe versucht, so dass diese Linie präziser wie folgt:

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

Aber ich nur den gleichen Fehler.

Also im Grunde, was ich wissen müssen, ist, wie diese Art der Sache zu tun in Excel 2010. Aber hier ist eine interessante Anmerkung: wenn ich diesen Bericht in Excel 2003 zu erstellen, speichern Sie sie als .xls, öffnen Sie es dann im Jahre 2010 , es wird klappen. Ich kann sogar eine Kopie als XLSM speichert dann offen, dass, und es wird mit dem gleichen Makro arbeiten. Es ist nur, wenn ich den Bericht im Jahr 2010 erstellen, die ich nicht zur Arbeit bekommen. Es scheint, aus irgendeinem Grunde, dass es nur die Abfrage nicht finden kann seinen Befehlstext und aktualisieren zu ändern. Bitte Hilfe, ich habe seit einigen Tagen auf diese stecken gewesen!

War es hilfreich?

Lösung

In XL2007 und 2010 Querytables werden in einem „Listobject“ im Arbeitsblatt enthalten, so dass Sie nur in Ihrem Code anpassen müssen:

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

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

Tim

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top