Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

WorkSheet|Option Base|Dynamic Array|Copy|
|PageSetUp|PrintArea|Address|PrintPreview|PrintOut|Charts|

각각의 워크시트의 특정셀에 조건에 맞는 값이 있는 셀만 선택삭제

예를 들면 각각의 시트중 Range("B2")셀의 날자가
특정날자사이에 있다면 모두 선택후 삭제여부확인후 삭제한다
연습할 내용은
쌤플시트 50장 만들어 넣기
시트를 만들면서 각시트의 셀에 오늘 날자를 중심으로 전후로 5일씩
난수를 발생시켜서 쌤플날자를 입력한다

Sub makeSampleSht()
Dim iX As Integer
Dim iDay As Integer
For iX = 1 To 50
    iDay = Int(Rnd() * 5) + 1
    iDay = Day(Date) + IIf(iDay Mod 2 = 0, iDay * -1, iDay)
    With Worksheets.Add
        .Range("B2") = DateSerial(Year(Date), Month(Date), iDay)
        .UsedRange.Columns.AutoFit
    End With
Next
End Sub

VBA의 표현식도 응용해나가 보도록 한다
쌤플 시트가 만들어지면 각시트를 순환하면서 확인후 선택하여야 한다
이때 동적배열을 얼마나 이해하느냐의 문제가 나온다
왜냐하면
시트를 한꺼번에 여러장 선택하려면
Worksheets(시트이름을 배열로 전달).Select
하여야 하니까
배열을 ..그것도 동적배열을 모른다면 한장한장 사용자에게
물어 보면서 삭제 해나가야 할것이다
물론 선언부의 Option Base 1 로 하지 않은 상태에서
동적배열을 0에서 부터 시작하지 않고 1로 부터 시작하려면

ReDim Preserve strX(1 To iX)
strX(iX) = shtX.Name

와 같이 한다는 점을 알아 두면 좋을것이다

Delete Sheets Criteria Met

워크시트복사하여 옮기기

수작업으로 워크시트의 복사및 복사는

시트탭을 오른쪽마우스로 선택하면..
나타나는 단축메뉴에서 복사혹은 이동을 한다
혹은 그냥 마우스로 선택하여 드래그해도 된다

위의 작업의 명령문으로 표현하면

Worksheets("Sheet1").Copy

라고 하면 새로운 통합문서가 생성되면서 Sheet1이 복사되어 옮겨진다

Worksheets("Sheet1").Copy Before:=Worksheets("어떤시트")(혹은 After:=Worksheets("어떤시트"))

과 같이 매개변수를 주면 첫번째시트의 앞에 혹은 뒤에 복사되어 옮겨진다
만약 다른 열려있는 통합문서에 옮긴다면

Worksheets("Sheet1").Copy Before:=WorkBooks("어떤통합문서.xls").Worksheets("어떤시트")

와 같이 처리한다

인쇄하기와 인쇄미리보기

워크시트의 범위중에서 인쇄하고 싶은 부분을 설정할수 있다
인쇄에 대한 필요한 요소를 다루는 오브젝트는 워크시트의
PageSetUp오브젝트가 맡아서 한다
Sheet1이라는 이름의 워크시트의 A10:K300범위까지 인쇄를
하고 싶다면
Dim shtX As Worksheet
Set shtX=Worksheets("Sheet1")
shtX.PageSetUp.PrintArea=shtX.Range("B2:D10").Address

라고 하면 아래의 그림과 같이 인쇄영역이 설정되고

이때 이름상자에 Print_Area라는 이름이 자동으로 만들어 진다



해제하고 싶다면
ActiveSheet.PageSetup.PrintArea = ""
라고 하면 자동으로 지어진 이름도 없어지고
인쇄영역의 점선도 사라진다
만약 Sheet1이라는 시트의 정보가 들어있는 모든 범위를
인쇄를 하고 싶다면 어떻게 할까
사용된 범위에 접근하는 방법을 알아야 되는 이유는 바로
실행중 스스로 알아서 인쇄범위를 찾아내기 위한 방법인것이다

Sheet1시트의 사용된 범위를 모두 인쇄영역으로 하고 미리보기를 하고 싶다


해당통합문서가 아닌 다른 열려있는 통합문서의
PageSetUp에 대한 설정도 마찬가지로 할수 있다
Workbooks("어떤열려있는통합문서.xls").Worksheets("시트명")
으로 접근하면 된다

또한 인쇄영역설정후 인쇄될 페이지가 모두 몇페이지인지
알고 싶다면 매크로4.0시절의 표현식을 하나 빌려서
사용하면 좋다

Msgbox ExecuteExcel4Macro("Get.Document(50)")

인쇄를 하려면

Activesheet.PrintOut

통합문서내의 모든 시트를 인쇄하려면

ThisWorkBook.Worksheets.PrintOut

열려있는 다른 통합문서의 모든 챠트시트를 인쇄하려면

Workbooks("화일이름.xls").Charts.PrintOut