VB(A)

일부 시트들을 새 파일로 저장

당근쨈 2015. 2. 23. 13:11

기존에 이해하기로는 한 시트당 한 파일로 저장하는 걸로 들었는데

그게 아니라 일부 시트들을 한 파일로 저장하는 내용이었다.

array로만 해결하려고 머리 싸매다가 해외 사례에서 의외로 쉽게 해결.

원래 저게 내가 하고 싶던 거였는데 ㅋ


이번 작업의 핵심은 inputbox를 이용하여 시트값을 받은 후 split으로 분리하고

val 함수를 이용하여 string 값을 integer 값으로 변환해주는 것


통합 문서1.xlsm



Sub mkFile()
 
    Dim inTemp As String
    Dim vrTemp As Variant
    Dim oldBook As Workbook
    Dim newBook As Workbook
    Dim i As Integer
    
    '처리 속도 높이기
    With Application
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    
    '현재 워크시트 정의
    Set oldBook = ActiveWorkbook
    
    'inputbox를 이용하여 저장할 시트번호 받음
    inTemp = InputBox("저장할 시트번호를 입력하세요." & vbCr & vbCr & "예) 1,2,3")
    If TypeName(inTemp) = "Boolean" Or inTemp = "" Then Exit Sub
    
    '콤마를 기준으로 받은 값 분리
    vrTemp = Split(inTemp, ",")
    
    '시트번호를 받아 새파일로 저장
    For i = 1 To UBound(vrTemp) + 1
        If i = 1 Then
            Sheets(Val(vrTemp(i - 1))).Copy
            Set newBook = ActiveWorkbook
            ActiveSheet.Buttons.Delete
            oldBook.Activate
        Else
            Sheets(Val(vrTemp(i - 1))).Copy after:=newBook.Sheets(i - 1)
            ActiveSheet.Buttons.Delete
            oldBook.Activate
        End If
    Next i
    
    '처리속도 복구 후 새파일 선택
    With Application
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With
    
    newBook.Activate
    Sheets(1).Select
    
End Sub
cs