VBA - Excel-Datei aus dem Zugriff erzeugen (QueryTable)

8

Ich habe ein Projekt, das im Grunde genommen das Ziel ist, Excel (Report) zu generieren, das den Click einer Schaltfläche in Access mit VBA startet.

Der Inhalt dieses Berichts ist das Ergebnis einer SQL Server-Datenbank für gespeicherte Prozeduren.

die Fehlerzeile:

%Vor%

Ich bekomme ist:

%Vor%

Vollständiger Code (Editiert mit Remou Benutzertipps):

%Vor%

Das seltsame ist, dass der Code funktioniert, wenn er in Excel ausgeführt wird, aber nicht in Access

funktioniert     
Predoff 03.01.2012, 17:47
quelle

3 Antworten

5

In Access müssen Sie den Excel-Anwendungsobjekten die Excel-Anwendungsinstanz voranstellen, zum Beispiel:

%Vor%

Außerdem müssen Sie, sofern Sie keinen Verweis auf die Excel-Bibliothek haben, den Wert für die integrierten Excel-Konstanten angeben.

Es ist eine sehr schlechte Idee, den Namen von Objekten für Variablen zu verwenden. Sag nicht:

%Vor%

Sagen Sie zum Beispiel:

%Vor%

Oder viel besser:

%Vor%

Wenn Sie eine geeignete Referenz haben. Sie können dann CreateObject überspringen.

BEARBEITEN

Der Provider muss der Access OLEDB 10-Provider sein, der zum Binden von Recordsets verwendet wird. Dies funktioniert für mich zum Erstellen einer Datentabelle über Access mit SQL Server:

%Vor%     
Fionnuala 03.01.2012 17:56
quelle
4

FWIW, zwei Dinge fallen auf:

  1. Wie bereits von @Remou hervorgehoben, müssen Excel-Referenzen qualifiziert sein. Derzeit ist Range("A2") nicht qualifiziert. Wenn der Code in Excel ausgeführt wird, wird ActiveSheet angenommen. Wenn sie jedoch von einer anderen Anwendung ausgeführt wird, sucht diese Anwendung in ihrer eigenen Bibliothek namens Range nach einer Methode oder Eigenschaft, die Ihnen in Microsoft Access diesen Fehler anzeigt.

  2. Es gibt keinen Code im Block With . Sie können also die Schlüsselwörter With und End With entfernen. Wenn Sie dies tun, entfernen Sie auch die äußere (), wie folgt:

wb.Worksheets(4).QueryTables.Add Connection:=rs, Destination:=wb.Worksheets(4).Range("A2")

Alternativ verschieben Sie den With -Block auf den Worksheet -Level:

%Vor%

Update-Zugriff auf Excel-Beispiel

Dieser Beispielcode automatisiert Excel von Access, erstellt eine neue Arbeitsmappe und fügt dem ersten Arbeitsblatt eine Abfragetabelle hinzu. Die Quelldaten sind eine Access-Tabelle. Dies wird in Office 2007 ausgeführt.

%Vor%     
Rachel Hettinger 03.01.2012 20:06
quelle
0

Sie sagen nicht, welche Office-Version, aber in Excel 2007/10 ist eine QueryTable eine Eigenschaft eines Listobjects, also würde Ihr Code wie folgt aussehen:

%Vor%     
Doug Glancy 03.01.2012 21:37
quelle