Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Externen Tabellenblattname zu lang um zu Kopieren

Forumthread: Externen Tabellenblattname zu lang um zu Kopieren

Externen Tabellenblattname zu lang um zu Kopieren
31.10.2024 20:09:11
Heinz H.
Hallo Leute,

Ich möchte jedes Monat meine Kontobewegungen von CSV in ein Excel Blatt kopieren.

Das hat bis jetzt auch mit dem unteren Code sehr gut funktioniert, bis jetzt.

Nun habe ich eine neue Kontonummer erhalten die um einiges länger als die alte war.

Wie könnte es gehen um nach " meinElba_umsaetze_AT12345678900 " die weiteren hinteren Stellen zu ignorieren ?
Z.B meinElba_umsaetze_AT12345678900***********

Danke für eure Hilfe und Vorschläge

Gruß, Heinz

Sub Oktober_einfuegen()

Dim mySheet As Worksheet
Dim zielsheet As Worksheet
Dim myWB As Workbook

Application.DisplayAlerts = False
On Error Resume Next

Set myWB = Workbooks("meinElba_umsaetze_AT12345678900.csv")

Set mySheet = myWB.Sheets("meinElba_umsaetze_AT12345678900")
Set zielsheet = ThisWorkbook.Sheets("CSV")
On Error GoTo 0

zielsheet.Unprotect

If mySheet Is Nothing Then
MsgBox "Datenblatt meinElba_umsaetze_AT12345678900 nicht vorhanden!"
Exit Sub
End If
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Externen Tabellenblattname zu lang um zu Kopieren
31.10.2024 21:31:25
Onur
Und warum muss die Kontonummer unbedingt mit in den Dateinamen? Wieso nicht z.B. einfach "meineElba_Umsaetze_Konto1" ?
AW: Externen Tabellenblattname zu lang um zu Kopieren
01.11.2024 06:11:07
RPP63
Moin!
Zum festgestellten Fehler:
Du öffnest die CSV mit Excel (importierst sie folglich nicht).
Dabei erhält das einzige Tabellenblatt den Dateinamen.
Tabellenblattnamen sind aber auf 31 Stellen limitiert, der Rest wird abgeschnitten.
Einfache Lösung:
Set mySheet = myWB.Sheets(Left(myWB.Name, 31))

Gruß Ralf
Anzeige
AW: Externen Tabellenblattname zu lang um zu Kopieren
01.11.2024 08:06:34
Heinz H.
Hallo Ralf,

Erstmals Danke für deine Unterstützung.

Habe deinen Lösungsvorschlag befolgt, aber leider ohne Erfolg.

Hier eine Beispielmappe

Danke

https://www.herber.de/bbs/user/173337.xlsm
Falscher Strang, sorry onur kwT
01.11.2024 06:12:10
RPP63
kwt
AW: Externen Tabellenblattname zu lang um zu Kopieren
01.11.2024 08:01:06
Heinz H.
Hallo Onur,

Auf deine Frage: " Und warum muss die Kontonummer unbedingt mit in den Dateinamen? "

Wenn ich den Kontoauszug von meiner Bank downloade, bekommt das Blatt automatisch diesen Namen.
Ich könnte die Datei natürlich umbenennen, suche aber einen Weg um das zu umgehen.

Danke, Heinz
Anzeige
AW: Externen Tabellenblattname zu lang um zu Kopieren
01.11.2024 08:34:42
RPP63
Die Antwort resp. den Workaround habe ich Dir bereits gegeben.
Dennoch ein paar Anmerkungen:
Das Öffnen einer CSV mit Excel führt häufig zu unerwünschten Begleiterscheinungen wie z.B. Umwandlung des Textes 4-2 zum Datum 04.02.(aktuelles Jahr)
Deshalb sollte man sie in der Regel in Excel importieren.
Wenn es bei dem Auszug Deiner Bank problemlos klappt, kannst Du natürlich dabei bleiben.
Wenn Du weiterhin öffnest, brauchst Du obige Verrenkungen nicht, denn die von Excel umgewandelte Textdatei (CSV) besteht prinzipbedingt nur aus einem einzigen Blatt.
Auf dieses kannst Du mit dem Blattindex 1 zugreifen.
Grob so:
Set Blatt = Workbooks("Mein_extrem_langer_Dateiname_der_Probleme_verursacht.csv").Sheets(1)

Abschließend:
Sehr viel besser wäre es, wenn Du den Import mittels PowerQuery vornimmst und neue Auszüge fortlaufend aggregierst.
Dazu kann ich Dir aber kaum helfen, es gibt aber genug Fachleute dazu hier im Forum.

Gruß Ralf
Anzeige
AW: Externen Tabellenblattname zu lang um zu Kopieren
01.11.2024 09:09:38
Heinz H.
Hallo Ralf,

Danke für deine Hilfestellung.

