|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VBA를 공부하는 사람들을 위한.. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VBA로 *.ini파일 다루기 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Created by abyul.com 2013.09.12 00:35:11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Original Lecture : http://www.abyul.com/zbxe/123812 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ini 파일이 머냐? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ini파일은 프로그램의 설정 파일입니다. |
|
|
|
|
|
|
|
|
|
|
|
|
보통은 파일 확장자가 ".ini"지만 ".cfg"나 ".conf"를 사용하기도합니다. |
|
|
|
|
|
형식만 맞으면 확장자는 상관이 없는거죠. 가끔보면 언어 설정을(.lng) ini형식으로 하기도합니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ini 파일의 형식 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
아래와 같은 형식을 갖습니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[섹션] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
키이름1=키값1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;주석 달음 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
키이름2=키값2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
자세한 정의와 형식에 대한 것은 아래 링크(위키피디아)를 참고하세요.. |
|
|
|
|
http://ko.wikipedia.org/wiki/INI_%ED%8C%8C%EC%9D%BC |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VBA에서 어떻게 사용하냐? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
윈도우 API를 사용해 핸들링합니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
kernel32.dll을 참조하면 설정값을 불러오는 GetPrivateProfileString함수와 |
|
|
|
|
설정 값을 기록하는 WrtitePrivateProfileString함수를 사용할 수 있게 됩니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
코드를 보면 아래와 같이 표시됩니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
Visual Basic Editor의 모듈 창에 아래의 코드를 입력하면, |
|
|
|
|
|
|
|
|
특정값을 불러오거나 저장할 수 있는 함수를 사용할 수 있게 됩니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
각각의 함수에 대한 세부 정보는 msdn을 참고하세요.. |
|
|
|
|
|
|
|
|
|
Get |
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724353(v=vs.85).aspx |
|
Write |
http://msdn.microsoft.com/en-us/library/windows/desktop/ms725501(v=vs.85).aspx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _ |
|
(ByVal lpApplicationName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpKeyName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpDefault As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpReturnedString As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal nSize As Integer, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpFileName As String) As Long |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _ |
(ByVal lpApplicationName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpKeyName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpString As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpFileName As String) As Long |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
실제 사용하는 코드 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
위에서 함수들을 사용할 수있게 했으니.. 실제 프로시저에서 사용해보겠습니다. |
|
|
사용방법은 아래 코드를 참고해보세요.. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### ini파일에서 값을 불러옵니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sub abyulReadIni() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dim sApp As String, sKey As String, sBuffer As String, sPath As String |
|
|
|
|
|
|
sApp = "Korean": sKey = "s0003": sPath = "C:\ProgramData\abyul\Excel\info.ini" |
|
|
|
|
sBuffer = Space(255) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dim iResult As Integer |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
iResult = GetPrivateProfileString(sApp, sKey, "", sBuffer, 255, sPath) |
|
|
|
|
|
|
|
If iResult = 0 Then |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MsgBox "내용이 없거나 불러오기 실패!" |
|
|
|
|
|
|
|
|
|
|
|
|
Else |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MsgBox sBuffer, vbInformation, "값을 제대로 불러왔습니다!!!!" |
|
|
|
|
|
|
|
End If |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'### ini파일에 값을 입력합니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sub abyulWriteIni() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dim sApp As String, sKey As String, sBuffer As String, sPath As String |
|
|
|
|
|
|
sApp = "Korean": sKey = "name": sPath = "C:\ProgramData\abyul\Excel\info.ini" |
|
|
|
|
sBuffer = "God" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dim iResult As Integer |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
iResult = WritePrivateProfileString(sApp, sKey, sBuffer, sPath) |
|
|
|
|
|
|
|
|
If iResult = 0 Then |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MsgBox "지정 경로가 존재하지 않는 듯? 파일은 없으면 만듬" |
|
|
|
|
|
|
|
Else |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MsgBox "기록 성공!" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
End If |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
전체 코드.. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
위에서 WinAPI함수를 사용할 수 있게 선언할때, 32비트용으로 선언했는데요.. |
|
|
|
64비트용 엑셀에서도 돌아가도록 보완한 전체 코드입니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Option Explicit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#If Win64 Then |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Private Declare PtrSafe Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _ |
(ByVal lpApplicationName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpKeyName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpDefault As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpReturnedString As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal nSize As Integer, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpFileName As String) As Long |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#Else |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _ |
|
(ByVal lpApplicationName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpKeyName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpDefault As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpReturnedString As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal nSize As Integer, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpFileName As String) As Long |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#End If |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#If Win64 Then |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Private Declare PtrSafe Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _ |
(ByVal lpApplicationName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpKeyName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpString As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpFileName As String) As Long |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#Else |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _ |
(ByVal lpApplicationName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpKeyName As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpString As String, _ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByVal lpFileName As String) As Long |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#End If |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'### ini파일에서 값을 불러옵니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sub abyulReadIni() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dim sApp As String, sKey As String, sBuffer As String, sPath As String |
|
|
|
|
|
|
sApp = "Korean": sKey = "s0003": sPath = "C:\ProgramData\abyul\Excel\info.ini" |
|
|
|
|
sBuffer = Space(255) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dim iResult As Integer |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
iResult = GetPrivateProfileString(sApp, sKey, "", sBuffer, 255, sPath) |
|
|
|
|
|
|
|
If iResult = 0 Then |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MsgBox "내용이 없거나 불러오기 실패!" |
|
|
|
|
|
|
|
|
|
|
|
|
Else |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MsgBox sBuffer, vbInformation, "값을 제대로 불러왔습니다!!!!" |
|
|
|
|
|
|
|
End If |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'### ini파일에 값을 입력합니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sub abyulWriteIni() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dim sApp As String, sKey As String, sBuffer As String, sPath As String |
|
|
|
|
|
|
sApp = "Korean": sKey = "name": sPath = "C:\ProgramData\abyul\Excel\info.ini" |
|
|
|
|
sBuffer = "God" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dim iResult As Integer |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
iResult = WritePrivateProfileString(sApp, sKey, sBuffer, sPath) |
|
|
|
|
|
|
|
|
If iResult = 0 Then |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MsgBox "지정 경로가 존재하지 않는 듯? 파일은 없으면 만듬" |
|
|
|
|
|
|
|
Else |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MsgBox "기록 성공!" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
End If |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
위 코드에서 사용한 info.ini 파일 내용 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
메모장을 여시고 아래 내용을 입력한 다음, info.ini로 저장하시면 됩니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[abyulTools] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Name=abyul Excel Tools |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Path=C:\ProgramData\abyul\Excel |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Version=2.6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Korean] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s0001=안녕하세요? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s0002=누구세요? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s0003=꺼지세요.. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
name=God |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[English] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s0001=Hi~ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s0002=Who r u? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s0003=Get out! |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
응용해서 잘 사용해보세염.. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
응용은 여러분의 몫입니다. +_+;; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
샘플 파일 다운받기 : |
VSTO_ini파일다루기_GetPrivateProfileString_20130911_3.xlsm |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
주의 사항.. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WritePrivateProfileString을 쓸때.. Unicode로 생성된 파일에는 Unicode로 입력하지만, |
|
그렇지 않은 경우에는 ANSI로 입력합니다. |
|
|
|
|
|
|
|
|
|
|
|
|
관련링크 |
http://blog.naver.com/kid_hacker/150099274691 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
본 강좌는 아별닷컴의 주인장 오주원에 의해 작성되었습니다. |
|
|
|
|
|
|
|
|
|
|
|
|
본 강좌에 설명된 내용은 저작권법에 의해 보호 받고 싶고, 무단 복제, 전제, 재배포를 금합니다. |
|
|
|
|
|
|
|
http://www.abyul.com/ |
작성일 : 2013.09.13 11:44:30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fin. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|