Anzeige
Archiv - Navigation
1612to1616
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

Leerzeichen und CSV

Leerzeichen und CSV
07.03.2018 11:58:48
Markus
Hallo liebe Community,
ich habe folgende 2 Probleme:
1. Wie kann man aus einem Tabellenblattname nur die letzten Leerzeichen im Tabellenblattname entfernen? Bisher entfernt er bei mir auch diejenigen im Namen mit.
Also zum Beispiel: "Schwarzer Stein " wird zu "SchwarzerStein"
Mein bisheriger Code sieht folgender Maßen aus:

Sub leerzeichen_entfernen()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Name = Replace(ws.Name, " ", "")
End Sub

Am Ende löscht er schon die Leerzeichen, aber halt auch das zwischen den Wörtern, was ich aber vermeiden möchte.
Anmerkung: Im Tabellenblattname muss das Leerzeichen zwischen den zwei Wörtern erhalten bleiben, aber halt die hinteren sollen gelöscht werden. Ich weiß das es ohne Leerzeichen im Tabellenblattnamen leichter wäre, aber es muss doch auch mit Leerzeichen im Tabellenblattnamen gehen, das er nur die falschen Leerzeichen dahinter entfernt?
2. Spaltenbreite in CSV-Exportdatei automatisieren
Folgenden Code habe ich getestet, leicht abgewandelt von:
Link: https://lexa-it.de/2013/03/ein-kleines-excel-makro-fuer-den-csv-export-code-tipp/
Anmerkung Man gibt statt xlsm als Dateiendung csv ein.
Link zu Datei: https://www.herber.de/bbs/user/120256.xlsm

Sub ExportCSV()
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
Dim blnAnfuehrungszeichen As Boolean
strMappenpfad = ActiveWorkbook.FullName
strDateiname = InputBox("Bitte den Namen der CSV-Datei angeben.", "CSV-Export", strMappenpfad)
If strDateiname = "" Then Exit Sub
'strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ",")
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ";")
If strTrennzeichen = "" Then Exit Sub
'If MsgBox("Sollen die Werte in Anführungszeichen exportiert werden?", vbQuestion + vbYesNo, " _
CSV-Export") = vbYes Then
'    blnAnfuehrungszeichen = True
'Else
'    blnAnfuehrungszeichen = False
'End If
Set Bereich = ActiveSheet.UsedRange
Open strDateiname For Output As #1
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If blnAnfuehrungszeichen = True Then
strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
Print #1, strTemp
strTemp = ""
Next
Close #1
Set Bereich = Nothing
MsgBox "Export erfolgreich. Datei wurde exportiert nach" & vbCrLf & strDateiname
ActiveSheet.UsedRange.EntireColumn.AutoFit      'funktioniert nicht
End Sub


Ich hab was mit dem Befehl
DoCmd.OutputTo
gelesen, ist aber wohl nur für VB und nicht VBA.
Ich hatte es dann mit ActiveSheet.UsedRange.EntireColumn.AutoFit probiert, aber dieses „EntireColumn.AutoFit“ gilt scheinbar nur für Formatierungen in Excel Sheets, nicht aber für CSV-Dateien oder?
Hat jemand eine Idee wie man den oberen Code so abändern kann, das wenn man die CSV Datei öffnet man dann nicht diese #### in den Spalten drin stehen hat, sondern das ich die Spaltenbreite automatisch anpasst bei der Ausgabe CSV-Datei?
Hoffe mir kann da jemand helfen bei den zwei Problemen.
Beste Grüße
Markus

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Leerzeichen und CSV
07.03.2018 12:23:41
Zwenn
Hallo Markus,
zu 1)
Mit Replace ersetzt Du Zeichen in der gesamten Zeichenkette. Was Du suchst, ist der Trim-Befehl, der Leerzeichen am Anfang und Ende entfernt:

