24.01.2021, 20:14
25.01.2021, 07:53
"OPENFILENAME" scheint in der 64-bit-Version nicht zu laufen. Es erscheint weder der Dialog noch eine Fehlermeldung. Egal in welcher Datei der Code steht. Der Code rennt durch (auch die vielen Beispielcodes aus dem Internet). Kennt jemand dieses Problem und eine Lösung?
25.01.2021, 08:46
Hallo Rene,
der OpenFileName funktioniert auch unter 64Bit.
Hatte erst vor kurzem hier ein Beispiel gepostet.
https://www.clever-excel-forum.de/Thread...#pid220868
Aber es ist ein Detail zu beachten, für dessen Herausfindung ich damals auch länger gebraucht hatte.
Die StruktureSize-Angabe muss mit LENB() angegeben werden.
.lStructSize = LenB(SpeichernAls)
Habe das jetzt in Deinem Tool nicht getestet, aber probiere es mal aus.
Viele Grüße
Karl-Heinz
der OpenFileName funktioniert auch unter 64Bit.
Hatte erst vor kurzem hier ein Beispiel gepostet.
https://www.clever-excel-forum.de/Thread...#pid220868
Aber es ist ein Detail zu beachten, für dessen Herausfindung ich damals auch länger gebraucht hatte.
Die StruktureSize-Angabe muss mit LENB() angegeben werden.
.lStructSize = LenB(SpeichernAls)
Habe das jetzt in Deinem Tool nicht getestet, aber probiere es mal aus.
Viele Grüße
Karl-Heinz
25.01.2021, 09:59
Danke! Jetzt erscheint der Dialog. Aber jetzt kracht es bei "UTFOutput", keine Ahnung weshalb.
25.01.2021, 11:02
Versuche es mit:
Das passt zu Deiner Sub.
Obwohl in der Wn64-Declareliste ByVal lpWideCharStr As String steht, ist für Deine Sub m.E. ByVal lpWideCharStr As LongPtr angesagt.
viele Grüße
Karl-Heinz
Code:
Private Declare PtrSafe Function WideCharToMultiByte Lib "kernel32" ( _
ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As LongPtr, _
ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, _
ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As LongPtr) As Long
ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As LongPtr, _
ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, _
ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As LongPtr) As Long
Das passt zu Deiner Sub.
Obwohl in der Wn64-Declareliste ByVal lpWideCharStr As String steht, ist für Deine Sub m.E. ByVal lpWideCharStr As LongPtr angesagt.
viele Grüße
Karl-Heinz
25.01.2021, 11:20
Danke! Das probiere ich dann später aus. Aber typisch MS, nicht mal eine vernünftige Fehlermeldung.
25.01.2021, 12:10
Eben getestet.Stürzt immernoch ab.
25.01.2021, 13:04
Ich hab ein meiner Bastelkiste, eine ähnliche, aber leicht abweichende Variante.
Kannst Du ja mal testen, ob die bei Dir durchläuft und auch das gewünschte Ergebnis bringt.
Ansonsten bin ich jetzt nicht der Fachmann für diese Funktion.
Kannst Du ja mal testen, ob die bei Dir durchläuft und auch das gewünschte Ergebnis bringt.
Ansonsten bin ich jetzt nicht der Fachmann für diese Funktion.
Code:
Private Declare PtrSafe Function WideCharToMultiByte Lib "kernel32" ( _
ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As LongPtr, _
ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, _
ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As LongPtr) As Long
Sub UTF8Output(Datei As String, T As String, Optional BOM As Boolean = False)
Dim tmp As String, l As Long, FF As Integer
Dim tt As String
If Len(Datei) = 0 Or Len(T) = 0 Then Exit Sub
l = WideCharToMultiByte(65001, 0, StrPtr(T), -1, 0, 0, 0, 0) 'Anzahl Zeichen ermitteln
tmp = Space$(l)
WideCharToMultiByte 65001, 0, StrPtr(T), -1, tmp, l, 0, 0
If Dir$(Datei) <> "" Then Kill Datei
FF = FreeFile
Open Datei For Binary As #FF
Put #FF, , tmp
Close #FF
End Sub
Sub Test()
Dim T As String
T = "düses ist än nöier Teßt"
UTF8Output "C:\Users\voltm\Desktop\UTFTest.txt", T
End Sub
ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As LongPtr, _
ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, _
ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As LongPtr) As Long
Sub UTF8Output(Datei As String, T As String, Optional BOM As Boolean = False)
Dim tmp As String, l As Long, FF As Integer
Dim tt As String
If Len(Datei) = 0 Or Len(T) = 0 Then Exit Sub
l = WideCharToMultiByte(65001, 0, StrPtr(T), -1, 0, 0, 0, 0) 'Anzahl Zeichen ermitteln
tmp = Space$(l)
WideCharToMultiByte 65001, 0, StrPtr(T), -1, tmp, l, 0, 0
If Dir$(Datei) <> "" Then Kill Datei
FF = FreeFile
Open Datei For Binary As #FF
Put #FF, , tmp
Close #FF
End Sub
Sub Test()
Dim T As String
T = "düses ist än nöier Teßt"
UTF8Output "C:\Users\voltm\Desktop\UTFTest.txt", T
End Sub
_________
viele Grüße
Karl-Heinz
viele Grüße
Karl-Heinz
25.01.2021, 13:30
Das funktioniert. Allerdings wird ein "White Space" eingefügt, welches in Notepad++ als "Null" mit schwarzem Hintergrund angezeigt wird. Merkwürdiger Weise hat mein Code in einer separaten Datei funktioniert, allerdings mit lauter "Null" mit schwarzem Hintergrund, also vollkommen falscher Inhalt.
Und damit hat sich auch das FTP-Problem gelöst (musste ja schiefgehen wenn keine Datei vorhanden ist :blus: ).
Und damit hat sich auch das FTP-Problem gelöst (musste ja schiefgehen wenn keine Datei vorhanden ist :blus: ).
25.01.2021, 16:15
Die Word-Version habe ich eben auch angepasst. Funktioniert bei mir. https://www.rholtz-office.de/counters/ge...php?id=305