Riley는 매주 금요일에 작업해야하는 워크 시트를 가지고 있습니다. 이 워크 시트는 템플릿을 기반으로하며 C4 : C8 범위에서 입력해야하는 최소 5 개의 셀이 있습니다. 워크 시트로 시작할 때이 셀은 비어 있습니다. Riley는이 다섯 개의 셀을 모두 채울 때까지 워크 시트가 저장 및 / 또는 닫히는 것을 방지 할 수있는 방법이 있는지 궁금합니다.

이를 수행하는 방법이 있지만 매크로를 사용해야합니다. Excel은 이벤트 처리기의 개념을 지원하므로 특정 이벤트가 발생할 때 자동으로 실행되는 매크로를 개발할 수 있습니다. 특수 이벤트 처리기를 만들 수있는 두 가지 이벤트는 BeforeClose (통합 문서가 닫히기 전)와 BeforeSave (통합 문서가 저장되기 전)입니다.

이것이 작동하는 방법의 예로, 검사 할 범위 (C4 : C8)가 포함 된 워크 시트의 이름이 “MyData”라고 가정합니다. ThisWorkbook 모듈에 다음 코드를 추가 할 수 있습니다.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim rng As Range     Dim iCount As Integer     Dim sTemp As String

Set rng = Worksheets("MyData").Range("C4:C8")

iCount = Application.WorksheetFunction.CountBlank(rng)

If iCount <> 0 Then         sTemp = rng.Address & " has blank cells. " & vbCrLf         sTemp = sTemp & "The workbook will not be closed."

MsgBox sTemp         Cancel = True     End If End Sub

매크로는 CountBlank 워크 시트 함수를 사용하여 셀 범위에 공백이 있는지 확인합니다. 빈 cekk를 감지하면 (iCount가 0보다 큼) 매크로는 사용자에게 메시지를 표시하고 Cancel 변수가 True로 설정되어 실제로 통합 문서가 닫히지 않습니다.

다음과 같은 방식으로 BeforeSave 이벤트에 대해 유사한 매크로를 사용할 수 있습니다.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim rng As Range     Dim iCount As Integer     Dim sTemp As String

Set rng = Worksheets("MyData").Range("C4:C8")

iCount = Application.WorksheetFunction.CountBlank(rng)

If iCount <> 0 Then         sTemp = rng.Address & " has blank cells. " & vbCrLf         sTemp = sTemp & "The workbook will not be saved."

MsgBox sTemp         Cancel = True     End If End Sub

루틴이 입력이 필요한 셀을 선택했는지 확인하려면 (마지막 단계로) Cancel 변수를 True로 설정하는 줄 바로 뒤에 다음 줄을 두 매크로에 추가 할 수 있습니다.

rng.Select

또한 통합 문서가 템플릿을 기반으로하므로 제대로 작동하려면 매크로 사용 템플릿으로 저장해야합니다.

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (4364)은 Microsoft Excel 2007, 2010, 2013 및 2016에 적용됩니다.