Sub leerzeichen_entfernen()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Name = Trim(ws.Name)
End Sub
zu 2)
Eine CSV Datei ist eine reine Text-Datei. Die kennt keine Formatierungen wie Fett, Kursiv oder Spaltenbreiten. Das die Werte in Excel den einzelnen Zellen zugeordnet werden, ist eine reine Excelsache. Die einzige Möglichkeit in einer CSV eine Spaltenbreite zu erzwingen ist, statt des Trennzeichens für Datenfelder (meistens Komma oder Simikolon), eine feste Anzahl von Zeichen zu wählen. Dann müssen aber alle Datenfelder entsprechend mit Leerzeichen aufgefüllt werden und es darf kein Datenfeld geben, das mehr Zeichen enthält.
Am Ende wäre das aber auch nur eine Krücke, weil eine feste Spaltenbreite auch dann nur funktioniert, wenn der Text in einer Nichtproportionalen Schriftart dargestellt wird. Z.B. Courier. Das bedeutet, jedes Zeichen wird so breit dargestellt, wie das breiteste, welches in der Regel das kleine m ist. Proportionale Schriftarten hingegen, stellen Buchstaben nur so breit dar, wie sie sind und lassen dann den nächsen Buchstaben folgen. Der größte Unterschied in der Breite liegt zwischen i und m vor.
Das nur als kleiner Exkurs. Alles in allem sind CSV für die Weiterverarbeitung durch den Computer gedacht und nicht dafür, dass Menschen sie lesen.
Viele Grüße,
Zwenn
Anzeige
AW: Leerzeichen und CSV
07.03.2018 12:24:40
fcs
Hallo Markus,
zu 1.: Leerzeichen
Sub leerzeichen_entfernen()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Name = Trim(ws.Name)
End Sub
zu 2. CSV-Export.
du kannst in der CSV-Keine Informationen zu Spaltenbreiten mitgeben.
Wenn beim erneuten Öffnen der CSV-Datei die Spaltenbreiten nicht passen, dann muss man alle Spalten markieren und per "Spaltenbreite automatisch anpassen" die Spaltenbreiten nachbereiten.
Gruß
Franz
AW: zu 1)
07.03.2018 12:41:53
UweD
ws.Name = RTrim(ws.Name)
AW Leerzeichen und CSV
07.03.2018 16:17:49
Markus
Hallo Leute,
zuerst einmal danke für Eure Antworten. :) Bei der Gelegenheit möchte ich auch Chris nochmals Danken für seine Erklärungen zu dem Prozeduren (Thread: "Übergabe von Msgbox als Variable", leider konnte ich nicht mehr dort antworten, da Beitrag nicht mehr zum Antworten offen war, aber das hat mir schon sehr zum Verständnis geholfen. :)
Nun aber nochmals zu meinen vorigen Anliegen:
zu1. Hat prima funktioniert, genau das hatte ich gesucht :)
Ich hatte es schon mit sowas hier probiert: "ws.Name = Replace(ws.Name, Right(" "), Len(" ") - 1, ""

hatte aber nichts gebracht.
zu2. Schade das dies nicht funktioniert, so bleibt halt immer der Doppelklick auf die hintersten Spaltenstriche.
Man kann nicht zufällig dem Code mitgeben, das er diesen Doppelklick beim öffnen der CSV-Datei automatisch ausführt oder?
Oder dieses Spalten markieren und per Spaltenbreite automatisch anpassen, kann man ihm auch nicht mitgeben, beim öffnen der Datei per Batch oder Makro-Befehl?
Wenn ich als Trennzeichen statt einem Semikolon ein Komma oder einen Punkt angebe, dann sind aber diese ### weg, nur es ist dann nicht mehr Spaltenmäßig richtig formatiert, daher benötigte ich es halt wenn schon mit Semikolon als Trennzeichen .
Anmerkung:
Wenn ich aber ein sehr langes Wort eingebe, dann wird dies in der CSV nicht durch ### ersetzt, wie kommt das? Beim Datum geht es nicht, aber bei normalen Strings schon?
Beste Grüße
Markus
Anzeige
AW: AW Leerzeichen und CSV
07.03.2018 18:11:45
ChrisL
Hi Markus
Dank ist angekommen.
Trim ist natürlich besser, aber hier noch deine Len()-1 Variante:
If Right(ws.Name, 1) = " " Then ws.Name = Left(ws.Name, Len(ws.Name) - 1)
Nein, CSV-Files haben keine Formatierung.
cu
Chris
AW: AW Leerzeichen und CSV
08.03.2018 06:52:01
fcs
Hallo Markus,
ich habe mir jetzt deine Frage und den Code im Makro noch einmal ganz genau durchgelesen.
Dein Problem ist, dass "####" in die CSV geschrieben werden! Hatte ich übersehen.
Dann werden beim Öffnen natürlich auch nur "####" wir eingelesen.
Wenn in der Tabelle eine oder mehrere Spalten zu schmal sind um die Zahlen/Datum/Zeit anzuzeigen dann zeigt Excel diese Werte mit "####" an.
Zum Schreiben der Daten in die CSV verwendest du die Text-Eigenschaft der Zellen (=in Excel angezeigter Zellinhalt) - dadurh dann auch die "####" in der CSV-Datei.
Bei Zellen mit Text als Inhalt spielt die Länge des Zellinhalts keine Rolle.
Damit der Export in CSV funktioniert musst du vor dem Export die Breite der Problmspalten per Autofit oder durch Einstellen der Spaltenbreite auf den für die vollstänige Anzeige notwenigen Wert bringen.
Gruß
Franz
Anzeige
AW: AW Leerzeichen und CSV
12.03.2018 12:04:51
Markus
Hallo Chris,
das freut mich und danke für die Variante mit Len :)
Hab ich versucht Franz, geht aber nicht auch wenn ich das Autofit ganz an den Anfang stelle, gleich nach der Deklaration der Variablen.
Hab Dir das mal als Datei mit angehangen. Bei langen Wörtern macht er es, aber beim Datum, negativ bisher.
Link: https://www.herber.de/bbs/user/120354.xlsm
Vielleicht findet Du ja den Fehler und kannst es korrigieren, wo das Autofit nun genau hin muss vor dem Export in CSV.
Meiner Meinung nach macht er es nun vor dem Export, aber es geht trotzdem nicht bei mir. :(
Beste Grüße
Markus
Anzeige
AW: AW Leerzeichen und CSV
12.03.2018 19:09:40
ChrisL
Hi
Bei mir wird Autofit auf dem aktiven Blatt ausgeführt. Ich kann dein Problem nicht nachvollziehen.
Der Vorschlag kam übrigens von Franz ;)
cu
Chris
AW: AW Leerzeichen und CSV
13.03.2018 03:45:57
fcs
Hallo Markus,
bei mir funktioniert in deiner Daei die Anpassung der Spaltenbreite korrekt und auch der Export.
Allerdngs würde ich die Auswahl des Namens der csv-Datei einem Dateiauswaldialog statt in einer Textbox machen.
Spalten nach Ausführung des Makros:
Userbild
Beim Öffnen der CSV-Datei musst du allerdings wieder die Spaltenbreite anpassen, da die Programmiere von Mirosoft hier scheinbar geschlampt haben und Datum plus Zeit nicht korrekt erkannt werden..
Gruß
Franz
Sub ExportCSV()
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String
Dim varDateiname As Variant
Dim strTrennzeichen As String
Dim strMappenpfad As String
Dim blnAnfuehrungszeichen As Boolean
strMappenpfad = ActiveWorkbook.FullName
ActiveSheet.UsedRange.EntireColumn.AutoFit      'funktioniert nicht
varDateiname = Application.GetSaveAsFilename( _
Left(strMappenpfad, InStrRev(strMappenpfad, ".")) & "csv", _
Filefilter:="CSV-Datei (*.csv),*.csv", _
Title:="CSV-Export - Bitte den Namen der CSV-Datei auswählen/eingeben.")
If varDateiname = False Then Exit Sub
strTrennzeichen = ";" 'Vorgabewert für Trennzeichen
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", _
"CSV-Export", strTrennzeichen)
If strTrennzeichen = "" Then Exit Sub
'blnAnfuehrungszeichen = MsgBox("Sollen die Werte in Anführungszeichen exportiert werden?",  _
_
vbQuestion + vbYesNo, "CSV-Export") = vbYes
Set Bereich = ActiveSheet.UsedRange
Open varDateiname For Output As #1
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If blnAnfuehrungszeichen = True Then
strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
Print #1, strTemp
strTemp = ""
Next
Close #1
Set Bereich = Nothing
MsgBox "Export erfolgreich. Datei wurde exportiert nach" & vbCrLf & varDateiname
End Sub

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge