Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1440to1444
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellenblattname von einer anderen Arbeitsmappe

Tabellenblattname von einer anderen Arbeitsmappe
11.08.2015 17:44:18
einer
Guten Abend,
eine kurze Frage. Kann ich über folgenden Code auch den Tabellenblattnamen von Tabellenblätter aus einer anderen Arbeitsmappe ziehen oder beschränkt sich das nur auf Zellen.
Do
k = k + 1
wert = GetValue("E:\Dokumente", "test.xlsm", k + 1, "d6")
If IsError(wert) Then Exit Do
ActiveSheet.Cells(38 + k, 17) = wert
Loop
Im Code quasi das "d6" durch .name ersetzten, aber so klappt das natürlich nicht :)
Eine Idee?
Grüße
Anna

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblattname von einer anderen Arbeitsmappe
11.08.2015 18:27:29
einer
Hallo,
es ist möglich per ADO die Tabellennamen auszulesen.
Deine Methode Daten aus Mappen zu lesen ist für 2-3 Werte ok, aber sobald es mehr werden ist es schneller wenn die Mappe in Excel geöffnet ist. Es ist ja nicht so dass mit deiner Methode die Mappe nicht geöffnet wird, es geschieht nur für dich nicht sichtbar. Excel kratzt nämlich nicht direkt auf der Festplatte rum um Daten per DDE-Verbindung zu lesen. Ich hab's mal vor längerer Zeit getestet, 100 Werte auszulesen dauerte da rund 10 Sekunden. Die Mappe in Excel zu öffnen, die Daten in ein Array einzulesen und die Mappe wieder zu schließen dauerte knapp 2 Sekunden.
Beispiel für Tabellennamen auslesen:
Option Explicit

Public Sub Tabellennamen_auslesen()
    
    Dim objConnection As Object, objCatalog As Object
    Dim strConnection As String
    Dim strWorkbook As String, objTables As Object
    
    strWorkbook = "E:\Mappe1.xlsx"
    
    Set objConnection = CreateObject("ADODB.Connection")
    
    strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & strWorkbook & ";" & _
        "Extended Properties=""Excel 12.0;HDR=No;IMEX=0"""
    
    Call objConnection.Open(strConnection)
    
    Set objCatalog = CreateObject("ADOX.Catalog")
    Set objCatalog.ActiveConnection = objConnection
    
    For Each objTables In objCatalog.Tables
        With objTables
            Debug.Print Left$(.Name, Len(.Name) - 1)
        End With
    Next
    
    Set objCatalog = Nothing
    
    objConnection.Close
    
    Set objConnection = Nothing
    
End Sub

Gruß
Nepumuk

Anzeige
AW: Tabellenblattname von einer anderen Arbeitsmappe
12.08.2015 09:26:18
einer
Guten Morgen Nepumuk,
danke für deine tolle Antwort.
Drei Fragen hab ich:
1. Wo gebe ich an, wo die Werte ausgegeben werden?
2. Kannst du mir auch noch einen Weg aufzeigen wie eine Zelle in dieser Form ausgelesen wird ? _ Wahrscheinlich auch hier oder? Aber wie :) ?

With objTables
Debug.Print Left$(.Name, Len(.Name) - 1)
End With

3. Und rein für mein Verständnis, wie gibst du hier an das alle Tabellenblätter durchsucht werden (Variable?)?
Danke jedenfalls schon mal für deine Hilfe.
Beste Grüße
Anna

Anzeige
AW: Tabellenblattname von einer anderen Arbeitsmappe
12.08.2015 10:10:27
einer
Hallo,
alle Tabellen werden damit durchlaufen:
For Each objTables In objCatalog.Tables
Der Name wird im Direktfenster ausgegeben:
Debug.Print Left$(.Name, Len(.Name) - 1)
Kannst du auch in eine Zelle schreiben.
z.B.
i = i + 1
Cells(i, 1) = Left$(.Name, Len(.Name) - 1)

Den Inhalt einer Zelle bekommst du vermutlich mit
Inhalt=objTables.Range("A1")
Gruß
Rudi

AW: Tabellenblattname von einer anderen Arbeitsmappe
12.08.2015 13:57:52
einer
Hallo Rudi,
Danke soweit verstanden :)
Tabellenblattnamen-Import klappt. Bloß bringt es die Namen alle mit einem $-Zeichen rüber. Wieso ist das so und kann man(n) (Rudi/Nepumuk) das ändern ;)
Und zum Zelleninnhalt einfügen hab ich auch noch eine Frage:
With objTables
q = q + 1
Cells(q, 16) = objTables.Range("d6")
End With

So meintest du das nicht oder? Weil so funktioniert es leider nicht. Oder hab ich es an der falschen Stelle eingefügt?
Grüße
Anna

Anzeige
AW: Tabellenblattname von einer anderen Arbeitsmappe
12.08.2015 14:16:02
einer
Hallo,
Bloß bringt es die Namen alle mit einem $-Zeichen rüber
Deshalb Left$(.Name, Len(.Name) - 1)
Das es mit objTables.Range("d6") hab ich auch schon gemerkt. Das muss man per RecordSet (SQL) abfragen. Ist nicht ganz trivial.
Ich würde die Mappe öffnen, auslesen und wieder schließen. Wie Nepumuk schon schrieb, ist das wahrscheinlich auch schneller.
Gruß
Rudi

AW: Tabellenblattname von einer anderen Arbeitsmappe
12.08.2015 17:44:54
einer
Hallo Rudi,
gut das klappt jetzt. Hab aber jetzt festgestellt, dass es mir anfängt die Tabellenblattnamen zu sortieren was es nicht machen soll. Meine Tabellenblätter sind numeriert. Startend mit 1-10 ab 11 ordnet es wieder vorne ein, bei eins.
Kann man das abstellen?
Grüße
Anna
Anzeige

317 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige