1. 아별툴
  2. 아별툴 패밀리
  3. 엑셀 질문하기
  4. 엑셀 강좌
  5. 엑셀 팁
  6. 엑셀 자료실
  7. 엑셀 연구과제
  8. 엑셀 북마크
  9. 관련 프로그램 소개

[강좌] VBA로 *.ini 파일 다루기..

VBA 조회 수 4882 추천 수 0 2013.09.12 01:44:19
                                             
                                             
                                             
                                             
  VBA를 공부하는 사람들을 위한..                          
  VBA로 *.ini파일 다루기 abLecIni_img1.png
                                       
  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.                                          
문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
14 엑셀일반 [강좌] 다중 조건 조회 및 중복 항목 제거하여 개수 구하기 imagefile [10] [레벨:30]아별 2009-10-10 15515
13 엑셀일반 [강좌] 셀안에 이미지 또는 도형 정렬하기 imagefile [4] [레벨:30]아별 2011-10-11 10933
12 NETWORKDAYS() : 근무일수를 구하는 함수 imagefile [7] [레벨:30]아별 2009-08-25 10250
11 DATEDIF 함수 file [5] [레벨:30]아별 2009-07-17 9681
10 [강좌] 차트에 보조선 넣기 imagefile [17] [레벨:30]아별 2011-08-09 7590
9 VBA 유저폼에 이미지 쉽게 집어 넣기.. imagefile [레벨:30]아별 2012-09-06 7195
8 엑셀에서 자간이 벌어진것 같은 문자를 정상으로 만드는 ASC 함수 file [레벨:30]아별 2009-10-29 7047
7 [강좌] 차트 데이터 레이블을 내 맘대로 다른 것으로 바꾸고 싶을때... imagefile [4] [레벨:30]아별 2011-07-14 6773
6 [강좌] 매크로 함수를 활용하여 수식셀 자동 색상 지정하기 imagefile [6] [레벨:30]아별 2011-07-19 6488
» VBA [강좌] VBA로 *.ini 파일 다루기.. imagefile [레벨:30]아별 2013-09-12 4882
4 VBA [강의 준비 아이디어 ] 매크로가 필요할 때.. file [1] [레벨:30]아별 2014-06-23 3463
3 기타 [교육안내] 교육비 환급(80%~100%) 업무에 바로 쓰는 엑셀 2007 활용실무 imagefile [레벨:30]아별 2013-12-05 2752
2 엑셀일반 함수에 포함된 "--" 기호 의미 [1] 파야 2014-11-24 2733
1 엑셀일반 [강의 준비 아이디어 ] 상대 참조와 절대 참조 설명용.. [레벨:30]아별 2014-09-03 2686