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

UTF8Output / Typ unverträglich

UTF8Output / Typ unverträglich
24.11.2020 21:57:41
Selma
Hallo Leute,
ich habe seit diese Woche Office 365 im Einsatz. Ich bekomme diese Meldung in diesem Code:
"Typ unverträglich" in diesem Abschnitt StrPtr
Das hat bis letzte Woche alles funktioniert. Was muss ich bitte ändern?
Option Private Module
Option Explicit
Declare PtrSafe Function WideCharToMultiByte 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 = WideCharToMultiByte(65001, 0, StrPtr(t), Len(t), 0, 0, 0, 0)
ReDim tmp(0 To l - 1)
WideCharToMultiByte 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
Beste Grüße,
Selma

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UTF8Output / Typ unverträglich
24.11.2020 23:11:40
Yal
Hallo Selma,
Ist Office 365 64Bit? Dann wird vielleicht StrPtr 64bittig interpretiert und passt dann nicht zu Kernel32.dll.
siehe (habe selber nicht im Detail gelesen):
https://docs.microsoft.com/de-de/office/client-developer/shared/compatibility-between-the-32-bit-and-64-bit-versions-of-office
"VBA hatte zuvor keinen pointer-Datentyp, sodass Sie 32-Bit-Variablen zum Speichern von Zeigern und Handles verwenden mussten. Mit diesen Variablen werden nun die von API-Aufrufen zurückgegebenen 64-Bit-Werte abgeschnitten, wenn Sie Declare-Anweisungen verwenden."
oder den Passus "API-Kompatibilität" einige Hinweis uber "Declare"-Verhalten.
Viel Erfolg
Yal
Anzeige
AW: UTF8Output / Typ unverträglich
24.11.2020 23:16:13
volti
Hallo Selma,
mindestens der Declare stimmt nicht mehr ganz.
Versuche mal diesem Declare:
Private Declare PtrSafe Function WideCharToMultiByte Lib "kernel32" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpWideCharStr As String, _
ByVal cchWideChar As Long, _
ByVal lpMultiByteStr As String, _
ByVal cchMultiByte As Long, _
ByVal lpDefaultChar As String, _
ByVal lpUsedDefaultChar As LongPtr) As Long
viele Grüße
Karl-Heinz
AW: UTF8Output / Typ unverträglich
25.11.2020 11:37:33
Planlos
in der deklaration ersetz mal für alle schnittstellenvariablen die mit lp... beginnen den datentyp von long auf longptr.
Anzeige
AW: UTF8Output / Typ unverträglich
25.11.2020 13:06:40
volti
Hallo Planlos,
das funktioniert und ist auch logisch.
Da ist dann wohl ein Fehler in der API-Reference Windows64API_Declares.txt aus 2010.
Bei deren Anwendung kommt zwar kein Fehler, aber auch kein vernünftiges Ergebnis....
Ersetzt man spaßeshalber nur lpMultiByteStr as LongPtr werden bei meinem Testetext chinesische Zeichen zurückgeliefert.
VG KH
AW: UTF8Output / Typ unverträglich
25.11.2020 12:05:23
peterk
Hallo
Um eine UTF-8 Datei zu schreiben kannt Du auch ADO verwenden.

Sub DatenSchreiben(DateiName As String, MyTextLine As String)
' Konstanten für WriteText
Const adWriteChar = 0
Const adWriteLine = 1
' Konstanten für SaveToFile
Const adSaveCreateNotExist = 1
Const adSaveCreateOverwrite = 2
' Konstanten für LineSeparator
Const adCR = 13
Const adCRLF = -1
Const adLF = 10
Dim objStream As Object
Set objStream = CreateObject("ADODB.Stream")
objStream.Charset = "utf-8"
objStream.LineSeparator = adCRLF
objStream.Open
objStream.writetext MyTextLine, adWriteLine
objStream.SaveToFile DateiName, adSaveCreateNotExist
Set objStream = Nothing
End Sub

Anzeige
AW: UTF8Output / Typ unverträglich
27.11.2020 12:18:48
Selma
Vielen Dank an Alle!
Beste Grüße,
Selma

88 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige