Clever-Excel-Forum

Normale Version: Im Code das zweite Tabellenblatt ansprechen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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
Hallöchgen,

mit [Tabelle2$] funktioniert es nicht?
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
@derH

Schöne Code.
Leider eine Endlosschleife.
Ich habe
Code:
        rs.movenext
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
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.
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
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