워크시트의 삭제에 관한 질문

VBA
작성자
까망이의성
작성일
2021-12-27 20:23
조회
82
엑셀버전 : 엑셀2019

운영체제 : 윈도우10

제가 지금 작성중인 재고관리 중에서 필요에 의해 시트를 생성하고 삭제하는 부분에서 의문점이 있어서 이렇게 문의 합니다.

시트를 삭제 하는 방법은 알고는 있는데... 좀더 편하거나 코딩좀 줄이고자 했던 방식에서 에러가 발생하여 문의 합니다.

시트를 삭제할때 시트의 .Name 과 .CodeName  즉 시트의 원래이름과 작업이름이라 해야 하나??

sheets("작업시트").Delete 하고 shtWork.Delete 하고의 차이때문에 문의 합니다.

첫번째 방법은 정상적으로 작동을 하는데 두번째 방법은 시트를 삭제를 한후에 꼭 에러메시지를 내보내는 이유를 모르겠습니다.

인터넷을 뒤져봐도 명확하게 해답을 주는 곳이 없더군요..

고수님들의 설명을 듣고 싶습니다.

제가 사용중인 시트의 추가 및 삭제의 코딩부분입니다.

Sub Add_Sheets()

WS_ADD "shtTempWork", "작업시트"
MsgBox "작용용 시트를 추가 하였습니다....!!!" & Chr(13) & "이제 테스트용 시트를 지웁니다...!!", vbInformation
Delete_Sheet
End Sub

Sub Delete_Sheet()

WS_Delete shtTempWork.Name
'Erase_Sheet shtTempWork
MsgBox "작업용 시트가 정상 적으로 삭제 되었습니다...!!", vbInformation

End Sub

'###################### 현재 워크북에 작업용 시트을 추가한다.
Sub WS_ADD(WSName As String, Optional wName As String, Optional SheetVisible As Boolean = True)
If wName = Empty Then wName = Mid(WSName, 4)
Sheets.Add after:=Sheets(Sheets.Count)
ThisWorkbook.VBProject.VBComponents(Sheets(Sheets.Count).CodeName).Name = WSName
Sheets(Sheets.Count).Name = wName
Sheets(Sheets.Count).Visible = SheetVisible
End Sub

'##################### 현재 워크북의 특정 시트를 삭제 한다.
Sub WS_Delete(Sheet_Name As String)
Application.DisplayAlerts = False
Sheets(Sheet_Name).Delete
Application.DisplayAlerts = True
End Sub

Sub Erase_Sheet(WS As Worksheet)
Application.DisplayAlerts = False
WS.Delete
Application.DisplayAlerts = True
End Sub

여기에서 WS_Delete shtTempWork.Name 의 실행은 정상적으로 돼는데

Erase_Sheet shtTempWork 의 실행부분은 시트는 삭제하고 에러메시지를 표현합니다.

 

