VBA를 짜 보았다. 닫을 때 대화 상자를 표시하지 않습니다.

4338 단어 #VBAVBA초보자Excel

VBA를 짜 보았다.



시도한 것



작성한 시트를 새 Work에 저장하고,
사용하고 있던 Word는 포맷 이외 모두 지워 닫는다.

수행한 이유



매일, 사내의 일보를 이하의 순서로 쓰고 있습니다.
① Excel에 포맷대로 기입한다.
② 기입한 Excel을 다른 Excel에 복사하여 저장한다.
③포맷을 저장하지 않고 닫는다.

아시다시피,
편집을 하고 저장하지 않고 닫으려고 하면 아래 그림과 같은 다이얼로그가 매번 출현합니다.


Microsoft 365 버전 2006의 경우

Excel을 닫을 때 대화 상자가 나오지 않도록 했습니다.

코드 작성



Key🔑 명령



그것이 ThisWorkbook.Saved = True 명령
대화식으로 저장했지만 Excel 자체는 저장하지 않는 명령.

만약 ThisWorkbook.Saved = True 의 True 를 False 로 변경하면,
명령의 의미가 사라지고 대화 상자가 발생합니다.

코드


Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim rslt As VbMsgBoxResult
rslt = MsgBox("データを保存しましたか" & vbCrLf & "メールは送信しましたか", Buttons:=vbYesNo)

  If rslt = vbYes Then         

    'Yesの場合 保存せずに閉じる
     ThisWorkbook.Saved = True

     Application.CutCopyMode = False

  Else
    'Noの場合 何もしない(閉じるを無効にする)
     Cancel = True

  End If


End Sub

해설



이번에는 닫기 직전에 실행하고 싶었기 때문에,
객체는 표준 모듈이 아닌 워크북을 선택하고,
프로시저가 BeforeClose를 선택했습니다.

선언은 Private Sub Workbook_BeforeClose(Cancel As Boolean) 입니다. (코드내 1⃣에 대해서)
이 코드라면 코드 중에, Cancel = True
이번 대화 대신 메시지 상자를 표시하고,
취소가 가능하도록 사용했습니다.
Cancel = True 를 사용하지 않고,Application.CutCopyMode = False 대화 상자를 숨기는 명령
사용해도 같은 결과가 나옵니다.

ーーーーーーーーーーーーーーーーーーー
닫을 때 나타나는 대화 상자 외에도 이러한 대화 상자가 나타날 수 있습니다.

다이얼로그에 써 있는 대로, 닫을 때에 카피로서 취득한 데이터를 어떻게 하는지 물어 줍니다.

사본을 저장할 필요가 없어서Application.CutCopyMode = False 를 사용하여 복사를 비활성화했습니다.
복사 후 Escape 키를 눌러 비활성화하는 것과 같은 느낌입니다.

눈치채다



처음에는 ThisWorkbook.Saved = True 대신Workbooks(failename).Close 같은 닫는 명령을 작성하려고했습니다.
그러면, 닫는 커멘드가 이중화해 버려, 에러는 나오지 않습니다만,
아래 그림과 같이 아무것도 없는 화면이 출력되었습니다.


요약



생각해 보는 어디에 저장할지, 형식은 어떻게 할지 결정하고 있지 않으므로 이해할 수 있습니다만ThisWorkbook.Saved = True 명령을 알았을 때는 서브라고 써 있는데 세이브되지 않는 것에 궁금했습니다.
여러가지 고전은 했습니다만, 무사동하게 되어 작성할 수 있어 지금은 매일 사용하고 있습니다.

추가로 만든 코드
VBA를 짜 보았다. 새 책에 저장하는 권
VBA를 짜 보았다. 1 개월 분의 작업 시간을 집계하는 권

좋은 웹페이지 즐겨찾기