IT 인터넷 및 프로그램.../MS Office

EXCEL) FORM에 DATA값만 변경하여 자동 프린터 하는 법

Aggibba 2025. 7. 22. 01:09

엑셀에서 정해진 양식에 DATA 값만 자동 변경되어 프린트 되는 방법을 포스팅하겠습니다.

무슨 소리인지 헷갈리는 분들은 아래에 예제를 확인하세요.

 

내모로 표시된 부분에 거래처만 변경되며, 주문이 없는 거래처는 프린터 되지 않토록 만들어 보겠습니다.

다양한 형식에 이용 가능하시리라? 생각됩니다.

 

 

첨부 파일을 본인의 상황에 맞게 값만 수정하여 사용하시면 되겠습니다.

MACRO-01.txt
0.00MB

 

간단히 사용법 / 수정하는 법을 말씀드리자면...

"FormSheet", "DataSheet"  2개의 Sheet를 만들어 주세요.

 

DataSheet의 값을 FormSheet에 대입하여 프린터 하는 방법이며

거래처별 주문량이 0이면 프린터 하지 않토록 하였습니다.

각 행마다 주석이 달아두었습니다. 본인의 파일에 맞게 수정하여 사용하시면 되겠습니다만...

혹 잘 안되시는 분은 댓글 남겨주세요...

 


 

Sub TransferValuesAndPrint_WithCount()
    ' 변수 선언
    Dim dataSheet As Worksheet
    Dim formSheet As Worksheet
    Dim sourceRange As Range
    Dim destRange As Range
    Dim lastCol As Long
    Dim i As Long
    Dim printCount As Long ' 인쇄 매수를 저장할 변수
    
    ' 에러 핸들링 구문
    On Error GoTo ErrorHandler
    
    ' 인쇄 매수 카운터 초기화
    printCount = 0

    ' 각 시트를 변수에 할당합니다.
    Set dataSheet = ThisWorkbook.Sheets("DATASHEET") 
    Set formSheet = ThisWorkbook.Sheets("FORMSHEET") 
    
    ' DATASHEET에서 마지막으로 사용할 열을 CW열(101번째)로 설정합니다. (매장수에 따라 값을 늘리거나 줄여줍니다.)
    lastCol = 101 ' CW Column
    
    ' FORMSHEET에 값을 붙여넣을 시작 범위를 지정합니다. (제품수에 따라 값을 변경합니다.)
    Set destRange = formSheet.Range("C1").Resize(26, 3)

    ' C열(3)부터 lastCol(101)까지 3열씩 건너뛰며 반복합니다. (Size수에 따라 값을 변경해 줍니다.)
    For i = 3 To lastCol Step 3
    
        ' DATASHEET 27행의 값이 0이 아닌지 확인합니다. (거래처 주문량이 0인지 아닌지)
        If Not IsEmpty(dataSheet.Cells(27, i).Value) And dataSheet.Cells(27, i).Value <> 0 Then
            
            ' DATASHEET에서 복사할 범위를 지정합니다.
            Set sourceRange = dataSheet.Range(dataSheet.Cells(1, i), dataSheet.Cells(26, i + 2))
            
            ' 값(Value)을 직접 대입하여 서식 없이 복사합니다.
            destRange.Value = sourceRange.Value

            ' FORMSHEET의 인쇄 영역을 A1:E28로 설정합니다.
            formSheet.PageSetup.PrintArea = "A1:E26"
            
            ' 설정된 인쇄 영역을 인쇄합니다.
            ' 테스트 시에는 아래 줄 앞에 작은따옴표(')를 붙여 주석으로 처리하세요.
            formSheet.PrintOut
            
            '---[추가된 부분] 인쇄 매수를 1 증가시킵니다. ---
            printCount = printCount + 1
            '---------------------------------------------
            
        End If
        
    Next i
    
    ' 작업 완료 후 인쇄 영역 설정을 해제합니다.
    formSheet.PageSetup.PrintArea = ""
    
    '---[수정된 부분] 완료 메시지에 총 인쇄 매수를 표시합니다. ---
    MsgBox "모든 데이터의 복사 및 인쇄가 완료되었습니다." & vbCrLf & _
           "총 " & printCount & "장을 인쇄했습니다.", vbInformation, "작업 완료"
    '------------------------------------------------------------
    
    Exit Sub

' 에러 발생 시 실행될 부분
ErrorHandler:
    MsgBox "오류가 발생했습니다. 시트 이름을 다시 확인해주세요." & vbCrLf & _
           "에러 설명: " & Err.Description
End Sub

 


공감댓글은 글쓴이에게 많은 힘이 됩니다.