회원등급 : 4레벨
포인트 : 203 EP
총질문 : 3 개 (마감율 : 67%)
채택답변 : 1 개
전체 5

  • 2021-12-27 21:34
    채택된 답변

    VBProject.VBComponents 오브젝트는
    프로젝트 레벨에서 관리 기능
    - 모듈/클래스의 삭제, 삽입, 파일로 내보내고 가져오기 등
    - 엑셀 Sheet 에서 셀 단위 실시간 변경 Tracking 시
    자동화를 위한 모듈 제어에 사용합니다.

    질문하신 내용은
    시트를 삭제한 후 현재 커서를 어디로 둘것인가? 하는 문제 입니다.
    객체가 현재 커서가 존재하는 시트를 삭제했으니
    돌어갈 위치가 없기 때문에 발생하는 것으로 예상 됩니다.

    참고로
    시트레벨에서는
    현재 시트 삭제 시, 오류 트랩에서 인덱스-1 을 선택하는 것으로 알고 있습니다.


    • 2021-12-27 23:40

      @야휘

      커서의 문제라고 하시어서 시트를 지우기 전에 1번 시트부터 지울시트 이전까지 한번씩 다 선택을 하고 실행했는데도 같은 에러가 나오는 군요

      그래서 혹시나 하는 생각으로 그냥 시트를 추가 하고 그 시트의 코드네임 즉 추가한 시트가 sheet3 이면 그것으로 삭제 시켜도 같은 에러가 나옵니다.

      여기 강의에도 함수 메서드에 대해서 설명하면서 저랑같이 WS.Delete 문구가 있어서 사용했을때는 정상 삭제 됩니다.

      근데. 지금처럼 혹시몰라 다른시트를 지울수 있게 함수 또는 Sub 로 만들어서 지우려니 계속 에러가 나는 군요..


    • 2021-12-27 23:54

      @야휘 님 야휘님 답변 감사합니다.

      맨땅에 해딩한다는 말을 실감하며 작업하다 보니 여러가지로 어려운일들이 생겨나는것 같군요... 저는 어떻게 하면 코딩을 줄여 볼까하는 맘에 CodeName 에 대하여 알게 되었고, 그것을 활용하려고 하다보니 나오는 의문부호 같은 일들이라 여겨 집니다.

      일단은 On Error 문 으로 급한 불을 끄고 작업하고 있습니다. 근데 직업특성인지 개인적인 오기 인지 에러가 나니까 좀 궁금해 지더군요. 왜 에러가 나는지... 그래서 질문 드렸습니다...

      일단은 VBProject.VBComponents 오브젝트에 대하여 좀더 연구하고 공부하면 답이 나올까 생각하고 한번 파 보겠습니다.

      수고 하셨습니다.


  • 2021-12-28 13:00

    맨땅에 헤딩하신다기에 몇가지 조언 드립니다.

    1. 표기법 일치가 필요합니다.
    제시하신 코드의 모듈명 및 파라미터의 표기법 일치가 필요해 보입니다.
    정답은 없으나 일관성 있게 한가지 방식을 추천 합니다.
    Sub Add_Sheets()
    Sub WS_ADD(WSName As String, Optional wName As String, Optional SheetVisible As Boolean = True)
    Sub WS_Delete(Sheet_Name As String)
    Sub Erase_Sheet(WS As Worksheet)

    예, Sheet에 대한 처리이므로
    Sheet_Add
    Sheet_Delete
    Sheet_Erase 라고 하면 어떨지요.

    그리고, 파라미터는
    예) 오브젝트면 o
    문자열이면 c 또는 s
    숫자형이면 i 를 접두어로 사용하면 의미가 명확해 지며
    유사한 의미를 재정의하지 않습니다.

    WSName As String → cSrcName
    wName As String → cCodeName
    SheetVisible → bVisible
    Sheet_Name → cSrcName
    WS → oWorkSheet

    정답은 없으나 일관성 있게 한가지 방식을 추천 합니다.

    2. 파라미터 관련
    Sub WS_ADD(WSName As String, Optional wName As String, Optional SheetVisible As Boolean = True)

    ⓐ SheetVisible 파라미터
    시트를 만들고 작업한 후 필요에 따라 보여주지 않는 경우는 있을 수 있으나
    시트를 만들었는데, 보여주지 말아야 하는 경우가 있을 수 있나요?
    숨겨진 시트를 사용하려면, Visible 을 해야 하는 문제가 있기 때문입니다.
    필요하다면 아래 함수를 만들어서 각각 호출해야 할 듯 합니다.
    SheetVisibl(cSheetName as string, iVisible as boolean)

    ⓑ WSName, wName 파라미터
    굳이 2개를 구분할 이유가 없습니다.
    이것을 구분하여 호출하는 것도 애매 합니다.
    따라서 유사한 파라미터를 하나로 통합하고 코드를 단순화 해야 합니다.

    결과적으로
    시트를 생성하는 함수는 아래의 파라미터는 있으면 되지 않을까 싶습니다.
    Sub Sheet_Add(cWsName As String)

     


    • 2021-12-30 04:10

      @야휘 님 야휘님의 조언 깊이 새겨 감사함을 담아서...

      좀더 발전하고 있는 모습으로 다음에 찾아 뵙겠습니다....

      그리고 아무래도 부족한점이 많다 보니... 머리속에 생각이 많아서... 좀더 효율적인 것만 찾지 않나 싶네요...

      아!.. 그리고 시트의 숨김 기능인데요... 그거 지금은 사용하고 있진 않지만 몇일전까지만해도. 단 2줄의 데이터를 위해서 시트를 만들어서 사용하다 보니까 굳이 보이지 않아도 돼겠다 싶어서 숨김 기능을 사용하려 했던 것이고요..

      지금은 굳이 그럴필요 없다 생각하고 그 시트는 지우고 다른곳에 합쳐서 어짜피 2줄의 데이터만 필요한것이어서 자주 사용하지 않는 곳에 끼워넣어서 사용하고 있습니다.

      금쪽 같은 조언 감사히 수렴하면서... 다음에 혹시 궁금한것 있으면 많이 가르져 주세요...!!


