728x90

Excel - VBA 59

천문연구원 API를 이용한 음력 확인

ToLunar와 ToSolar 함수를 EGTools에 추가하면서 실제 변환이 정확한지 확인하는 것을 천문연구원에서 제공하는 API를 이용해서 확인을 했었는데, 여기에 사용한 코드입니다. 천문연구원에서는 양력기준으로 기원전 59년 2월 13일부터 2050년 12월 31일까지의 양력/음력 날짜를 제공합니다. 양력 달력을 이용하기 위한 API를 주소는 https://astro.kasi.re.kr/life/solc? 이며 yyyy, mm, dd 3가지를 양력으로 입력합니다. 조회 결과는 아래와 같은 형태로 반환됩니다. {"SOLC_WEEK":"토","SOLC_DD":"01","SOLC_LEAP_YYYY":"평","JULIAN_DD":"18","JULIAN_YYYY":"2017","LUNC_YYYY":"2017"..

Excel - VBA 2023.01.19

Macro 실행 시간 측정하기

Macro를 작성하면서 시간을 1ms라도 줄이기 위해서 현재 작성한 매크로의 실행 시간을 측정하는 데 사용하기 위해서 사용 1. Class 모듈 이름을 "cTimer"로 삽입하고 아래 코드 추가 Option Explicit #If Win64 Or VBA7 Then Private Declare PtrSafe Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long Private Declare PtrSafe Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long #Else Private Declare Functio..

Excel - VBA 2023.01.18

VBA UDF 결과 배열을 Sheet에 출력하기

Excel 에 도입된 신규 함수중 일부는 Dynamic Array 결과를 Sheet에 출력하는데, UDF에서 이와 비슷한 기능을 할 수 있도록 하는 방법입니다. 장점 : 함수 결과가 배열인 경우 바로 Sheet에 쓸 수 있다. 단점 : 결과 범위가 축소된 경우 줄어든 부분에 대해서 값을 지울 수는 없다. -> 사용상 주의하지 않은 경우 변경된 결과에 이전 결과의 잔상이 남음... (현재 EGTools에는 완벽하지는 않지만 기존 자료를 자동으로 지울 수 있도록 적용되어 있습니다.) 기본적인 개념은 아래 출처에서 착안하여 시행착오를 거쳐 정리한 결과입니다. https://stackoverflow.com/a/37344343 처리 과정은 대강 이렇게 진행됩니다. 1. Global 변수에 결과를 전달할 배열 선언..

Excel - VBA 2023.01.17

IsTime() 셀 값이 시간 값인지 어떻게 확인할 수 있을까?

VBA로 셀값의 형태가 어떤 것인지 판단하기 위해서 여러가지 방법을 사용합니다만, 시간값만 있을 경우 판단하기 애매한 경우가 있습니다. 입력된 값이 어떤 것이고 셀서식이 어떻게 되어 있느냐에 따라 달라지는데, 아래의 코드와 예제 결과를 참고해 보세요. Function IsDateValue(Cell As Range) IsDateValue = IsDate(Cell.Value) End Function Function IsString(Cell As Range) IsString = TypeName(Cell.Value) = "String" End Function Function IsNumericValue(Cell As Range) IsNumericValue = IsNumeric(Cell.Value) End Func..

Excel - VBA 2023.01.11

VBA로 Add-In(추가기능) 자동 업데이트 하기

EGTools v3.5.0에 추가된 업데이트 기능의 VBA 소스입니다. DownloadFromURL함수는 여기를 참고하세요. 다운로드한 파일은 임시로 사용자의 Downloads 폴더에 저장했다가 복사가 완료되면 삭제합니다. 사용중인 파일을 덮어씌우기 위해서 Add-In을 읽기 전용 상태로 바꾸는 것이 필요합니다. 사용자가 작성중인 파일이 있을 경우가 있어 Excel의 재시작은 사용자가 하도록 합니다. Public Const MyAddIn = "EGTools" Public LastDocURL As String Sub UpdateAddIn() Dim NewFile As String Dim ThisFullPath As String If Not ThisWorkbook.IsAddin Then Exit Sub Th..

Excel - VBA 2023.01.06

URL을 지정하여 File을 Download하기

인터넷에 존재하는 파일을 다운로드 하기 위하여 아래와 같은 코드를 사용할 수 있습니다. 다운로드할 대상의 URL과 Download할 Path와 이름이 포함된 FullName을 지정하여 다운로드 합니다. 이 기능은 Add-In인 EGTools 추가기능에 자동업데이트 기능을 추가할 때 사용하였습니다. Binary 파일을 ADODB.Stream으로 다운로드 하는 방식입니다. 다운로드가 되면 새로 생성된 파일의 FullName을 반환하고, 실패하면 빈문자열(vbNullString)을 반환합니다. Function DownloadFromURL(FileUrl As String, NewFullName As String) Dim oXMLHTTP As Object, oStream As Object On Error GoTo..

Excel - VBA 2023.01.06

Ribbon Menu에 토글버튼 사용하기

리본메뉴에서 아래처럼 [날짜 선택] On/Off 되는 토글 버튼을 사용하는 방법입니다. 선택이 되어 On 상태이면 바탕색이 짙은 회색으로 변하고, 선택이 해제되어 Off 상태이면 바탕색이 사라집니다. 리본메뉴 XML에서는 이렇게 정의합니다. 토글버튼을 클릭했을 때 할일은 OnAction을 통해서 호출하고, 토글버튼의 상태를 업데이트 하는 것은 getPressed를 통해서 진행합니다. CallBack 함수는 이렇게 작성합니다. Public DTEnabled As Boolean '// Date Picker용 '// Ribbon Menu에서 "날짜입력" toggle button "onAction" 처리 Sub rbnDTPicker(control As IRibbonControl, pressed As Boolea..

Excel - VBA 2023.01.06

Ribbon Menu에서 매크로에 인수 전달하기

일반 프로시저를 만들어 두고 공통으로 사용하기 위해서 인수를 사용한 다음 필요에 따라 인수를 이용하여 동작 방식을 변경하는 것을 할 수 있습니다. 그런데, Ribbon Menu에서 CallBack 함수를 호출할 때 인수를 어떻게 전달할까요? 예전에는 아래처럼 Ribbon Menu에서 각각 별도로 호출을 하고, CallBack 함수에서 공통 프로시저에 인수를 넣어 호출하는 방식을 사용했습니다. Ribbon Menu의 XML 부분 CallBack 함수 부분 Public Sub rbnPasteVisibleAll(control As IRibbonControl) ' 보이는 셀에 복사 PasteToVisibleCells xlPasteAll End Sub Public Sub rbnPasteVisibleValues(c..

Excel - VBA 2023.01.05
728x90