【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

     

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

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



    calendar

    S M T W T F S
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
    << October 2017 >>

    profile

    others

    mobile

    qrcode