|
|
|
|
|
|
* 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.
- 엑셀 버전(2016):
* 아래줄에 질문을 작성하세요 >>
1. "입력"시트에 값을 입력하면, "출력"시트의 해당 셀에 내용이 기입되고, No.의 번호로 순차적으로 프린트 되었으면합니다.
2. 이때, "출력"시트의 양식이, "입력"시트에 기입된 양식만 선택적으로 프린트가 되어야하는데 이부분이 막혀서 도움을 요청드립니다.
"출력"시트상에 "I열"에 "B열"과 "E9셀"의 내용이 동일하면 숫자 1을 "C열"에 반영하고, 아닌경우 "C열"에 비워두는 수식을 넣어서, 최종적으로 프린트시 "C열"에 숫자 1이 들어있는 경우에만 남기고, 나머지 행은 숨김처리해서 프린트하고자합니다.
* 출력_프린트
Option Explicit
Public Const PD_데이터_타이틀R As Long = 1
Public Const PD_데이터_헤더R As Long = 2
Public Const PD_데이터_시작R As Long = 3
Public Const PD_데이터_시작C As Long = 1
Public Const PD_데이터_데이터시작C As Long = 2
Sub 출력_프린트()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Dim OrgSheet As Worksheet
Dim tmpSheet As Worksheet
Dim NowSheet As Worksheet
Dim tmpEndR As Long
Dim tmpEndC As Long
Dim NowSRow As Long
Dim NowRowCount As Long
Dim tmpRange As Range
Dim SaveRange As Range
Dim i As Long
Dim j As Long
Set tmpSheet = Sheets("입력")
Set OrgSheet = Sheets("출력")
Set tmpRange = tmpSheet.Cells(PD_데이터_헤더R, PD_데이터_시작C).CurrentRegion
tmpEndR = tmpRange.Cells(tmpRange.Rows.Count, 1).Row
tmpEndC = tmpRange.Cells(1, tmpRange.Columns.Count).Column
For i = PD_데이터_시작R To tmpEndR
If Len(tmpSheet.Cells(i, PD_데이터_시작C)) > 0 Then
For j = PD_데이터_시작C + 1 To tmpEndC
If Len(tmpSheet.Cells(PD_데이터_타이틀R, j)) > 0 Then
OrgSheet.Range(tmpSheet.Cells(PD_데이터_타이틀R, j)) = tmpSheet.Cells(i, j)
End If
Next
Call 출력시트_수식_I열을_값으로_C열에_붙여넣기
OrgSheet.PrintPreview
End If
Next
Application.Calculation = xlAutomatic
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
* 수식붙여넣고, 빈행 숨기기
Sub 출력시트_수식_I열을_값으로_C열에_붙여넣기()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Dim rngC As Range
Dim rngP As Range
Set rngC = Worksheets("출력").Range("I4:I23")
Set rngP = Worksheets("출력").Range("C4:C23")
rngC.Copy
rngP.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Set rngC = Nothing
Set rngP = Nothing
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Call C열_빈행숨기기
End Sub
Sub C열_빈행숨기기()
Dim i As Long '// 변동되는 변수
Dim endRow As Long '// 마지막 행 변수
endRow = Cells(Rows.Count, "B").End(3).Row '// 값이 들어있는 마지막행을 자동인식
For i = endRow To 2 Step -1 '// 마지막 행부터 거꾸로
If (Cells(i, "C") = "") Or Cells(i, "C") = 0 Then
Rows(i).EntireRow.Hidden = True '// 빈행 숨기기
End If
Next i
End Sub
==============[엑세리님 글에 대한 답변입니다]==============
Application.Calculation = xlCalculationManual
를 실행하면 Cell 계산이 안됩니다.
따라서 아래복사를 하더라도 계산이 안된 값이 복사가 됩니다.
Set rngC = Worksheets("출력").Range("I4:I23")
Set rngP = Worksheets("출력").Range("C4:C23")
Sub C열_빈행숨기기() 에서 이미 숨겨진 행은 다시보이게 해서 숨겨야 합니다.
Worksheets("출력").Cells.EntireRow.Hidden = False
그리고 모듈에서 Cell 의경우 어느 Sheet의 셀인지 불분명합니다.
앞에 명시적으로 지정을 해주셔야 합니다.
endRow = Sheets("출력").Cells(Rows.Count, "B").End(3).Row
|
|
[불량 게시물 신고] |
|
|
|
작성일 : 2020-06-11(18:44)
최종수정일 : 2020-06-11(18:44) |
|
|
|
|