전체 5,138
번호 카테고리 제목 작성자 작성일 추천 조회
알림
하루 딱 "1분", 진짜 쓰는 엑셀 꿀팁 👉 "오빠두엑셀" 인스타그램 오픈! (28)
트로피 오빠두엑셀 | 2021.10.12 | 추천 22 | 조회 752
트로피 오빠두엑셀 2021.10.12 22 752
공지사항 공지사항
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (21)
오빠두엑셀 | 2021.10.28 | 추천 28 | 조회 2347
트로피 오빠두엑셀 2021.10.28 28 2347
26087 함수/공식
New vlookup 관련? 같은 값일 때 그 행의 값을 불러오기 첨부파일
키몽쓰 | 16:58 | 추천 0 | 조회 12
키몽쓰 16:58 0 12
26085 함수/공식
New 엑셀 함수 궁금해요! 첨부파일
양킴 | 16:49 | 추천 0 | 조회 12
양킴 16:49 0 12
26079 함수/공식
New 도와주세요 예전에 잠깐 본적이 있는 강의인데 못찾겠어요 (1)
딸기아빠 | 16:19 | 추천 0 | 조회 12
딸기아빠 16:19 0 12
26078 함수/공식
New sumif 오류 관련 첨부파일 (2)
논바닥 | 16:19 | 추천 0 | 조회 15
논바닥 16:19 0 15
26068 함수/공식
New 다른쉬트 값 불러 오기 (VLOOKUP 안될 시) 첨부파일 (3)
벗님들 | 12:48 | 추천 -1 | 조회 39
벗님들 12:48 -1 39
26067 함수/공식
New 도와주세요! 목록 별 수량 합산이 필요한데 가능한지 확인 부탁 드릴게요! 첨부파일 (6)
monom | 12:38 | 추천 0 | 조회 32
monom 12:38 0 32
26058 기능/도구
New 자동필터 복사 범위 풀림 오류 (1)
허영진 | 10:29 | 추천 0 | 조회 29
허영진 10:29 0 29
26050 함수/공식
New 행과 열의 합의 함수를 알고 싶어요! (1)
Goldhajin | 00:45 | 추천 0 | 조회 49
Goldhajin 00:45 0 49
26041 VBA
New 일정시간이 지나면 MsgBOX로 알림창이 뜨게 하고싶습니다. (3)
을지지뢰 | 2022.01.17 | 추천 0 | 조회 49
을지지뢰 2022.01.17 0 49
26035 함수/공식
New 특정날짜와 시간 고정해서 데이터 추출방법 도와주세요 (4)
박현욱 | 2022.01.17 | 추천 0 | 조회 44
박현욱 2022.01.17 0 44
26033 함수/공식
New 필터 함수를 인덱스 매치 함수로 변환하는 어려움 첨부파일 (2)
미르 | 2022.01.17 | 추천 0 | 조회 34
미르 2022.01.17 0 34
26030 함수/공식
New 원본표에서 일정 조건의 내용을 추출하여 새로운 표에 자료 넣기 첨부파일 (2)
알면서 | 2022.01.17 | 추천 0 | 조회 32
알면서 2022.01.17 0 32
26029 기능/도구
New 필터에서 상하위 % 추출 안됨 오류 첨부파일 (3)
알면서 | 2022.01.17 | 추천 0 | 조회 23
알면서 2022.01.17 0 23
26026 함수/공식
New 한 셀에 입력된 문장 중 조건에 만족하는 문장 개수 함수 (5)
삐약이 | 2022.01.17 | 추천 0 | 조회 34
삐약이 2022.01.17 0 34
26025 기능/도구
New 셀 내용을 지우면 특정 셀 내용도 같이 삭제되는 기능? 첨부파일 (2) 답변완료
올리주인 | 2022.01.17 | 추천 1 | 조회 39
올리주인 2022.01.17 1 39
26023 VBA
New VBA 사용자정의폼 show 0 명령어 (1)
병욱 | 2022.01.17 | 추천 0 | 조회 34
병욱 2022.01.17 0 34
26022 VBA
New 거래처별 파일 나누기 첨부파일
silli**** | 2022.01.17 | 추천 0 | 조회 39
silli**** 2022.01.17 0 39
26015 함수/공식
New 혹시 Crtl + F 찾기 같은 함수와 있나요 (1)
태혁 | 2022.01.17 | 추천 0 | 조회 50
태혁 2022.01.17 0 50
26014 차트/그래프
New 해당 스크린샷의 그래프를 어떻게 만드는지 알려주세요 (1)
민석 | 2022.01.17 | 추천 0 | 조회 24
민석 2022.01.17 0 24
26005 함수/공식
New 한 숫자값에 대한, 홀수/짝수값을 나열하고 싶습니다. (6) 답변완료
땅콩구리아빠 | 2022.01.17 | 추천 0 | 조회 39
땅콩구리아빠 2022.01.17 0 39
26000 VBA
New Rng.find 함수로 찾은 값을 DB안에 넣고싶습니다. (2)
가을전어 | 2022.01.16 | 추천 0 | 조회 33
가을전어 2022.01.16 0 33
25994 함수/공식
New 날짜 입력하면 당일 주야간 합구하는 함수나 방법을 배우러 왔습니다. (1)
현주아빠 | 2022.01.16 | 추천 0 | 조회 34
현주아빠 2022.01.16 0 34
25993 VBA
New workday 함수를 vba로.. (1)
Hong | 2022.01.16 | 추천 0 | 조회 32
Hong 2022.01.16 0 32
25989 차트/그래프
New 표 자동 입력 첨부파일 (2) 답변완료
미르 | 2022.01.16 | 추천 0 | 조회 45
미르 2022.01.16 0 45
25983 함수/공식
New 년도에 따른 출장 일수 구하고 싶은데 도움 부탁드립니다. (1)
kjin1020@naver.com | 2022.01.16 | 추천 0 | 조회 28
kjin1020@naver.com 2022.01.16 0 28
25982 함수/공식
New 입력하면 옆 셀에 자동으로 '1'이 입력되는 방법 (1) 답변완료
올리주인 | 2022.01.16 | 추천 0 | 조회 54
올리주인 2022.01.16 0 54
25973 함수/공식
New index match로 불러온 여러 목록의 사진을 다시 취합해서 불러오고 싶습니다. 첨부파일
배고픈콩콩 | 2022.01.16 | 추천 0 | 조회 39
배고픈콩콩 2022.01.16 0 39
25969 VBA
New 검색한 셀의 가로열 전부를 복사하는 방법이 알고 싶습니다. vba
ㅈㄱㄹ | 2022.01.16 | 추천 0 | 조회 31
ㅈㄱㄹ 2022.01.16 0 31
25945 함수/공식
if 함수 중첩 (3)
shheee | 2022.01.15 | 추천 0 | 조회 59
shheee 2022.01.15 0 59
25938 기능/도구
수식이 포함된 시트에서 수식이 입력된 셀을 제외한 셀을 선택하는 방법을 알고자 합니다 (1)
yya**** | 2022.01.15 | 추천 0 | 조회 36
yya**** 2022.01.15 0 36