Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Im Code das zweite Tabellenblatt ansprechen
#1
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
Antworten Top
#2
Hallöchgen,

mit [Tabelle2$] funktioniert es nicht?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
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:
  • el-rettev
Antworten Top
#4
@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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 2 Nutzer sagen Danke an snb für diesen Beitrag:
  • el-rettev, derHoepp
Antworten Top
#5
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.
Antworten Top
#6
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • el-rettev
Antworten Top
#7
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:
  • el-rettev
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste