Anzeige
Archiv - Navigation
1412to1416
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

VBA Makro von 32bit auf 64bit anpassen

VBA Makro von 32bit auf 64bit anpassen
10.03.2015 15:11:41
32bit
Hallo ich hab ein Problem. Ich habe ein Makro welches mir meine aktuelle Arbeitsmappe als .csv Semikolon-getrennt und utf-8 abspeichert. Das Makro funktioniert auf einem 32bit Rechner auch einwandfrei, allerdings macht es jetzt Probleme auf meinem 64 bit Rechner.
Ich würde das Makro gerne so umschreiben, dass es mir die Datei Komma-getrennt und weiterhin UTF-8 konvertiert abspeichert.
Hier das Makro
Option Explicit
Private Declare 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
Private Const CP_UTF8 As Long = 65001
Private Const FILE_NAME = "C:\Ausgabe.csv"
Public Sub UTF8_Main()
Dim strText As String
Dim objRange As Range
If Get_Range(objRange) Then
If Build_Output_String(objRange, strText) Then
If Create_UTF8_File(FILE_NAME, strText) Then
MsgBox "Erstellen der Datei erfolgreich beendet.", _
vbInformation, "Information"
End If
End If
End If
End Sub

Private Function Get_Range(objRange As Range) As Boolean
Dim lngRow As Long, lngColumn As Long
Dim lngFirstRow As Long, lngFirstColumn As Long
Dim lngLastRow As Long, lngLastColumn As Long
Dim objLastUsedCell As Range
On Error GoTo error_handler
Set objLastUsedCell = Cells.SpecialCells(xlCellTypeLastCell)
For lngRow = objLastUsedCell.Row To 1 Step -1
If WorksheetFunction.CountBlank(Rows(lngRow)) 

Private Function Build_Output_String(objRange As Range, strText As String) As Boolean
Dim lngRow As Long
Dim vntTempArray As Variant
On Error GoTo error_handler
With objRange
For lngRow = 1 To .Rows.Count
vntTempArray = .Rows(lngRow).Value
vntTempArray = WorksheetFunction.Transpose( _
WorksheetFunction.Transpose(vntTempArray))
strText = strText & Join(vntTempArray, ";") & vbCrLf
Next
End With
strText = Left$(strText, Len(strText) - 2)
Build_Output_String = True
Exit Function
error_handler:
MsgBox "Fehler: " & CStr(Err.Number) & vbLf & vbLf & _
Err.Description, vbCritical, "Fehler in Prozedur ''Build_Output_String''"
End Function

Private Function Create_UTF8_File(strFileName As String, strText As String) As Boolean
Dim intFileNumber As Integer
Dim bytBuffer() As Byte
Dim lngLength As Long, lngPointer As Long, lngSize As Long
On Error GoTo error_handler
lngLength = Len(strText)
lngPointer = StrPtr(strText)
lngSize = WideCharToMultiByte(CP_UTF8, 0&, _
lngPointer, lngLength, 0&, 0&, 0&, 0&)
ReDim bytBuffer(0 To lngSize - 1)
Call WideCharToMultiByte(CP_UTF8, 0&, lngPointer, _
lngLength, VarPtr(bytBuffer(0)), lngSize, 0&, 0&)
If Dir$(strFileName)  vbNullString Then Call Kill(strFileName)
Reset
intFileNumber = FreeFile
Open strFileName For Binary Access Write As #intFileNumber
Put #intFileNumber, , bytBuffer
Close #intFileNumber
Create_UTF8_File = True
Exit Function
error_handler:
MsgBox "Fehler: " & CStr(Err.Number) & vbLf & vbLf & _
Err.Description, vbCritical, "Fehler in Prozedur ''Create_UTF8_File''"
End Function

´---------------------------------------------------
Vielen Dank für eure Hilfe

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Makro von 32bit auf 64bit anpassen
10.03.2015 15:24:27
32bit
Hallo,
das liegt an der API-Funktion
#If win64 Then
Private 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
#Else
Private Declare 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
#End If
Gruß
Rudi

Anzeige
AW: VBA Makro von 32bit auf 64bit anpassen
10.03.2015 15:49:18
32bit
Funkioniert so leider immer noch nicht :(

AW: VBA Makro von 32bit auf 64bit anpassen
10.03.2015 16:00:13
32bit
Hallo,
so:
Private Declare PtrSafe Function WideCharToMultiByte Lib "kernel32.dll" ( _
    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

Gruß
Nepumuk

Anzeige
AW: VBA Makro von 32bit auf 64bit anpassen
10.03.2015 16:03:54
32bit
Hab ich alles versucht, allerdings meldet er immer "Fehler 13: Typen unverträglich.
Ich denke es hat was mit der Build_Output_String Funktion jedoch weis ich nicht wie ich die anpassen muss.
Besten Dank

AW: VBA Makro von 32bit auf 64bit anpassen
10.03.2015 18:18:22
32bit
Hallo,
und nun? Sollen wir raten in welcher Prozedur der Fehler ausgelöst wird?
Gruß
Nepumuk

AW: VBA Makro von 32bit auf 64bit anpassen
10.03.2015 16:07:57
32bit
Hab ich alles versucht, allerdings meldet er immer "Fehler 13: Typen unverträglich.
Ich denke es hat was mit der Build_Output_String Funktion jedoch weis ich nicht wie ich die anpassen muss.
Besten Dank

AW: VBA Makro von 32bit auf 64bit anpassen
10.03.2015 16:16:40
32bit
Hab ich alles versucht, allerdings meldet er immer "Fehler 13: Typen unverträglich.
Ich denke es hat was mit der Build_Output_String Funktion jedoch weis ich nicht wie ich die anpassen muss.
Besten Dank
Anzeige

12 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige