Registriert seit: 22.07.2021
Version(en): Excel 365
08.11.2022, 19:47
(Dieser Beitrag wurde zuletzt bearbeitet: 08.11.2022, 19:48 von el-rettev.)
Hallo zusammen,
ich habe einen VBA-Code, den ich gerne anpassen möchte.
Er zieht Daten aus einer geschlossenen Datei.
Der Tabellenblattname aus dem die Daten gezogen werden ist hier hart mit [Tabelle1$] hinterlegt.
Code:
Query = "SELECT * FROM [Tabelle1$] Where Produkt = 'Tisch'"
Kann mir jemand helfen wie ich dem Code umschreibe, sodass die Daten aus dem zweiten Tabellenblatt gezogen werden.
Vergleichbar mit Befehl
sheets(2)Vielen Dank.
Code:
Sub ADO()
'Variablen deklarieren
Dim Connection As New ADODB.Connection
Dim Query As String
Dim rs As New ADODB.Recordset
'Connection herstellen
'HDR= Header Wenn Yes dann werden Header erwartet
Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=Dateipfad;HDR=Yes';"
'Query definieren und ausführen
'Als SQL Code definiert
Query = "SELECT * FROM [Tabelle1$] Where Produkt = 'Tisch'"
rs.Open Query, Connection
'DAten ins Tabellenblatt laden
ActiveSheet.Range("A2").CopyFromRecordset rs
'Connection schliessen
Connection.Close
End Sub
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchgen,
mit [Tabelle2$] funktioniert es nicht?
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 26.09.2022
Version(en): 2019
09.11.2022, 15:09
(Dieser Beitrag wurde zuletzt bearbeitet: 09.11.2022, 15:09 von derHoepp.)
Hallo,
Du kannst die Tabellennamen mit der .OpenSchema-Methode des Connection Objekts auslesen:
Code:
Set rs = con.OpenSchema(20)
rs.MoveFirst
Do While Not rs.EOF
Debug.Print rs.Fields("TABLE_NAME").Value
Loop
Die 20 steht dabei für die Konstante adSchemaTables
Viele Grüße
derHoepp
Folgende(r) 1 Nutzer sagt Danke an derHoepp für diesen Beitrag:1 Nutzer sagt Danke an derHoepp für diesen Beitrag 28
• el-rettev
Registriert seit: 29.09.2015
Version(en): 2030,5
09.11.2022, 16:31
(Dieser Beitrag wurde zuletzt bearbeitet: 09.11.2022, 16:44 von snb.)
@derH
Schöne Code.
Leider eine Endlosschleife.
Ich habe
hinzugefügt.
Aber, so geht's auch:
Code:
Sub M_snb()
c00 = "G:\OF\Beispiel.xlsb"
c00 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & c00 & ";Extended Properties=""Excel 12.0"""
With CreateObject("ADODB.recordset")
.activeconnection = c00
MsgBox Join(Filter(Split(.activeconnection.openschema(20).GetString, vbTab), "$"), vbLf)
End With
End Sub
Folgende(r) 2 Nutzer sagen Danke an snb für diesen Beitrag:2 Nutzer sagen Danke an snb für diesen Beitrag 28
• el-rettev, derHoepp
Registriert seit: 22.07.2021
Version(en): Excel 365
10.11.2022, 18:28
(Dieser Beitrag wurde zuletzt bearbeitet: 10.11.2022, 18:30 von el-rettev.)
Hallo.
Vielen Dank für eure Antworten.
Bitte greift mir nochmal unter die Arme:
Der Code liest die Tabellenblätter aus. Aber letztendlich benötige ich sie nicht angezeigt, sondern will immer automatisch das zweite Tabellenblatt in der Datei ansprechen.
Vllt noch zur Erklärung zur Datei die ausgelesen wird:
Das erste Tabellenblatt ist ein Infoblatt, daher nicht relevant. Das zweite Tabellenblatt ist das aktuelle Projekt.
Wird ein neues Projekt hinzugefügt, dann wird ein neues Tabellenblatt in der Quelldatei angelegt und das Blatt wird direkt nach dem Infoblatt geschoben und ist daher immer an zweiter Stelle.
Der Name variiert je nach Projektname, aber die Position nicht.
Daher will ich fix das zweite Tabellenblatt ansprechen.
Wie kann ich das nun mit der Code-Erweiterung, der die Daten ausliest in meinen Code einbinden?
Nochmal vielen Dank.
Registriert seit: 29.09.2015
Version(en): 2030,5
Code:
Sub M_snb()
c00 = "G:\OF\Beispiel.xlsb"
c00 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & c00 & ";Extended Properties=""Excel 12.0"""
With CreateObject("ADODB.recordset")
.activeconnection = c00
MsgBox Filter(Split(.activeconnection.openschema(20).GetString, vbTab), "$")(1)
End With
End Sub
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• el-rettev
Registriert seit: 26.09.2022
Version(en): 2019
Hallo,
ich würde mich beim Schema nicht darauf verlassen, dass die Position des Arbeitsblattes in der Arbeitsmappe auch der Position im Recordset entspricht.
Viele Grüße!
derHöpp
Folgende(r) 1 Nutzer sagt Danke an derHoepp für diesen Beitrag:1 Nutzer sagt Danke an derHoepp für diesen Beitrag 28
• el-rettev