Excelの文字化けはロケール判定しよう

グローバル化が進んでますねぇ。
ところで、システムロケールをうっかり日本語以外にすると、VBAが全部文字化けするって知ってました?
まぁ、そりゃそうなんだけどって感じ。

Excelブック上から見える景色は文字化けしてないんだけど、VBAは化け化け。
セルにつけた名前も化けているので、名前を使ってセル参照するコードは動かない。

日本語を使わないという選択肢もあるけど、こちとら純度100%日本企業なんですー!がまだ大多数だと思う。
なら、起動したらまずロケールチェックかなぁ。

#If Win64 Then
Private Declare PtrSafe Function GetLocaleInfo Lib "kernel32" Alias _
    "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
#Else
Private Declare Function GetLocaleInfo Lib "kernel32" Alias _
    "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
#End If

' システムロケールが"Japan"か判別
Function IsJapanSystemLocale() As Boolean
    Const LOCALE_SYSTEM_DEFAULT As Long = 2048
    Const LOCALE_SENGCOUNTRY As Long = &H1002
    Const KLNG_BUFFER_SIZE As Long = 256
    Const KSTR_JAPAN_LOCALE As String = "Japan"
    
    Dim buf As String * KLNG_BUFFER_SIZE
    Call GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SENGCOUNTRY, buf, KLNG_BUFFER_SIZE)
    IsJapanSystemLocale = (0 < Strings.InStr(1, buf, KSTR_JAPAN_LOCALE, vbTextCompare))

End Function

ただ、もう1個まずいことがあって。

このベータ機能が有効になっていると、日本語にしていても文字化けするんですよねー
公式資料がなさすぎて、今のところ放置。
誰かどうにかしてほしい。


他にもニッチなIT関連要素をまとめていますので、よければ一覧記事もご覧ください。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)