- 최초 작성일: 2001-05-03
- 최종 수정일: 2026-09-30
- 조회수: 20 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 프린트 못하게 하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
독자 한 분께서 보내 주신 메일입니다.
안녕하세요.
선생님의 강의를 눈이 침침하도록 공부하고 있습니다.
왕년에 입시 공부하다 눈이 침침하면 눈이 나빠질까봐 얼른 불끄고 잠을 잤는데...
치매가 방지되지 않을까 열심입니다.
오늘은 137번째 강좌에서 멈추고 눈도 쉴겸 감사의 메일을 보냅니다.
어떻게 그렇게 눈높이를 저에게 맞추어 설명하고 있는지 감탄을 자주 합니다.
저도 덕분에 한 차원 높아진 것 같아 혼자 흐뭇해하고 있답니다.
...(중략)... Index, Match, Offset, 유효성 검사, 그리고 배열수식...
이미 작성되어 있는 수식을 아무리 쳐다봐도 이치적으로 해석이 되지 않았습니다.
하지만 Sum, *, 1대1 대응 등 감탄할 수 밖에 없는 자상한 설명에 저도 모르게
메일 속으로 빠져 들고... <F9>, True, False, 1, 0,...
결국 배열수식에서 SUM이 등장한 것은 1과 0의 계산 때문이고...
이제야 비로소 배열수식의 논리적 이해가 정립됩니다. 아무튼 너무 고맙습니다.
...(하략)...
끝으로 저도 질문 하나 드릴께요. 뭐라해야 하나...
5 X 8 = 40가지 색상이 있잖아요. 25% 회색은 좀 진해서 15% 정도의 회색을
문서에 등록해 놓고 쓸 수는 없을까요?
좋은 밤 되세요.
이 분의 메일을 보고 있자니까 예전에 Exceller가 처음 EXCEL과 VBA를 배울 때가 생각납니다. 90년대 초반에 Lotus 1-2-3를 사용하다가(학교 다닐 때 맛뵈기로...) 엑셀이라는 해괴한(?) 물건을 처음 보고는 한동안 매료가 되었지요. 로터스와는 비교가 안되는 다양한 기능들을 배워 나가는 과정에서 제대로 이해가 되지 않는 부분이 나오면 한참을 헤매다가 어느 순간에 가면 '아하~ 이거 였구나!' 하며 혼자 히죽거리던 그 때가 생각납니다.
아무리 어려운 것이라도 해결책은 반드시 있는 법입니다. 흔히들 '이론과 실제는 다르다'라는 말로 자기자신을 합리화 시키는 경향이 있습니다. 물론 이론과 실제는 다릅니다. 하지만 그렇다고 해서 해결 방법이 없는 것은 아니겠지요. 최선책이 없다면 차선책이라도 찾아야 하는 것이지 무용론에 빠져 있어서는 더 이상의 발전이란 없겠지요.
그저께가 석가탄신일 이었습니다. Exceller는 특별히 신봉하는 종교가 없기 때문에 성탄절에는 절에 가고, 사월 초파일에는 교회에 가는 그런 해괴한 짓들을 주로 하다가 어제는 종각에 있는 조계사에 다녀 왔습니다. 이번에는 번지를 제대로 찾아간 것이지요.
말 그대로 입추의 여지가 없을 정도로 인산인해를 이루고 있더군요. 인파 속에서 이곳 저곳을 기웃거리다가 이런 생각을 해 보았습니다. '과연 저 많은 사람들은 자기가 해야 할 도리는 다 하고서 저렇게 공양을 드리는 것일까?'
Exceller가 좋아하는 경구 중에 진인사 대천명이라는 말이 있습니다. 아시는 바와 같이, "인간으로서의 할 도리를 다한 다음에 하늘의 뜻을 기다린다"는 뜻입니다.
사람이 많은 곳을 별로 좋아하지 않는 성향 탓에 이런 씰 데 없는(?) 생각도 한번 해 보았습니다.
프린트 못하게 하기
핵심 요약: 인쇄 제한 만들기
Workbook_Open에서 암호를 확인해 blnOK 변수에 저장하고, Workbook_BeforePrint에서 blnOK가 True이면 Cancel을 True로 지정해 인쇄를 막습니다.
- 1단계: ThisWorkbook 모듈에 모듈 수준 변수 blnOK를 선언합니다.
- 2단계: Workbook_Open에서 InputBox로 암호를 확인하고 결과를 저장합니다.
- 3단계: Workbook_BeforePrint에서 Cancel = True로 인쇄를 취소합니다.
Step 1: 색상 팔레트 바꾸기
그건 그렇고... 질문하신 것에 대한 답변을 드려야 겠군요.
5 X 8 = 40가지 색상이 있잖아요. 25% 회색은 좀 진해서 15% 정도의 회색을
문서에 등록해 놓고 쓸 수는 없을까요?
라고 하셨는데 40가지 색상이 아니고 56가지 색상입니다. 그리고 이 색상 팔레트는 '도구-옵션' 메뉴에서 '색' 탭을 클릭하시면 대화상자가 나타납니다. 이 중에서 바꾸고자 하는 색을 하나 선택한 다음 '수정' 버튼을 클릭합니다.
그러면 다시 '색' 대화상자가 나타나는데 여러 색상 중에서 원하는 것을 선택하고 '확인' 버튼을 누르시면 됩니다.
Step 2: 암호를 모르면 인쇄 못하게 하기
안녕하세요?
오랜만에 인사를 드립니다. 궁금한 것이 있어서...
파일을 열면 암호를 입력하도록 해서 암호를 알고 있는 사람만 출력을 할 수
있도록 하고 싶습니다. 이런 것도 가능한지요?
답변 기다릴께요...
이 파일을 열었을 때 Input Box가 나타났을 것입니다. 암호는 excel 입니다. 암호를 다른 것으로 입력한 다음 '미리보기'나 '인쇄'를 해 보세요. 아마 제대로 작동이 되지 않을 것입니다. 이것은 Workbook 오브젝트의 BeforePrint 이벤트를 사용한 것입니다.
(1) VB Editor를 활성화 시킵니다. (2) '프로젝트 탐색창'에서 ThisWorkbook 오브젝트를 더블클릭 합니다. 그러면 코드를 입력할 수 있는 '코드 창'이 나타나는데 여기에 아래의 코드를 삽입합니다.
Workbook_Open 이벤트
Option Explicit
Dim blnOK As Boolean
'//여러 프로시저에서 공통적으로 사용하기 위해 외부 변수로 선언하였습니다.
Private Sub Workbook_Open()
Dim strUserName As String
Dim Msg As String
strUserName = Application.UserName
'//현재 시스템에 세팅되어 있는 오피스 프로그램의 사용자 정보를 얻어낸 다음,
'//strUserName 변수에 담습니다.
Msg = Msg & "잘못된 암호입니다" & vbCr
Msg = Msg & "따라서 작업은 계속할 수 있지만 출력은 할 수 없습니다."
If InputBox("암호를 입력하세요!", "암호 입력//By Exceller") = "excel" Then
MsgBox strUserName & "님은 정식 사용자입니다.", , "사용 인증//By Exceller"
blnOK = False
Else
MsgBox Msg, , "암호 입력 오류//By Exceller"
blnOK = True
End If
'//사용자가 입력한 암호가 excel이면 blnOK 변수의 값을 False로, 그렇지 않으면 True로
'//지정합니다.
End Sub
여기까지가 입력받은 암호가 올바른 것인지의 여부를 확인하는 과정이었고 아래의 프로시저가 출력을 할 것인지 말 것인지를 결정합니다.
Workbook_BeforePrint 이벤트
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Msg As String
Msg = Msg & "귀하는 사용권한이 없습니다." & vbCr
Msg = Msg & "자세한 사항은 관리자에게 문의하세요."
If blnOK Then
MsgBox Msg, , "접근 거부//By Exceller"
Cancel = True
End If
End Sub
이 방법은 매크로가 실행될 때만 동작합니다. 매크로 사용 안 함으로 파일을 열거나 VBA 코드가 노출되면 우회할 수 있으므로 엄격한 보안이 필요한 경우에는 적합하지 않습니다. 또한 암호가 코드 안에 그대로 들어 있으므로 실제 사용 시에는 VBA 프로젝트 보호를 함께 설정하세요.
마무리
코드는 너무 간단해서 따로 설명드릴 것도 없군요. 이해가 안되는 부분은 질문하시고 많이 응용해 보시기를...
다음 시간에...
정리 — 인쇄 제한 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 공통 변수 | Dim blnOK As Boolean | 암호 확인 결과 저장 |
| 암호 확인 | If InputBox(…) = "excel" Then | 파일 열 때 암호 입력 |
| 사용자 이름 | Application.UserName | 인증 메시지에 표시 |
| 인쇄 취소 | Workbook_BeforePrint(Cancel As Boolean) | 인쇄 전에 실행 |
| 취소 지정 | Cancel = True | 인쇄 및 미리보기 취소 |
자주 묻는 질문 (FAQ)
Q1. 암호를 아는 사람만 인쇄하도록 하려면 어떻게 하나요?
Workbook_Open에서 암호를 확인해 결과를 저장하고, Workbook_BeforePrint 이벤트에서 조건에 따라 Cancel을 True로 지정합니다.
Q2. 엑셀의 색상 팔레트 색을 바꾸려면?
도구-옵션의 색 탭에서 바꿀 색을 선택하고 수정 버튼을 눌러 원하는 색을 지정합니다. 팔레트는 40가지가 아니라 56가지 색입니다.
Q3. BeforePrint 이벤트는 언제 실행되나요?
인쇄나 인쇄 미리보기를 하기 직전에 실행됩니다.
마치며
Workbook_Open과 BeforePrint 이벤트를 조합하면 인쇄 권한을 간단히 제어할 수 있습니다.