1. FAQ
  2. 엑셀(Excel)
  3. AfterEffects
  4. Premiere
  5. Photoshop
  6. ETC

이 게시판은 아별닷컴 회원만 질문을 올릴 수 있습니다. 회원에게 주어지는 특권인셈이지요. 회원이 아닌 분들은 열람만 가능합니다.

[레벨:30]아별

2012.02.14 11:08

엑셀대단해님.. 안녕하세요?


음..

기존 열려 있는 폼을 인식해서 닫고 싶으시다구요?


일단.. 대단해님이 전문 프로그래머가 아니시라는 가정하에.. 

단순한 방법을 알려드리겠습니다. 프로그래머가 본다면 무식한 방법이라고도 할 수 있지요.. ^_^;; 

하지만 제일 단순하고 쉽습니다.


어떤 폼을 열기 전에 아래와 같이 열려 있을 수 있는 유저폼을 전부 닫아버린 다음.. 새로운 유저폼을 Show해주면 됩니다.

if문을 이용해서 조건을 넣을 수도 있구요.. 쉽지요? ㅎㅎ


Sub unloadAllUserForms()

    On Error Resume Next

    If ActiveSheet.Name <> "abyul1" Then Unload ufrmAbyul1

    If ActiveSheet.Name <> "abyul2" Then Unload ufrmAbyul2

    If ActiveSheet.Name <> "abyul3" Then Unload ufrmAbyul3

    If ActiveSheet.Name <> "abyul4" Then Unload ufrmAbyul4

    If ActiveSheet.Name <> "abyul5" Then Unload ufrmAbyul5

    On Error GoTo 0

End Sub


== 절 취 선 ==============================================


자.. 위에껀 사실 꼼수구요..

열려있을 수 있는 유저폼이 몇 백개 된다면.. 프로그램 효율이 떨어지겠지요?

솔직히 몇백개가 안되면 위와 같이 하셔도 별 문제 없습니다.


암튼.. 제대로 프로그래밍하려면 어떻게 해야하냐면요..

엑셀 VBA 자체의 기능으로는 안되구요.. Windows API를 사용하셔야합니다.


GetActiveWindow 함수를 이용해서 현재 활성창이 유저폼이면 닫아버린다든가.. 하면 되겠습니다.

또는 FindWindow 함수를 활용해 볼 수도 있구요..


API에 대해서는 개인적으로 공부를 하셔야할 겁니다.

제가 처음 API를 공부할때 자료들을 정리한 게시물이 있는데 그걸 참고해서 공부해보세요..

http://www.abyul.com/zbxe/71223


머.. VBA 프로그래밍에 재미를 느끼신다면 한번 API를 공부해보시구요..

그렇지 않다면.. 저 위에 설명해 드린 방법으로 구현하세요..


도움이 되셨기를.. ^^


문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)