Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1808to1812
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

Tabellenblatt Name geschlossener Datei

Tabellenblatt Name geschlossener Datei
01.02.2021 12:49:03
udo
Hallo Profis
besteht die Möglichkeit den Tabellenblattnamen des ersten Tabellenblattes einer ExcelDatei X
auszulesen ohne Sie zu öffnen mit VBA ?
Den Pfad und / oder den Namen der zu öffnenden Datei X ( .xls ) habe ich als Text in meiner eigentlichen
Exceldatei die ich aktiv geöffnet habe dort in zB. [M4] drinn stehn.
Oder müsste Sie kurz geöffnet werden, Namen auslesen und dann wieder schließen ?
Hättet ihr mir bitte etwas Starthilfe
Lieben Dank
udo

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: warum?
01.02.2021 13:04:32
Fennek
Hallo,
in der workbook.xml stehen die Sheet-Namen. Dies kann mit jedem "UnZip"-Tool ausgelesen werden, also auch mit VBA, sofern die Anti-Viren-Software es erlaubt eine Shell zu öffnen.
Ist aber mühsammer als Worbooks.Open().
mfg
AW: warum?
01.02.2021 13:30:08
udo
Hallo Fennek,
das Problem tritt bei mir in der Zeile auf 'XXXXXX
wo ich versuche den Namen des ersten Tabellenblattes jener Quelldatei auszulesen,
an der Stelle ist Sie ja noch geschlossen, Pfadangaben stehen dann aber schon in meiner
Basisdatei drinne.
Sub Daten_einlesen()
Dim BASIS As String ' Basisdatei in der gearbeitet wird
Dim ZIEL As String   ' dortiges Tabellenblatt in das die Werte einetragen werden sollen
Dim Quelle As String ' Quelldatei angabe der zu importierenden Daten
Dim ORT As String ' erstes Tabellenblatt der Quelldatei ( Tabellenblattname )
Dim ADR As String ' Adressangabe zum Öffnen der Quelldatei steht in H5
[H4:X5].ClearContents ' alte Adressverweise leeren
[H4] = ActiveWorkbook.path & "\" & ActiveWorkbook.Name
[H5] = Sheets(1).Range("J5").Value & [E4].Value & ".xls"
[M5] = [E4].Value & ".xls"
[M4] = ActiveWorkbook.Name
Quelle = [M5].Text
ADR = [H5].Text
ORT = Worksheets(1).Name ' XXXXXXXXX
'  Exit Sub
ZIEL = Range("F4").Value ' Tabellenblatt aktives
BASIS = Range("M4").Value ' Dateiname aktive Datei
' Daten einlesen
'  Application.ScreenUpdating = False
Workbooks.Open Filename:=ADR
Workbooks(BASIS).Worksheets(ZIEL).Range("E9:G1009") = Workbooks(Quelle).Worksheets(ORT). _
Range("A2:C1002").Value
Workbooks(ADR).Close
[A1].Select
End Sub
wenn ich unten anstatt über ORT variabel verweisen zu wollen den Namen direkt eintrage
zB.
Workbooks(BASIS).Worksheets(ZIEL).Range("E9:G1009") = Workbooks(Quelle).Worksheets("Daten").Range("A2:C1002").Value
erstes Blatt heisst dort " Daten" dann klappt alles,
versuche ich es über diese variable ORT dann nimmt er nicht den Namen der Quelldatei sondern den Namen des ersten Tabellenblattes in der Basisdatei, da bräuchte ich es gerade andersrum
Daher meine Frage, ob ich zuvor, bevor ich die Quelldatei öffnen lasse, derren erstes Tabblatt
u dessen Namen mir zuvor also in irgendeine Zelle ( zB. A1 ) eintragen lassen kann, dann diesen Wert der Variablen ORT zuweise und dann meine Abfrage unten es findet ...
hoffentlich hab ich es nicht zu kompliziert erklärt;
lieben Dank für eure Mühen
Udo
Anzeige
So, und nun erst rückst du mit VBA heraus!
01.02.2021 13:35:26
Luc:-?
Da musst und kannst du sie verdeckt im Hintergrund kurzzeitig öffnen, Udo!
Alles andere in meiner unteren AW. :-|
Luc :-?
meld mich gleich noch ... lieben Dank
01.02.2021 15:35:21
udo
Lieben Dank ihr Lieben,
musste kurz ausser Haus, werds gleich testen.
Danke euch allen schon mal, meld mich gleich noch
... ja eben, deshalb rufe ich die bislang auch ...
01.02.2021 16:01:17
udo
schon kurz auf, starte quasi über den Zellbezug die entsprechende Quelldatei
und mit ...
Workbooks(BASIS).Worksheets(ZIEL).Range("E9:G1009") = Workbooks(Quelle).Worksheets(ORT).Range("A2:C1002").Value
frage ich dann kurz ab, funktioneren alle bis auf Ort ( Worksheet der Quelldatei ) da findet er den Bezug nicht, tipp ich da den Namen direkt ein "Daten" dann gehts, aber bald heisst das evtl. Dat_01 , oder Testlauf... , deswegen ist die vergabe über den direkten Namen nicht lang passsend für uns. Leider.
hmmmm ?
Anzeige
Direktverweis
01.02.2021 13:32:01
Luc:-?
Ein Direktverweis auf eine Zelle der ungeöffneten Datei wäre wohl die einzige VBA-freie Möglichkeit, Udo;
dazu musst du nur den Pfad, wie üblich mit Dateiname in [] und ggf alles in '…' gefolgt von !A1 angeben. Enthält die Datei nur 1 Blatt, ergänzt Xl diese Angabe automatisch und du kannst den Blattnamen dann mit Hilfe von FORMELTEXT entnehmen. Enthält die Datei aber mehrere Blätter, wdn dir alle zur Auswahl angezeigt. Dort wählst du dann das 1. und weiter wie gehabt.
Gruß, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
Anzeige
AW: Direktverweis
01.02.2021 15:55:23
udo
Grüss dich Luc,
ich habs wohl leider bissel falsch beschrieben, ich möchte es generell unbedingt in VBA lösen,
da zuvor noch andere Prozeduren hierzu laufen die dann ein Datum ausspuken und ich dann in der zum datum passenden Quelldatei die daten abrufen möchte.
Und direkte verbindungen einrichten usw. gibt glaub zuviel Kaos bei der Menge von Quelldateien die wir prinzipiell abrufen können wollen, paar hundert...
Daher ein VBA Ansatz, der den Bezug eben variabel hält und sich die Bedingungen eben zuvor in
versch. zellwerten auf dem Basisblatt ergeben und danach dann in der entspr. Quelldatei gesucht wird, bzw. übertragen.
Leider ändert sich evtl. bald mal der Name des ersten tab.Blattes dort, weshalb ich variabel immer auf das erste Tab.Blatt verweisen will im Makro
LG udo
Anzeige
AW: Direktverweis
01.02.2021 16:08:31
Daniel
Hi
um den Namen des ersten Blattes einer Datei zu ermitteln, ist es am einfachsten die Datei dazu zu öffnen.
um das ohne sie zu öffnen zu tun, musst du über Formeln gehen und auch das ist dann umständlich und auch nicht zuverlässig:
in der Datei, aus der du geschlossen den Blattnamen auslesen willst, musst du:
1. in einer Zelle die Formel hinterlegen: =Zelle("Dateiname";Tabelle1!A1)
(Link auf irgendeine Zelle im ersten Tabellenblatt)
2. der Zelle mit dieser Formel einen Namen zuweisen (z.B. "ABC"
in der Datei mit dem Makro musst du dann in einer Zelle eine Formel hinterlegen, in der du diesen Namen abfragst:
=C:\pfad1\Pfad2\Dateiname.xlsb!ABC
dann kannst du diese Zelle auswerten.
ich gehe mal davon aus, dass du das Trennen von Datei- und Tabellenblattnamen selber hinbekommst.
diese Vorgehensweise reagiert, wenn der Anwender das erste Tabellenblatt umbenennt.
Sie funktioniert aber nicht mehr, wenn er das Tabellenblatt verschiebt und es nicht mehr das erste Blatt ist.
Gruß Daneil
Anzeige
AW: Direktverweis
01.02.2021 16:18:23
udo
Hallo Daniel, danke auch dir,
werde ich gerne auch testen ...
meld mich bissel später dazu noch, muss das alles jetzt erst mal probieren.
Danke dir
Udo
wozu, wenn du ....
01.02.2021 13:42:18
Rudi
.... die Datei doch ohnehin öffnest?
Außerdem kannst du doch mit Worksheets(1) darauf referenzieren. Der Name ist uninteressant.
Gruß
Rudi
AW: wozu, wenn du ....
01.02.2021 15:49:29
udo
Hallo Rudi, danke Euch allen schon mal für eure Beiträge,
nur zu meinem bescheidenen VBA Verständnis, mit Worksheets(1) hatte ich versucht, dann mekerte
er an der Stelle ? hab ich dann aber den Namen des ersten Tabellenblattes jener Quelldatei
angegeben, flutschte es wieder, merkwürdig, glaube wenn ich es nur in Zahlen deklariere dann nimmt er als Namen den des 1. Workbooks , sprich die Basisdatei. Eben, aber aus der heraus soll eben in der Quelldatei abgefragt werden.
In jenem Ordner wo die Abfragedateien ( Quelldateien ) drinne liegen, werden sich einige Exceldateien dann befinden, alle mit Namen des jew. Datum das ich abfragen will.
Daher soll der VBA Code in der Basisdatei entspr. einigermaßen variabel bleiben ... die Makros die dort zuvor ablaufen spucken dann in eine Bezugszelle ein Datum aus, welches Folge dessen eben dann eingelesen werden soll.
Ich sag mal so, im Moment heissen alle 1. Tabellenblätter dieser Quelldateien alle gleich, von daher kann ich im Augenblick den Namen direkt angeben, aber schon bald ändert sich das, dann müsste ich sozusagen auf das erste Blatt beziehen, bzw. dessen Namen da eben mit Worksheets(1), sheets(1), es bislang nicht ging ...
An der Stelle , kann ich evtl. Worksheets(1) noch erweiternd definieren zB. Worksheets(Workbook... , Sheets(1)) oder so ähnlich ?
vielleicht ginge das, alledings wüsste ich nicht wie ich es genau schreiben müsste ?
Danke das ihr euch die Mühe macht
LG udo
Anzeige
Ich nehm alles zurück, habs hinbekommen
01.02.2021 16:34:45
udo
Hallo ihr drei, also Danke zunächst nochmal an euch alle und eure Tipps
der Ansatz von Rudi klang für mich auch plausibel, und so testete ich das nochmal
Siehe da es geht doch mit Worksheets(1) ... ich vermute stark, dass ich in meinen ersten Testläufen
warschl. einen kleinen Schreibfehler drinne hatte Worksheet(1) , sprich da fehlte noch das s ?
Kanns mir nicht anders erkären.
Jedenfalls so geht es jetzt, der is aber auch streng der Editor, wegen so nem s'le heidanei ;-)
Ich danke euch vielmals
LG udo

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige