Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1556to1560
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
"Gänsefüßchen" Problem im VBA
13.05.2017 12:39:19
Jürgen
Hallo zusammen,
ich habe hier ein eigenartiges Phänomen, welches beim automatisierten Import von Textdateien einhergeht.
Meine Beispieldatei enthält eine VBA Funktion, welche per Button Klick aus einem definierten Verzeichnis alle Textdateien einliest. Der Code funktioniert auch soweit einwandfrei (alles nicht auf meiner Feder, war Hilfe aus dem Forum).
Jetzt gibts die Eigenart, dass wenn Text oder Wörter in "...." gesetzt eingelesen werden, dies mit Sonderzeichen getauscht wird.
Beispiel:
So wurde der Text im Beispiel aus der Textdatei "Praat" in „PRAAT“ importiert
(kann man mit dem Textfilter enthält PRAAT nachvollziehen).
Wenn man im Beispiel dagegen mit dem Textfilter enthält "glaub i net" sucht, sieht man, das das richtig importiert wurde!? Dies wird dann auch richtig angezeigt in beiden Gänsefüßchen. Das eigenartige ist, dass dies nur vereinzelt ab und zu so gemacht wird. Über weite Strecken wird der Text also richtig aus den " " importiert. Wenn ich aber den "falschen" Text in der Textdatei dann aber wieder neu schreibe, klappst das nächste mal. Dagegen klemmt's dann irgendwo wieder bei einem anderen Textteil mit dem " ".
Soweit ich weiss, wurde im VBA Code damals eine kleine Krux eingefügt (Function tausch() ) , welches Sonderzeichen und Umlaute passend korrigieren sollte beim Import. Könnte das damit zusammenhängen?
Nachdem ich fast null Ahnung von VBA habe hoffe ich auf Hilfe dabei.
Könnte sich ein VBA Fuchs mal den Code ansehen, ob das der richtige Ansatz wäre den Umstand zu beheben?
mein Beispiel...
https://www.herber.de/bbs/user/113552.xlsm
Vielen Dank im Voraus!
Gruss, Juergen

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "Gänsefüßchen" Problem im VBA
14.05.2017 19:43:59
Zwenn
Hallo Jürgen,
ich habe schon letzte Nacht einmal flüchtig über den Code gesehen, hatte aber bisher keine Zeit mich damit ernsthaft auseinander zu setzen. Die Funktion tausch() scheint mir aber auf den ersten Blick nicht die "schuldige" zu sein. Um über Dein Problem eine richtige Aussage treffen zu können, fehlt hier noch das dritte Drittel.
Du hast ja den Code und auch das Ergebnis der Anwendung in einer Datei zur Verfügung gestellt. Was fehlt sind aber die Ausgangsdaten, die durch den Code in das vorliegende Ergebnis verwandelt wurden. Hast Du die Möglichkeit die entsprechende Textdatei noch hier zu veröffentlichen?
Viele Grüße,
Zwenn
Anzeige
AW: "Gänsefüßchen" Problem im VBA
14.05.2017 20:24:12
Jürgen
hallo zwenn,
vielen Dank für deine Antwort!
In Anlage nun die beiden relevanten txt-Dateien zum beschriebenen Problem.
Ich hoffe, es hat die Umbenennung der Dateien nicht irgendwelche Einflüße auf den Fehler.
a) "PRAAT"
https://www.herber.de/bbs/user/113576.txt
b) "glaub i net!"
https://www.herber.de/bbs/user/113577.txt
Vielen Dank für deine Mühe!
Gruss Und Danke,
Juergen
AW: "Gänsefüßchen" Problem im VBA
15.05.2017 11:57:32
Zwenn
Hallo Jürgen,
bin grade im Büro, habe aber kurz die entsprechenden Stellen in den von Dir zur Vefügung gestellten Textdateien gesichtet. Wie es aussieht, handelt es sich schlicht um ein Kodierungsproblem, das zusätzlich mit aufgenommen werden muss. Kann sein, dass Du in Zukunft auch noch über andere Zeichen stolperst, die nicht richtig angezeigt werden.
In dem PRAAD Beispiel, ist der Text in andere Anführungszeichen eingeschlossen, als in dem "glaub i net!" Beispiel. Beim ersten sind es Anführungszeichen unten vorn und oben hinten. Die sind anders kodiert, als die beiden hochgestellten Anführungszeichen aus dem zweiten Beispiel, die Du auf der Tastatur über Shift+2 bekommst. Man muss nun rausfinden, wie die kodiert sind und nimmt dann die "Übersetzungsanweisung" mit in dein Makro auf.
Das kann ich mir aber erst heute Abend zu Hause ansehen.
Viele Grüße,
Zwenn
Anzeige
AW: "Gänsefüßchen" Problem im VBA
15.05.2017 13:12:34
Juergen
Hallo Zwenn,
ich danke dir, dass du dich der Sache angenommen hast!
Was du sagst, macht Sinn, denn wenn ich die Texte in "2xGänsefüßchen oben" benutze klappt's, rückwirkend betrachtet. Das kommt mir jetzt grad so.....
Ich warte dann mal deine Antwort ab. Danke Dir herzlichst!
Gruss,
Juergen
AW: "Gänsefüßchen" Problem im VBA
15.05.2017 16:00:58
Zwenn
Hallo Jürgen,
bin zwar noch immer im Büro, habe aber jetzt trotzdem mal die Funktion tausch() um die folgenden Zeilen erweitert:

ActiveSheet.Cells(i, 5) = Replace(ActiveSheet.Cells(i, 5), Chr(226) & Chr(128) & Chr(158), Chr( _
132))
ActiveSheet.Cells(i, 5) = Replace(ActiveSheet.Cells(i, 5), Chr(226) & Chr(128) & Chr(156), Chr( _
147))
ActiveSheet.Cells(i, 6) = Replace(ActiveSheet.Cells(i, 6), Chr(226) & Chr(128) & Chr(158), Chr( _
132))
ActiveSheet.Cells(i, 6) = Replace(ActiveSheet.Cells(i, 6), Chr(226) & Chr(128) & Chr(156), Chr( _
147))
Ein Testlauf hat bei mir nicht funktioniert, weil mir immer angezeigt wird, dass der Pfad nicht gefunden wurde. War aber nur ein Hinweis und keine echte Fehlermeldung. Ich konnte nicht sehen, was der wirklich von mir will. Habe also alles auf Deine Pfade zurückgesetzt. Teste mal, ob nun die Anführungszeichen unten und oben korrekt angezeigt werden nach einem Import.
Falls Du die nicht willst, sondern auch nur die normalen oben, wie bei "gaub i net!", dann tausche am Ende der Zeilen jeweils Chr(132) gegen Chr(34) und Chr(147) auch gegen Chr(34). Das sind die Codes für die jeweiligen Zeichen (habe ich auch in Tabelle2 mal so stehen lassen).
https://www.herber.de/bbs/user/113595.xlsm
Viele Grüße,
Zwenn
Anzeige
AW: "Gänsefüßchen" Problem im VBA
15.05.2017 19:54:29
Jürgen
Hallo Zwenn,
danke für die Rückmeldung.
Sind es wirklich die richtigen "ASCII" Zeichensätze? Ich habe mal ne Tabelle mir angesehen, da sind die Bezeichnungem m.E. irgendwie anders:
http://roubaixinteractive.com/PlayGround/Binary_Conversion/The_Characters.asp
Könnte man den VBA Code für die "Gänsefüßchen"auch so gestalten wie bei den Umlauten?
Aber leider will es bei mir so oder so nicht klappen :/
Gruss & Danke,
Juergen
AW: "Gänsefüßchen" Problem im VBA
15.05.2017 19:55:53
Jürgen
....noch ein Nachtrag:
um die txt-Dateien zu importieren, brauchst du nur oben das Verzeichnis für deinen Speicherort derer umstellen. Dann gehts überall.
Gruss,
Juergen
Anzeige
AW: "Gänsefüßchen" Problem im VBA
17.05.2017 20:40:07
Zwenn
Hallo Jürgen,
ich bin erst heute wieder dazu gekommen, hier reinzuesehen. Ich habe jetzt auch den Importtest gemacht und die Zeichen werden genau so dargestellt, wie sie in Deinen txt-Vorlagen hinterlegt sind. Das ist bei Dir nun also auch so, nehme ich an.
Zu Deiner Frage bezüglich des ASCII Zeichensatzes. Der original ASCII Zeichensatz besteht lediglich aus 128 Zeichen. Diese wurden mal in den "Urzeiten" der Informatik festgelegt. Sie ergeben sich aus den 128 Möglichkeiten, 7 Bit gegeneinander "zu verschalten". Wenn man die Bit-Stellungen als Zahlen interpretiert, dann sind es die von 0 (binär 0000000) bis 127 (binär 1111111). In der Tabelle, die Du verlinkt hast, kannst Du die Binär-Codes der einzelnen Zeichen ablesen.
Warum man sich mal dafür entscheiden hat 7 Bit zu nutzen weiß ich nicht. Wie Dir wahrscheinlich bekannt ist, besteht ein Byte aus 8 Bit (die kleinste Einheit, die wir in einem Computer speichern können, auch wenn Bit-Operationen möglich sind). Das achte Bit sorgt für weitere 128 Mögliche "Bit-Verschaltungen". Nämlich alle 128 der 7 Bit mit einer führenden 0 und nochmal mit einer führenden 1. Diese zweiten 128 Möglichkeiten werden im sogenannten erweiterten ASCII Zeichensatz genutzt. Der ist aber für unterschiedliche Länder unterschiedlich definiert. Das läuft dann auf sogenannte Code Pages hinaus.
Eine dieser Code Pages beschreibt das, was wir unter Windows als ANSI Zeichensatz kennen. Den gibts so eigentlich nicht im Standard. Die Zeichen, die in Deinen txt-Dateien das tief- und das hochgestellte Anführungszeichen ergeben, gehören zu diesem ANSI Zeichensatz. Sie ergeben sich ja aus den Zahlen 132 und 147. (Beide größer als 128) Wenn Du in Deiner verlinken Tabelle nachsiehst, findest Du diese beiden Zeichen auch unter den angegebenen Nummern.
Ich habe Dir aber mal eine andere Seite rausgesucht, auf der besser erklärt wird, was es mit den Zeichensätzen und Code Pages auf sich hat.
https://www.edv-lehrgang.de/ansi-zeichensatz/
Wenn Du möchtest, dass in Deinem Makro nur Anführungszeichen aus dem ursprünglichen ASCII Zeichensatz verwendet werden, geht das nur über das Zeichen mit der Kodierung 34. Dafür gibt es aber keinen Grund, weil Windows von Haus aus ANSI verwendet.
Viele Grüße,
Zwenn
Anzeige
AW: "Gänsefüßchen" Problem im VBA
17.05.2017 21:09:31
Jürgen
Hallo Zwenn,
vielen Dank für die ausführlichen Infos.
leider klappt es bei mir nicht. Wenn ich dein Beispiel verwende, wird wieder z.B. die Suche nach PRAAT als „PRAAT“ dargestellt. An was könnte das bei mir noch liegen?
Hier meine screenshots...
a) textfilter
https://abload.de/img/txtfiltereuuvl.jpg
b) VBA Code
https://abload.de/img/vba-codevrueo.jpg
Danke & Gruss,
Juergen
Kann ich nicht nachvollziehen
17.05.2017 21:27:56
Zwenn
Ähm,
da bin ich jetzt ehrlich gesagt überfragt. Bei mir funktioniert der Import völlig korrekt unter Windows 10 und Excel 2016. Arbeitest Du unter Windows oder unter Mac? Falls unter Windows, teste das bitte mal auf einem anderen Rechner, falls Du die Möglicheit dazu hast.
Ich stelle den Thread mal wieder offen. Vielleicht hat jemand anders eine Idee.
Grade etwas ratlos,
Zwenn
Anzeige
AW: andere VBA schreibweise
17.05.2017 21:40:36
Jürgen
Hallo Zwenn,
danke nochmals für deine Erklärungen. Das ist schon ein kleines Zeichen -WIKI ;)
ja, ich verwende WIN10 und Excel 2016.
Könnte man den letzten Teil wie beim Tausch der Umlaute anstatt als HEX Code ' Chr(132)' und ' Chr(147) ' gleich als richtiges "Gänsefüßchen"-schreibweise setzen?
Nur so ne Idee...
Danke & Gruss,
Juergen
AW: andere VBA schreibweise
17.05.2017 21:47:03
Zwenn
Das kannst Du einfach ausprobieren. Da würde aber das gleiche rauskommen nehme ich an, denn die Funktion tausch() matcht offenbar nicht bei der Zeichenkodierung durch die drei angegebenen, auszutauschenden Codes. Die Kodierung ist dezimal, nicht Hexadezimal, aber das spielt hier keine Rolle. Nur der Richtigkeit halber.
Schicke mir mal bitte deine original Dateien, die Du importierst, ohne sie vorher zu verändern. Wirklich die, die du in die Excel Tabelle holst.
zwenn_glueckspilz@gmx.de
Anzeige
AW: andere VBA schreibweise
17.05.2017 21:54:15
Jürgen
Hallo Zwenn,
ja, das mache ich gerne.
Nur noch angemerkt:
ich habe jetzt das mal so eingetippt:
https://abload.de/img/vba-code_neubiu3y.jpg
Meiner Laienmeinung nach, hätte sich zumindest jetzt anstatt der Gänse ein Bindestrich einstellen müssen!?
Tut's aber leider nicht. Anscheinend erkennt er schon die Gänse nicht bei mir?
Ich schick die mal die ori txt-Dateien.
Vielen Dank für dein Engagement!!
GRuss,
Juergen
AW: andere VBA schreibweise
17.05.2017 21:58:05
Zwenn
Ja, da hätten Bindestriche auftauchen müssen. Gute Idee, es einfach mal mit einem anderen Erstezungszeichen zu testen :-)
Die Funktion replace() funktioniert übrigens folgendermaßen (falls Du das nicht weißt, damit Du verstehst, was in der Funktion tausch() eigentlich passiert)
https://msdn.microsoft.com/de-de/library/office/gg264409(v=office.15).aspx
Anzeige
AW: andere VBA schreibweise
17.05.2017 22:10:01
Zwenn
Schöne Mail Adresse ;-)
Mit Deiner Originaldatei bekomme ich auch wieder die falschen Zeichen. Ich probiere mal ein paar Sachen aus und denke nach. Bin dann erstmal beschäftigt.
Erste Erkenntnis
17.05.2017 22:25:36
Zwenn
So,
ich weiß bisher nicht, was da passiert und muss nun die Mechanik der Subs und Functions untereinander erforschen. Denn wenn man mal den Buchstaben ä in der Funktion tausch() durch die Zeichenkette KRUX austauscht, findet man KRUX nicht in den imprtierten Daten. Das ä hingegen schon. Da frage ich mich also ... Wann wird tausch() eigentlich aufgerufen?
Ich schaue mir das jetzt noch an, kann aber heute nicht mehr so lange machen.
Aber immerhin, es gibt eine erste Erkenntnis. Immer positiv denken :-)
Viele Grüße,
Zwenn
Anzeige
Lösung
17.05.2017 22:54:50
Zwenn
Hallo Jürgen,
ich weiß nicht, wer das "Konstrukt" programmiert hat, aber es ist ... nicht optimal ;-)
Es gibt die Funktion tausch() 2x Haha
So sollte es gehen:
https://www.herber.de/bbs/user/113656.xlsm
Wenn Du jetzt noch immer sagtst, es geht nicht, mache ich weiter. Aber ich würde mich schon wundern ;-) Übrigens nutze ich auch Audacity und habe mal "Der kleine König Dezember" von Axel Hacke damit eingelesen. Sollte ein Projekt mit einem befreundeten Musiker in Kiel werden. Ich bin dann aber wegen einem neuen Job nach Berlin gezogen und es wurde leider nix mehr aus dem Projekt. Deshalb habe ich gedacht, ich helfe Dir. Offenbar hast Du mehr Ahnung von der Audio-Materie, als ich :-)
Viele Grüße,
Zwenn
AW: Lösung
18.05.2017 08:54:06
Juergen
Hallo Zwenn,
TOP TOP TOP ! :)
Es freut mich riesig, dass es jetzt klappt! Nicht nur wegen den Gänsefüßchen, nein, sondern auch wie ich in Zukunft auftretende Problem mit der tausch() Funktion anpassen kann. Herzlichen Dank!
Habe aus Neugierde bei beiden Codes in den Tabellen nachgesehen, aber keine doppelten tausch() Funktionseinträge gefunden. War die Ursache nach dem 'tausch()' VBA Zeilen der doppelte Eintrag zu function ende?
ja, ich weiss, dass wurde mit der heißen Nadel auf die Schnelle gestrickt. Bestimmt wert das eine oder andere zu optimieren. Aber da ich fast nix in VBA kann ohne Anleitung, muss es seinen Dienst tun. Tut es ja auch....irgendwie ;)
Ja, du hast es erkannt, ich bewege mich hier in einer eher "ab der Norm" Audio-Nische :) ...oder wie wie Raudive sagte: "Jenseits der Thesen". Selten aber spannend! Ich organisiere mit dem Excelsheet mehrere tausend Hörbeispiele für online Publikationen.
Wenns dich interessiert, schau vorbei...
https://raudive.de/ltcwave-was-ist-das/ltcwave-stimmbeispiele/
Also, nochmals besten Dank für dein Mühe und die Lösung meines Probs!
btw: ....deine Email ist ja auch ganz witzig... ;)
Danke & Gruss,
Juergen
AW: Lösung
18.05.2017 08:54:53
Juergen
Hallo Zwenn,
TOP TOP TOP ! :)
Es freut mich riesig, dass es jetzt klappt! Nicht nur wegen den Gänsefüßchen, nein, sondern auch wie ich in Zukunft auftretende Problem mit der tausch() Funktion anpassen kann. Herzlichen Dank!
Habe aus Neugierde bei beiden Codes in den Tabellen nachgesehen, aber keine doppelten tausch() Funktionseinträge gefunden. War die Ursache nach dem 'tausch()' VBA Zeilen der doppelte Eintrag zu function ende?
ja, ich weiss, dass wurde mit der heißen Nadel auf die Schnelle gestrickt. Bestimmt wert das eine oder andere zu optimieren. Aber da ich fast nix in VBA kann ohne Anleitung, muss es seinen Dienst tun. Tut es ja auch....irgendwie ;)
Ja, du hast es erkannt, ich bewege mich hier in einer eher "ab der Norm" Audio-Nische :) ...oder wie wie Raudive sagte: "Jenseits der Thesen". Selten aber spannend! Ich organisiere mit dem Excelsheet mehrere tausend Hörbeispiele für online Publikationen.
Wenns dich interessiert, schau vorbei...
https://raudive.de/ltcwave-was-ist-das/ltcwave-stimmbeispiele/
Also, nochmals besten Dank für dein Mühe und die Lösung meines Probs!
btw: ....deine Email ist ja auch ganz witzig... ;)
Danke & Gruss,
Juergen
AW: Lösung
18.05.2017 10:44:02
Zwenn
Hallo Jürgen,
schön dass es jetzt auch bei Dir klappt :-) Den Link zu der Audio-Seite habe ich mal in meine Bookmarks aufgenommen. Das muss ich mir in Ruhe zu Hause ansehen.
Die Funktion tausch() findest Du einmal im Code der Tabelle1 (links in der Baumstruktur einen Doppelklick auf Tabelle1 machen) Genau da drüber findest Du den Eintrag DieseArbeitsmappe Wenn Du einen Doppelklick da drauf machst, ist tausch() auch dort zu finden, als letzte Funktion.
Ich habe die Erweiterung für die Zeichenersetzung einfach nur in diese zweite gefundene Funktion tausch() kopiert und dann gings. Der andere Code kommt irgendwie gar nicht zur Anwendung. Da gibts ja auch irgendwo weiter oben einen Bezug auf eine Checkbox. Dein Dokument enthält aber gar keine.
Ich würde das an Deiner Stelle jetzt aber erstmal alles so lassen, denn es funktioniert ja. Wichtig ist nur, dass Du eventuelle weitere zu ersetzende Zeichen auf der Codeseite zu DieseArbeitsmappe vornimmst.
Den doppelten Eintrag von End Function hinter der tausch() Funktion auf der Codeseite von Tabelle1 habe ich nebenbei weggenommen, ohne viel darüber nachzudenken. Hatte nur kurz gedacht, dass ich da eine Fehlermeldung erwartet hätte. Aber wie gesagt, dieser Code scheint gar nicht zur Ausführung zu kommen.
Viele Grüße und viel Freude mit Deinem nun funktionierendem Tool :-)
Zwenn
Ergänzung Zeichensätze UTF8
17.05.2017 21:20:57
Zwenn
Nochmal ich,
habe vergessen darauf einzugehen, was es mit der Kodierung Deiner Ausgangsdateien auf sich hat. Die liegen in UTF8 vor. Das ist der sogenannte Unicode Zeichensatz. Es gibt UTF16, UTF32 und UTF8. UTF16 besteht fest aus 2 Byte, also 16 Bit. UTF32 fest aus 4 Byte, also 32 Bit. UTF8 hingegen ist variabel und kann aus 1, 2, 3, oder 4 Byte bestehen. Also aus 8, 16, 24 oder 32 Bit.
Die Zeichen, die Dir schon jemand in der Funktion tausch() "übersetzt" hat, sind die deutschen Umlaute und das ß. Diese sind in UTF8 mit 2 Byte kodiert. Das entspricht zwei Zeichen, deshalb findest Du in der Funktion tausch() immer 2 Dezimalwerte zwischen 0 und 255 für ä, ö, ü, Ä, Ö, Ü und auch das ß ist mit 2 Byte kodiert. Du findest die hinterlegten Zahlen in dieser Tabelle wieder:
http://utf8-chartable.de/unicode-utf8-table.pl?utf8=dec
Die Anführungszeichen hingegen, die ich nun der Funktion tausch() zugefügt habe, sind mit 3 Byte, also 24 Bit kodiert. Du findest sie in dieser Tabelle wieder:
http://utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128&utf8=dec
Alle anderen Zeichen sind nur mit einem Byte kodiert. Wie Du sofort sehen wirst, sind die ersten 128 Zeichen von UTF8 (0 bis 127 unter dem ersten Link) identisch mit dem ASCII und damit auch ANSI Zeichensatz. Deshalb müssen diese nicht extra in die Funktion tausch() mit aufgenommen werden.
Ich denke jetzt habe ich alles ;-)
Viele Grüße,
Zwenn

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige