Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1540to1544
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

Makro kann keine Sonderzeichen in Test umwandeln

Makro kann keine Sonderzeichen in Test umwandeln
14.02.2017 10:43:05
Paul
Hallo Experten,
ich habe ein Excel-Makro, mit dem ich schon seit langer Zeit arbeite. Dieses Makro soll Eingaben in der Tabelle "BDC Raw Data" zu einer Text-Datei umwandeln. Das geht auch problemlos, sind jedoch Sonderzeichen oder, wie in der angefügten Datei, chinesische Zeichen darin, werden diese in Fragezeichen umgewandelt.
In der Spalte H ist der Text mit den chinesischen Zeichen.
Ich habe eine Datei in das Makro eingebettet, welche die Schritte zum Ausführen des Makros beschreibt.
Die Datei findet ihr unter https://www.herber.de/bbs/user/111473.xlsm
Ich bin zur Zeit in China und daher neun Stunden vor der deutschen Zeit, bitte habt Verständnis, wenn meine Antworten etwas verspätet kommen.
Ich danke Euch für Eure Hilfe, viele Grüße
Paul

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro kann keine Sonderzeichen in Test umwandeln
14.02.2017 10:58:18
mumpel
Hallo!
Du solltest als "UTF-8 ohne BOM" speichern.
Option Explicit

Declare Function UTF8Only Lib "kernel32.dll" (ByVal CodePage As Long, _
                                              ByVal dwFlags As Long, _
                                              ByVal lpWideCharStr As Long, _
                                              ByVal cchWideChar As Long, _
                                              ByVal lpMultiByteStr As Long, _
                                              ByVal cbMultiByte As Long, _
                                              ByVal lpDefaultChar As Long, _
                                              ByVal lpUsedDefaultChar As Long) As Long


Sub UTF8Output(Datei As String, t As String, Optional BOM As Boolean = False)
    
    Dim tmp() As Byte, l As Long, FF As Integer
        
    If Len(Datei) = 0 Or Len(t) = 0 Then Exit Sub
    l = UTF8Only(65001, 0, _
        StrPtr(t), Len(t), 0, 0, 0, 0)
    Redim tmp(0 To l - 1)

    UTF8Only 65001, 0, StrPtr(t), Len(t), _
        VarPtr(tmp(0)), l, 0, 0
    FF = FreeFile
    Open Datei For Output As #FF
    Close #FF
    FF = FreeFile
    Open Datei For Binary As #FF
       Put #FF, , tmp
    Close #FF

End Sub

Sub SaveAsUTF8()

  Dim Textfile As String
  
       Textfile = Environ("USERPROFILE") & "\Desktop\UTFTest.txt"
       UTF8Output Textfile, ThisWorkbook.Sheets("BDC Raw Data").Range("H4").Value
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Gruß, René
Anzeige
AW: Makro kann keine Sonderzeichen in Test umwande
14.02.2017 11:49:35
Paul
Hallo René, leider kann ich das erst morgen früh testen. Eine Frage dazu habe ich aber noch, wo innerhalb des Makro-Coding muss ich diesen Code einfügen?
Vielen Dank, viele Grüße
Paul
AW: Makro kann keine Sonderzeichen in Test umwandeln
15.02.2017 06:00:28
Paul
Hallo René,
ich habe den Code jetzt in ein neues Modul kopiert. Wenn ich jetzt dieses Makro ablaufen lasse, bekomme ich sofort den Runtime Error 453 - Can't find DLL Entry Point UTF8only in Kernel32dll.
Ich habe den Code in das Modul 1 kopiert und das Original Makro in ein Modul 2 kopiert.
Ich nehme an, ich habe irgendeinen Fehler gemacht, kannst Du mir hier weiterhelfen?
Ich habe die von mir geänderte Datei hier geladen: https://www.herber.de/bbs/user/111493.xlsm
Danke, viele Grüße
Paul
Anzeige
Wenn man einen eigenen...
15.02.2017 14:12:31
Case
Hallo Paul, :-)
... Namen für DLLs nehmen möchte (warum auch immer), muss mit einem Alias gearbeitet werden, sonst erhältst Du eben die Fehlermeldung "Laufzeitfehler 453: DLL-Einsprungpunkt UTF8Only in kernel32.dll nicht gefunden". ;-)
Eine DLL beinhaltet in kompilierter Form Funktionen, Konstanten, Variablen. Die sollten natürlich entsprechend aufgerufen werden - in diesem Fall "WideCharToMultiByte".
Richtig also:
Declare Function UTF8Only Lib "kernel32.dll" Alias "WideCharToMultiByte" _
(ByVal CodePage As Long, _
ByVal dwflags As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cbMultiByte As Long, _
ByVal lpDefaultChar As Long, _
ByVal lpUsedDefaultChar As Long) As Long
Wenn Du mit 64 Bit arbeitest, muss noch angepasst werden.
Kennst Du den "Einsprungpunkt" einer DLL nicht kannst Du das mit diesem Tool auslesen:
Dependency Walker 2.2...
Oder mit diesem Tool:
DLL Export Viewer v1.66 - Nir Sofer...
Nir Sofer hat auch noch andere interessante Tools. ;-)
Servus
Case

Anzeige
AW: Wenn man einen eigenen...
16.02.2017 08:47:53
PWN
Hallo Case, hallo René,
ich glaube, ich habe einfach zu wenig Wissen in diesem Bereich. Ich bekomme das Makro nicht so zu laufen, daß es Sonderzeichen und chinesische Schriftzeichen korrekt in die Text-Datei übernimmt.
Könnt Ihr mir das Makro entsprechend umbauen?
Das können wir auch gerne als Auftragsprogrammierung laufen lassen.
Ich muß das irgendwie kurzfristig hinbekommen.
Viele Grüße
Paul
Schicke mir eine...
16.02.2017 13:00:15
Case
Hallo Paul,
... Mail, dann bekommen wir das sicher hin.
Servus
Case

AW: Schicke mir eine...
16.02.2017 14:46:34
Paul
Hallo Case,
wie komme ich denn an Deine Email-Adresse? Du kannst mir die an vga@neiss-tc.de schicken. Dieser Account wird in ca. einer Woche wieder gelöscht, unsere Kommunikation wird dann über meinen normalen Account laufen.
Danke und viele Grüße
Paul
Anzeige
AW: Schicke mir eine...
17.02.2017 12:30:20
mumpel
Klicke auf das Visitenkartensymbol links. Dann wird das Profil des Benutzers angezeigt.

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige