본문 바로가기
엑셀

엑셀 VBA: 시트보호 해제, 설정, 모래시계 적용

by 데이터스토리 2021. 10. 23.
반응형

엑셀 매크로를 이용하여 업무용 프로그램을 개발 중이다.

만드는 로직은 쉽다. 어려운 것은 어떤 코드를 써야 하는지 찾는 것이다.

필요로 하는 코드를 말로하면 바로 문장을 만들어 준다면 좋겠다.

로직은 암기이기도 하지만, 창의적인 발생이 바탕이된다.

구구단의 로직은 많이 알려졌다. 그대로 하면 된다. 더 좋은 방법도 있겠지만, 결과를 만드는 입장에서 크게 차이가 없을 것이다. 마찬가지로 두 수의 합과 차 그리고 최소, 최대, 평균 등의 함수도 이미 만들어져 있다. 그냥 가져다 사용하면 된다. 하지만 그 코드와 사용법은 익숙해 지지 않으면 찾아야 한다.

이번 엑셀 기반 시스템개발을 하면서 진작알았으면 좋았을 것을 하는 내용을 기록해 둔다.

잊지 않으려고 하는 것도 있지만, 쉽게 찾기 위해서다.

데이터분석에서 가장많은 시간이 소모되는 작업은 데이터를 준비하는 시간이다.

프로그램에서 가장많이 소모하는 시간은 무얼까?

내 기준으로는 코드를 찾는 거다. 그렇다. 숙련이 덜 되었기 때문이다.

이 언어 하나만 하면서 숙련도를 높이는 방법도 있지만, 다른 언어도 사용해야 하는 입장에서는 필요한 것을 가장 빨리 찾는 것이 내 입장으로는 최고다.

이제 적자.

'===== 사용자정의 폼의 text box에 format 적용 (공급금액에 적용)

txtSupplyPrice.Text = Format(txtSupplyPrice.Value, "#,##0")  '--서식적용
    

'===== 숫자만 입력 가능하게 처리

Private Sub txtSupplyPrice_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    If isKeyNum(KeyCode) = False Then       '-- 숫자 아니면
        MsgBox "숫자(0~9)만 입력 가능."       '-- 메시지 출력
        KeyCode = 0                         '-- 입력값을 무시한다
        Exit Sub                            '-- 이 코드 없으면 입력한 문자 찌꺼기 남음
    End If

End Sub   


'===== 사용자 폼이 로딩될 때 txtGubun 이 "보류"일 때 process 항목 을 Lock 한다

with userform
    If txtGubun.Text = "보류" Then
        chkProcess.Locked = True
        Exit Sub
    End If
end with
    
'===== txtGubun 값이 "진행"이면 체크박스 chkNext를 check하고, 아니면 check를 해제한다.

with userform
    If .txtGubun.Text = "진행" Then     
    	.chkNext.Value = True
    Else
    	.chkNext.Value = False
    End If
end with

'===== 표제어 표기: 화면에 유형별 표시를 하고자 할 때 Select Case를 사용
'      이렇게 표시하여고 한다.[설계: ▷ , 준비: ○ , 시공: ■ , 수금: ♥]

Select Case tmp_char
  Case "설계":   tmp_sign = "▷"
  Case "준비":   tmp_sign = "○"
  Case "시공":   tmp_sign = "■"
  Case "수금":   tmp_sign = "♥"
  Case Else:    tmp_sign = "&"
End Select
                    


'===== 시트보호를 했다. VBA가 시트에 값을 넣으려면 안된다
'      시트보호를 잠시 해제하고, 출력이 다 된 후 시트보호 암호를 설정하면 된다.
'      
With Worksheets("sheet1")
   .Unprotect ("0000")    '-- "0000"은 비번임. 시트보호를 해제한다.
   MsgBox "시트보호를 잠시 해제 합니다."
   
   call logic()     '=== 로직 call ====
    
   MsgBox "시트보호를 재 진행합니다."
   .Protect ("0000")      '--- 시트 보호를 다시 설정한다.
 End With
 
 
 
'===== 조회가 오래 걸린다. 엑셀 VBA 실행이 오래 걸린다. =====
' 		실행되는 동안 커서를 모래시계로 바꾼다.
' 		실행이 끝나면 정상으로 돌린다.
'
' Application 개체의 Cursor 속성을 이용한다(4가지 있다)
' 	1) xlDefault:  기본 포인터
' 	2) xlIBeam: I 형 포인터
' 	3) xlNorthwestArrow: 11시 방향 화살표 포인터 (기본)
' 	4) xlWait: 모래시계 포인터
'=========================================================
 Sub 데이터_조회()

    Application.ScreenUpdating = False
    Application.Cursor = xlWait           '--- 모래시계로 바꾼다.

    Call 전체_데이터_조회_목록()    '=== 처리 로직 

    Application.Cursor = xlDefault        '--- 기본으로 돌아온다.
    Application.ScreenUpdating = True

End Sub

/

 

반응형