Mit deinem " Set Blatt = Workbooks("Mein_extrem_langer_Dateiname_der_Probleme_verursacht.csv").Sheets(1) " funktioniert es jetzt auch mit dem Überlangen Dateinamen.

Auch Danke an Onur, für deine Bereitschaft mir zu helfen.

Liebe Grüße, Heinz
Anzeige
AW: Externen Tabellenblattname zu lang um zu Kopieren
01.11.2024 15:43:27
Daniel
HI
wenn dir der Blattname zu lang ist, oder wenn sich die hinteren Stellen auch mal ändern können (Export mit Datum im Namen), dann mach ich das immer so, um zu prüfen ob eine Datei vorhanden ist, bei der zumindest der Anfang übereinstimmt:

dim myWB as Workbook

dim mySheet as Worksheet
for each myWB in Application.Workbooks
if myWB.Name like "meinElba_umsaetze_AT12345678900*.csv" then exit sub 'joker * für beliebige Zeichen in beliebiger anzahl beim LIKE-Vergleich
next

if myWB is nothing then 'wenn for-each vollständig durchgelaufen ist, dann ist die Schleifenvariable nothing, bei Abbruch enthält sie das Element dass den Abbruch verursacht hat.
Msgbox "keine Elba_umsätze geöffnet"
Exit Sub
end if
Set mySheet = myWB.Sheets(1) 'CSV-Dateien haben nur ein Tabellenblatt
und hier dann weiter mit dem normalen Code


das ist auch deswegen ganz elegant, weil man kein On Error benötigt.

Wenn die CSV-Datei immer gleich benannt ist, dann würde ich sie auch auf einem zusätzlichen Tabellenblatt importieren
den import kann man so einstellen, dass er sich beim Öffnen automatisch aktualisert, oder auch auf anfrage.
das Makro müsste dann nur den Übertrag der Daten ausführen.
Gruß Daniel
Anzeige
AW: Externen Tabellenblattname zu lang um zu Kopieren
01.11.2024 18:44:27
Heinz H.
Hallo Daniel,

Erstmals Danke für deine Hilfe.

"und hier dann weiter mit dem normalen Code" dann wird gleich hier gemeckert
Sheets.Range("A1:D190").PasteSpecial Paste:=xlValues 'Sheets("CSV")



Hättest du dazu eine Erklärung ?

Danke, Heinz
Anzeige
AW: Externen Tabellenblattname zu lang um zu Kopieren
01.11.2024 19:07:46
RPP63
Sheets ohne Index oder Name ist halt nur die halbe Wahrheit …
Sheets(1).PasteSpecial …
AW: Externen Tabellenblattname zu lang um zu Kopieren
02.11.2024 00:04:24
Daniel
ich vermute mal, die Erklärung steht in deinem kommentar.
du musst natürlich angeben, in welches Sheet das ganze eingefügt werden soll!
"Sheets" allein als Objekt gibt es nicht.
also mindestens sowas wie Sheets(1) (erstes Tabellenblatt) oder Sheets("CSV") , wenn das Blatt diesen Namen hat (steht in deinem Kommentar)
konsequenterweise sollte man, wenn man mit mehreren Dateien hantiert, immer auch die Datei mit angeben, in der das Sheet liegt.
ohne Datei/Workbook davor sucht Excel sonst das Sheet in der gerade aktiven Datei und darauf sollte man sich nicht verlassen.

muss also mindestes Workbooks("dateiname.xlsm").Sheets("CSV") lauten.
oder wenn man in die Datei einfügen will, in der das Makro liegt auch Namensunabhängig: ThisWorkbook.Sheets("CSV")
oder eine Variable, falls man so eine schon definiert und dieser die datei zugewiesen hat.

Gruß Daniel
Anzeige
AW: Externen Tabellenblattname zu lang um zu Kopieren
01.11.2024 19:41:38
Heinz H.
Hallo RPP63

Danke für deine Hilfe.

Nun habe ich aber das Problem das nichts kopiert und eingefügt wird.

SG,
Heinz

myWB.Sheets(1).Range("A1:D190").Copy   '("meinElba_umsaetze_AT12345678900")

Sheets(1).Range("A1:D190").PasteSpecial Paste:=xlValues 'Sheets("CSV")
Anzeige
AW: Externen Tabellenblattname zu lang um zu Kopieren
01.11.2024 19:46:38
RPP63
Du bist ein schwieriger Fall! ;-)
Referenziere korrekt!
Mal eine andere Variante:
With myWB.Sheets(1).Range("A1:D190")

.Value = .Value
End With
Danke an RPP63 & Daniel
01.11.2024 20:01:43
Heinz H.
Hallo RPP63 & Daniel,

Soooo jetzt funktioniert es wie gewollt.

Recht herzlichen Dank für eure Hilfe und Ausdauer.

schöne Grüsse,
Heinz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige