Thema Datum  Von Nutzer Rating
Antwort
24.07.2023 14:50:19 AD
NotSolved
Blau Kann Windows API-Funktion GetNumberFormatEx() nicht aufrufen – was mache ich falsch?
24.07.2023 17:27:47 Trägheit
Solved
24.07.2023 22:39:41 AD
NotSolved

Ansicht des Beitrags:
Von:
Trägheit
Datum:
24.07.2023 17:27:47
Views:
383
Rating: Antwort:
 Nein
Thema:
Kann Windows API-Funktion GetNumberFormatEx() nicht aufrufen – was mache ich falsch?

Dir scheint nicht bewusst zu sein, dass diese API Funktion ausschließlich mit Unicode funktioniert - VBA kann zwar mit Unicode umgehen, redet aber per Default in ASCII, d.h. man muss hier StrConv() nutzen.

Option Explicit

Private Declare PtrSafe Function GetNumberFormatEx Lib "kernel32" ( _
    ByVal lpLocaleName As String, _
    ByVal dwFlags As Long, _
    ByVal lpValue As String, _
    ByRef lpFormat As Any, _
    ByVal lpNumberStr As String, _
    ByVal cchNumber As Long _
) As Long

Private Const LOCALE_NOUSEROVERRIDE As Long = &H80000000

Sub Example()
  
  Dim strLocal As String
  Dim strValue As String
  
  strLocal = "de-DE"
  strValue = "-12345.67"
  'liefert: "-12.345,67"
  
  '---------------------
  strLocal = StrConv(strLocal, vbUnicode)
  strValue = StrConv(strValue, vbUnicode)
  
  Dim strBuffer As String
  Dim lngResult As Long
  
  lngResult = GetNumberFormatEx(strLocal, LOCALE_NOUSEROVERRIDE, strValue, ByVal 0, vbNullString, 0)
  If lngResult <= 0 Then
    Call MsgBox("Unerwarteter Fehler aufgetreten.", vbCritical, "Fehler: " & Err.LastDllError)
    Exit Sub
  End If
  
  lngResult = 2 * lngResult
  strBuffer = String$(lngResult, vbNullChar)
  
  lngResult = GetNumberFormatEx(strLocal, LOCALE_NOUSEROVERRIDE, strValue, ByVal 0, strBuffer, lngResult)
  If lngResult <= 0 Then
    Call MsgBox("Unerwarteter Fehler aufgetreten.", vbCritical, "Fehler: " & Err.LastDllError)
    Exit Sub
  End If
  
  strBuffer = StrConv(strBuffer, vbFromUnicode)
  strValue = Left$(strBuffer, lngResult - 1)
  
  Call MsgBox( _
      "Formatierter Wert:" & vbNewLine & _
      "[" & strValue & "]", _
    vbInformation, _
    "Ergebnis")
  
End Sub

 

Grüße


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
24.07.2023 14:50:19 AD
NotSolved
Blau Kann Windows API-Funktion GetNumberFormatEx() nicht aufrufen – was mache ich falsch?
24.07.2023 17:27:47 Trägheit
Solved
24.07.2023 22:39:41 AD
NotSolved