ADO und Excel (4) - Ein etwas komplexeres Beispiel
Hier möchte ich Ihnen ein kleines Beispiel vorstellen, welches Ihnen die Macht von ADO in Excel zeigt.A | B | C | |
1 | |||
2 | Artikelnummer | Bezeichnung | |
3 | 1 | Hammer | |
4 | 2 | Zange | |
5 | 3 | Schraubenzieher |
A | B | C | |
1 | |||
2 | Artikelnummer | Verkauft | |
3 | 1 | 14 | |
4 | 2 | 17 | |
5 | 3 | 4 | |
6 | 1 | 15 | |
7 | 2 | 16 | |
8 | 3 | 18 | |
9 | 1 | 5 | |
10 | 2 | 20 | |
11 | 3 | 13 | |
12 | 1 | 12 | |
13 | 2 | 11 | |
14 | 3 | 8 | |
15 | 1 | 16 | |
16 | 2 | 6 | |
17 | 3 | 7 | |
18 | 1 | 7 |
Option Explicit
Public Sub AdoAusgabeVariationen()
' Peter Haserodt 2007
Dim oAdoConnection As Object, oAdoRecordset As Object
Dim sAdoConnectString As String, sPfad As String
Dim sQuery As String
Dim oZielStartRange As Range
On Error GoTo Fehler
sPfad = ThisWorkbook.FullName
Set oZielStartRange = ThisWorkbook.Worksheets("Ziel").Range("b2")
Set oAdoConnection = CreateObject("ADODB.CONNECTION")
sAdoConnectString = _
"DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & sPfad
oAdoConnection.Open sAdoConnectString
Set oAdoRecordset = CreateObject("ADODB.RECORDSET")
sQuery = "SELECT [V1$].[Bezeichnung], Sum([V2$].[Verkauft]) AS a" & _
" FROM [V1$] INNER JOIN [V2$] ON [V1$].[Artikelnummer] " & _
" = [V2$].[Artikelnummer]" & _
" GROUP BY [V1$].[Bezeichnung]" & _
" ORDER BY [V1$].[Bezeichnung]"
With oAdoRecordset
.Source = sQuery
.ActiveConnection = oAdoConnection
.Open
Call AusgabePerCopyFromRecordset(oAdoRecordset, oZielStartRange)
End With
Aufraeumen:
On Error Resume Next ' Sehr Faul
oAdoRecordset.Close
oAdoConnection.Close
Set oAdoRecordset = Nothing
Set oAdoConnection = Nothing
Exit Sub
Fehler:
MsgBox "Fehler: " & Err.Description
Resume Aufraeumen
End Sub
Private Sub AusgabePerCopyFromRecordset(DasRecordSet As Object, _
StartAusgabe As Range)
StartAusgabe.CurrentRegion.Clear
StartAusgabe.CopyFromRecordset DasRecordSet
End Sub
Auswertung
Eigentlich sollte ich dazu nichts sagen. Manchmal sollte nur die Schönheit der Aktion für sich selbst sprechen.