9월 17 2015
엑셀(EXCEL) – 사용자 정의 꼬리말 설정(사용자 정보 인쇄)
일반적으로 엑셀에서 꼬리말의 경우 첨부된 이미지 상단처럼 페이지 번호, 전체 페이지, 날짜, 시간과
파일 경로, 이름, 그림 등을 추가할 수 있지만 미리보기의 아래처럼 사용자 이름, 로그온 IP 등과 같은
특수한 내용을 인쇄하기가 힘이 듭니다. 특히 보안에 관련된 문서의 경우 그 인쇄한 당사자가 누군지
확인할 수 있도록 Foot Print를 남기는 것이 중요하다고 봅니다.
http://www.clien.net/cs2/bbs/board.php?bo_table=kin&wr_id=3523980
([도움요청] 엑셀 바닥글 작성 . 갈켜주세요.. ㅠㅠ)
우선 VBA Editor여시고 Module 추가하시고 다음 소스 붙여넣기 합니다. 제가 올린 팁들에서 사용한
로그인 사용자 정보와 IP를 찾아내는 것입니다.
Option Explicit
Private Declare Function GetUserName Lib “advapi32.dll” Alias “GetUserNameA” _
(ByVal lpBuffer As String, nSize As Long) As Long
Function FindOutUserName() As String
Dim lpbuff As String * 12
Dim lngret As Long
Dim strUserName As String
On Error GoTo ET
lngret = GetUserName(lpbuff, 12)
strUserName = Left(lpbuff, InStr(lpbuff, Chr(0)) – 1)
FindOutUserName = Trim(strUserName)
Exit Function
ET:
FindOutUserName = “”
End Function
Public Function getIP()
Dim WMI As Object
Dim qryWMI As Object
Dim Item As Variant
Set WMI = GetObject(“winmgmts:\\.\root\cimv2”)
Set qryWMI = WMI.ExecQuery(“SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True”)
For Each Item In qryWMI
getIP = Item.IPAddress(0)
Next
Set WMI = Nothing
Set qryWMI = Nothing
End Function
이제 프린터할 꼬리말을 작성하는 루틴입니다. 간단하죠! 사용자 정보와 IP, 지금 프린트하는 시간을
중앙에 들어갈 꼬리말로 지정하는 것입니다. 다른 정보로 필요하면 왼쪽과 오른쪽 꼬리말로 지정해서
많은 정보가 들어갈 수 있도록 합니다. 왼쪽 꼬리말에 로고를 넣는 예제도 추가하였습니다.
Sub Custom_Footer()
Dim intTPage As Integer
Dim log_name As String, log_Ip As String
Dim DateStp As String, TimeStp As String
intTPage = ExecuteExcel4Macro(“Get.Document(50)”)
log_name = FindOutUserName
log_Ip = getIP
TimeStp = Format(Now(), “yyyy-mm-dd hh:mm:ss”)
With ActiveSheet.PageSetup
.CenterFooter = log_name & ” : ” & log_Ip & ” : ” & TimeStp
With .LeftFooterPicture
.Filename = “C:\Apple_logo.jpg”
.Height = 30
.Width = 30
End With
End With
ActiveSheet.PageSetup.LeftFooter = “&G”
End Sub
그리고 VBA Editor에서 ThisWorkBook을 더블클릭하시고 아래 코드를 넣어 줍니다. 내용은 프린터하기 전에
사용자 정의 루틴을 돌려서 기본 꼬리말의 내용을 대체하는 것입니다.
Option Explicit
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Call Custom_Footer
End Sub
상기 루틴들은 엑셀화일을 열때 Macro를 사용할 수 있도록해야 하므로 제한적으로 사용되지만 제가 올린
팁에 보면 엑셀화일을 열때 Welcome 시트만 보이도록 설정해서 무조적 매크로를 활성화해야 일을 시작?
할 수 있도록 하는 팁이 있습니다. 이것을 이용해서 프린터할 때 사용자 정의 꼬리말을 사용해서 프린트 한
내용을 확인할 수 있고 조금 더 추가하면 특정 시트를 숨겨서 인쇄 이력 관리도 가능합니다.
http://www.be4u.kr/wp/?p=2903 엑셀 화일을 지정 컴퓨터에서만 열 수 있게 하는 법
첨부 화일 : 20150916-사용자 정의 꼬리말(사용자 정보 인쇄)
9월 18 2015
엑셀(EXCEL) – 가로 세로 서로 다른 방향으로 설정된 두 시트의 교차 양면 출력
엑셀 관련 아질게에 올라오는 질문들을 보면 어찌보면 황당한 것도 많고 업무에서 실제로 데이터의
가공에 힘들고 반복적인 수작업으로 시간만 빼앗기고 업무 효율은 떨어지는 악순환에서 합리적인
해결책을 찾고자 지푸라기라도 잡는 심정으로 질문을 올리시는 분이 많으시더군요.
http://www.clien.net/cs2/bbs/board.php?bo_table=kin&wr_id=3532541
(엑셀 2007 sheet1과 sheet2 한꺼번에 양면인쇄 질문입니다.)
어떻게 보면 심플한 해결 방법이 있습니다. 수작업!!! 일단 Sheet1 전체를 출력하고 다시 출력된 종이를
맞추어 트레이에 넣고 그냥 양면인쇄 옵션없이 출력하는 방법입니다. 그런데 한두장이면 문제가 없지만
엑셀이란 프로그램 자체가 대량의 데이터를 다루다보 니 몇십장이 넘어갈 수도 있다는 것이 문제지요.
제가 양면인쇄되는 프린터가 없어서 정확하다고는 말씀드리기가 어려우나 내용으로 판단해보건데
출력시 Sheet1 전체를 출력하고 Sheet2를 출력하다 보니 양면 인쇄 옵션을 선택하게 되면 Sheet1의
1면과 2면이 양면으로 출력되고 Sheet2도 마찬가지 인 것으로 이해가 됩니다.
참 난해한 문제입니다. 머리를 이리 굴리고 저리 굴려봐도 답이 보이질 않는군요. 그러나 궁하면 통하는 법
pdf를 이용하기로 해 봅니다. 엑셀에서 출력 옵션으로 pdf로 출력하는 것이 있는데 이것을 이용하면 해결할
방법이 보입니다.
VBA Editor로 Module 추가하시고 아래 코드를 붙여넣기 합니다.
Option Explicit
Sub Prt_Dbl_Page()
‘ f: 앞면 세로, b : 뒷면 가로 접두어
Dim fp_cnt As Integer, bp_cnt As Integer
Dim i As Integer, prt_cnt As Integer
Dim f_cnt As Integer, b_cnt As Integer
Dim shtFore As Worksheet
Dim shtBack As Worksheet
f_cnt = 1
b_cnt = 1
‘ 출력되는 과정은 굳이 볼 필요가 없어 속도를 위해서 업데이트 중지
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set shtFore = Sheets(“ForePort”)
Set shtBack = Sheets(“BackLand”)
‘ 앞면을 세로로 출력 설정
shtFore.Activate
shtFore.PageSetup.Orientation = xlPortrait
fp_cnt = ExecuteExcel4Macro(“get.document(50)”)
‘ 뒷면을 가로로 출력 설정
shtBack.Activate
shtBack.PageSetup.Orientation = xlLandscape
bp_cnt = ExecuteExcel4Macro(“get.document(50)”)
If fp_cnt > bp_cnt Then
prt_cnt = fp_cnt
Else
prt_cnt = bp_cnt
End If
‘ 임시로 pdf화일 만들 폴더를 설정, 물론 먼저 만들어 두어야…
ChDir “C:\Temp\”
‘ pdf로 만들어지 각 페이지의 병합을 편하게 하기위해
‘ 문서를 이름순으로 정리하여 병합할 수 있도록 함
For i = 1 To prt_cnt
shtFore.ExportAsFixedFormat _
Type:=xlTypePDF, Filename:=i & “1” & “.pdf”, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, from:=f_cnt, to:=f_cnt, _
OpenAfterPublish:=False
shtBack.ExportAsFixedFormat _
Type:=xlTypePDF, Filename:=i & “2” & “.pdf”, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, from:=b_cnt, to:=b_cnt, _
OpenAfterPublish:=False
‘ 한장 한장 출력하도록 함
f_cnt = f_cnt + 1
b_cnt = b_cnt + 1
Next
Application.ScreenUpdating = True
End Sub
코드는 딱히 어려운 코드가 아닙니다. 세로 출력할 시트와 가로 출력할 시트를 설정하고 그 자료의 페이지
수를 알아내고 제일 큰 페이지 수 만큼 프린터를 하라는 것입니다. 그리고 그 프린터를 할 때에 종이로
직접하지 말고 pdf화일로 만들라는 것인데 세로출력과 가로출력을 한장씩 번갈아 출력해서 각각으로
pdf로 만들어 특정 폴더에 저장하라는 프로시져입니다.
내용 중에 페이지 병합을 위하여 1페이지에 양면으로 들어갈 것을 예상해서 접미사 1,2를 붙여 저장해서
특정 폴더를 이름순으로 정렬해서 Merge(병합)시킬 때 편하게 화일을 선택할 수 있도록 해 두었습니다.
…
여기서 자동으로 pdf로 병합하는 루틴을 구걸해서 찾았는데 이것이 구버전 API라서 사용하기가 번거럽고
해서 무료로 제공되는 pdf Tool을 이용해 병합하기로 해 봅니다. 여기서는 pdftk를 사용하기로 합니다.
다른 Tool들도 인터페이스만 다르지 결과는 똑같으므로 아무거나 사용하셔도 됩니다.
https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
http://angusj.com/pdftkb/
http://www.vb-helper.com/howto_pdf_merger.html
이제 인쇄 명령을 누르면 자동으로 Sheet1 한페이지, Sheet2 한페이지가 지속적으로 지정된 특정 폴더에
pdf로 저장되고 이 화일들을 pdf Tool로 묶어서 양면인쇄 옵션을 켜시고 출력하시면 됩니다. 힘들군요!
제가 양면인쇄되는 프린터가 없고 경험도 없어서 이 내용이 이론적으로만 만들어진 것이기에 잘 안되면
프린터 없는 제 잘못입니다? … 여하튼 pdf로 각각 만들어 두었으니 프린터 가지신 분께서 이리 저리 병합
해 보시면서 잘 될 수 있도록 하는 것은 사용자 몫으로 돌립니다.
첨부 화일 : 20150918-서로 다른 방향으로 세팅된 2시트의 교차 양면 출력
By vinipapa • 무른모 • 0 • Tags: 가로세로 교차, 양면 출력, 엑셀, 엘, 팁