오랜만에 쓸만한? 질문이 올라왔습니다. 여러 거래처를 관리하고 있는 엑셀 시트에서
바로 해당 거래선의 일부 이름으로 검색해서 바로 시트를 선택하고 싶다는 질문이네요.
http://www.clien.net/cs2/bbs/board.php?bo_table=kin&wr_id=3735375CLIEN
함수로서 기능을 잘 사용하시는 분은 함수로 사용하시고 저는 VBA가 편하기 때문에
이것을 도구로 사용해서 사용자 폼을 뛰어서 편리하게 시트를 검색, 선택하게 했습니다.
너무 간단해서 설명을 할 내용도 별로 없어 보입니다.
Option Explicit
우선 사용자 폼을 선택하면 LIST시트를 제외한 모든 시트를 목록에 뿌리는 루틴입니다.
사실 없어도 되는 기능입니다. 어짜피 검색 필드를 통해 검색 목록을 뿌리면 지워지는
항목이므로 ... 그래도 이렇게 전체 시트를 보여줄 수 있다는 기능입니다.
Sub View_All_Sht_Name()
Dim sht As Worksheet
Dim sht_name As String
For Each sht In Worksheets
If sht.Name <> "LIST" Then
UserForm1.ListBox1.AddItem sht.Name
End If
Next sht
End Sub
이제 검색할 내용을 입력하고 입력 완료를 위해 오른쪽 화살표나 엔터키를 눌러주세요.
입력은 한글을 기본으로 입력되도록 설정해 두었습니다.
Private Sub TextBox1_Change()
Dim sht As Worksheet
Dim sht_name As String
UserForm1.ListBox1.Clear
For Each sht In Worksheets
If InStr(1, sht.Name, TextBox1.Text, 1) > 0 Then
If sht.Name <> "LIST" Then
UserForm1.ListBox1.AddItem sht.Name
End If
End If
Next sht
End Sub
검색된 시트를 클릭하면 바로 활성화 됩니다.
Private Sub ListBox1_Click()
Dim sht As Worksheet
Dim sel_sht As String
sel_sht = UserForm1.ListBox1.List(UserForm1.ListBox1.ListIndex)
For Each sht In Worksheets
If sht.Name = sel_sht Then
sht.Activate
End If
Next sht
End Sub
Private Sub UserForm_Initialize()
Call View_All_Sht_Name
End Sub
개발도구> 디자인모드에서 ActiveX 버튼 하나 만드시고 아래 매크로 연결시켜 주세요.
사용자 폼이 항상 시트 위에 윈도우로 떠 있도록 하는 것인데 검색할 때마다 폼을
띄우시려면 modalless 제거해 주세요
Private Sub CommandButton1_Click()
UserForm1.Show modalless
End Sub
언제나 처럼 소스는 여기에 올리고 원본 자료는 제 블로그에 올립니다.
list sheet가 open되면 전체 list를 refresh하여 list sheet에 뿌려주고
검색을 하면(cell change) 해당 문자열이 있는 것만 뿌려주는것도 좋은 방법일 듯 합니다
List시트로 돌아오는것은 잘안쓰는 ctrl+e에 sheets("List") activate 매핑해도 좋을것 같네요
작성자님의 블로그에 가서 엑셀파일을 다운 받았는데 그 뒤에 이걸 제가 가진 엑셀 파일에 어떻게 삽입해서 활용해야 할 지 모르겠습니다. Alt+F11 누르니 스크립트가 나오기는 하는데 이걸 제 엑셀파일에서 어떻게 넣어야 할 지 감이 안 와서요.
시트탭 위에서 오른쪽 클릭하시고 메뉴의 이동/복사... 폼 뜨면 아래의 복사본 만들기 체크
대상 통합문서 위치를 다운받은 화일 선택하고 확인 누르시면 매크로가 알아서 처리할 것입니다.
잘 사용하세요. 심심하시면 제 블로그 광고 한 번 눌러주시고요 ^^;;;
아참! UserForm1.Show modalless를 UserForm1.Show vbModeless로 바꿔주세요. ㅠㅠ
시트를 모두 복사해서 붙일려고 하는데 표가 포함된 여러 시트는 복사할 수 없습니다 라고 나와서 되지 않네요 ^^
하나 하나 개별적으로 붙일려고 해도 같은 메시지가 뜨면서 복사가 되지가 않아요.
본문에 있는 검색필드를 어떻게 활용할 수 있는 지 확인해봐야겠습니다.
답변 감사합니다 ^^
2. 초마짬뽕님의 엑셀을 여시고 VBA Editor에서 파일 가져오기 합니다.
3. 제 파일의 LIST시트를 초마짬뽕님의 엑셀로 복사하시면 됩니다.
4. 다른 이름저장으로 2007버전의 경우 매크로 사용 통합 문서로 저장하시면 됩니다.
도움이 되었으면 좋겠습니다.