【VBA】GetPrivateProfileString / GetPrivateProfileInt を使って設定値を取得する

0

    <機能>
    (1)iniファイルより GetPrivateProfileString を使って設定値(文字型)を取得します
    (2)iniファイルより GetPrivateProfileInt を使って設定値(数値型)を取得します
    (3)動作確認用のサンプルiniファイルを作成します
    (4)取得結果をメッセージボックスで出力します
    VBA、GetPrivateProfileString、GetPrivateProfileInt、実行結果

    <サンプルデータ>
    [MOJI_SECTION]
    moji1=あいうえおかきくけこ
    moji2="さしすせそ たちつてと"
    moji3=""

    [NUMBER_SECTION]
    num1=1234
    num2=abc
    num3=""
     

    サンプルiniファイルからの取得値
    セクション名 キー名 設定値 取得API 取得値
    MOJI_SECTION moji1 あいうえおかきくけこ GetPrivateProfileString あいうえおかきくけこ
    moji2 "さしすせそたちつてと" GetPrivateProfileString さしすせそたちつてと
    moji3 GetPrivateProfileString
    NUMBER_SECTION num1 123456 GetPrivateProfileInt 123456
    num2 abc GetPrivateProfileInt 0(数値に変換できないため)
    num3 GetPrivateProfileInt 0(設定なしのためGetPrivateProfileIntの第3引数で指定した初期値)


    <動作検証&開発環境>
    Microsoft Office 2010

    <使い方>
    ソース全体をそのまま張り付けてください
    初期設定情報を取得()を呼び出すと処理を開始します
     サンプルini作成 → 設定値取得 → メッセージに結果出力

     

    '//DLLの参照を宣言
    '//GetPrivateProfileString による設定値(文字型)の取得
    '//https://msdn.microsoft.com/ja-jp/library/cc429779.aspx
    Private Declare Function GetPrivateProfileString _
        Lib "KERNEL32.dll" Alias "GetPrivateProfileStringA" _
        (ByVal lpApplicationName As String, _
         ByVal lpKeyName As String, _
         ByVal lpDefault As String, _
         ByVal lpReturnedString As String, _
         ByVal nSize As Long, _
         ByVal lpFileName As String) As Long
    '//GetPrivateProfileInt による設定値(数値型)の取得
    '//https://msdn.microsoft.com/ja-jp/library/cc429763.aspx
    Private Declare Function GetPrivateProfileInt _
        Lib "kernel32" Alias "GetPrivateProfileIntA" _
        (ByVal lpApplicationName As String, _
         ByVal lpKeyName As String, _
         ByVal nDefault As Long, _
         ByVal lpFileName As String) As Long
    '//取得した初期設定値を格納する構造体
    '//要素数は文字、数値それぞれ3つ
    Private Type SCT_SETTING
        mojidat(2) As String
        numdat(2) As Integer
    End Type

    '********************************************
    'iniファイルから設定値を取得します
    '設定値をメッセージボックスで出力します
    '1)iniファイルは実行環境に存在するものとします
    '2)iniファイル名は「初期設定.ini」とします
    '********************************************
    Sub 初期設定情報を取得()
        Dim strSample As String
        Dim sctIni As SCT_SETTING
        '//サンプルiniのパス
        strSample = ThisWorkbook.path & "¥初期設定.ini"
        '//サンプルデータを作成
        MakeSampleIni strSample
        '//iniファイルから初期設定データを取得
        '(1)文字列データ(通常の設定データ)
        sctIni.mojidat(0) = Get_Setting("MOJI_SECTION", "moji1", strSample)
        '(2)文字列データ(ダブルコーテーションで囲まれた文字列)
        sctIni.mojidat(1) = Get_Setting("MOJI_SECTION", "moji2", strSample)
        '(3)文字列データ(iniファイルに設定なし)
        sctIni.mojidat(2) = Get_Setting("MOJI_SECTION", "moji3", strSample)
        '//取得に失敗したときデフォルト値=0が返るように指定
        '(4)数値データ(通常の設定データ)
        sctIni.numdat(0) = GetPrivateProfileInt("NUMBER_SECTION", "num1", 0, strSample)
        '(5)数値データ(文字が設定されている)
        sctIni.numdat(1) = GetPrivateProfileInt("NUMBER_SECTION", "num2", 0, strSample)
        '(6)数値データ(iniファイルに設定なし)
        sctIni.numdat(2) = GetPrivateProfileInt("NUMBER_SECTION", "num3", 0, strSample)
        '//取得値をメッセージ出力
        Dim strmsg As String
        strmsg = "[MOJI_SECTION] moji1=" & sctIni.mojidat(0) & vbCrLf
        strmsg = strmsg & "[MOJI_SECTION] moji2=" & sctIni.mojidat(1) & vbCrLf
        strmsg = strmsg & "[MOJI_SECTION] moji3=" & sctIni.mojidat(2) & vbCrLf
        strmsg = strmsg & "[NUMBER_SECTION] num1=" & CStr(sctIni.numdat(0)) & vbCrLf
        strmsg = strmsg & "[NUMBER_SECTION] num2=" & CStr(sctIni.numdat(1)) & vbCrLf
        strmsg = strmsg & "[NUMBER_SECTION] num3=" & CStr(sctIni.numdat(2)) & vbCrLf
        MsgBox strmsg, vbInformation
    End Sub
    '********************************************
    'GetPrivateProfileStringを用いて文字列データを取得
    '引数 :
    ' sec 取得するセクション名
    ' key 取得するキー名
    ' strSample iniファイルのフルパス
    '********************************************
    Public Function Get_Setting(ByVal sec As String, _
       ByVal key As String, ByVal strSample As String) As String
        Dim strbuf As String
        Dim lLen As Long, lRtn As Long
        '取得バッファを確保
        strbuf = String(256, Chr(0))
        lLen = Len(strbuf)
        'sec : セクションを指定
        'key : キーを指定
        'strbuf : 取得バッファ
        'lLen : 取得バッファ(strbuf)のサイズ
        'strSample : iniファイルのフルパスを指定
        'lRtn : バッファに格納された文字数が返る(終端の NULL 文字は含まない)
        lRtn = GetPrivateProfileString(sec, key, "", strbuf, lLen, strSample)
                       
        'NULL「Chr(0)」の手前までを取り出す
        lLen = InStr(strbuf, Chr(0))
        strbuf = Trim$(Left$(strbuf, lLen - 1))
        Get_Setting = strbuf
    End Function
    '********************************************
    '初期設定.iniをダミーで作成
    '引数 : iniファイルのフルパス
    '********************************************
    Sub MakeSampleIni(ByVal strSample As String)
        Dim fl As Long
        '//テスト用サンプルiniファイルをオープン
        fl = FreeFile
        Open strSample For Output As #fl
        '//データを書き込み
        Print #fl, "'//// サンプルiniファイル"
        Print #fl, "[MOJI_SECTION]"
        Print #fl, "moji1=あいうえおかきくけこ"
        Print #fl, "moji2=""さしすせそ たちつてと"""
        Print #fl, "moji3="""""
        Print #fl, ""
        Print #fl, "[NUMBER_SECTION]"
        Print #fl, "num1=1234"
        Print #fl, "num2=abc"
        Print #fl, "num3="""""
        '//テスト用サンプルiniファイルをクローズ
        Close #fl
    End Sub

     

    よろしければポチッと押してください

    プログラマー ブログランキングへ



    selected entries

    categories

    calendar

    S M T W T F S
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
    << July 2019 >>

    profile

    others

    archives