2015-11-20 4 views
0

Одно из моих назначений создает большой вывод, благодаря которому я беру экран, сгенерированный программой, форматируя вывод, а затем вырезаю/вставляю в качестве экрана печати в PowerPoint. Я написал следующее:Глядя на упрощение моего VBA

Range("B6:M6").Select 
Range(Selection, Selection.End(xlDown)).Select 
ActiveSheet.PageSetup.PrintArea = "$B$6:$M$300" 
Set ActiveSheet.HPageBreaks(1).Location = Range("B16") 
Set ActiveSheet.HPageBreaks(2).Location = Range("B26") 
Set ActiveSheet.HPageBreaks(3).Location = Range("B36") 
Set ActiveSheet.HPageBreaks(4).Location = Range("B46") 
Set ActiveSheet.HPageBreaks(5).Location = Range("B56") 
Set ActiveSheet.HPageBreaks(6).Location = Range("B66") 

... и так далее каждые десять рядов. Затем я сделал это так, чтобы он вырезал и вставлял каждую страницу печати по страницам и отбрасывал ее на концевой лист. Таким образом, я могу легко перенести каждый на .ppt. В конце концов, я хочу учиться достаточно, чтобы автоматизировать весь процесс, но должен идти поэтапно. Вырезать/вставить/печати выглядит следующим образом:

Range("B6:M15").Select 
Selection.CopyPicture Appearance:=xlPrinter, Format:=xlPicture 
Sheets("Sheet2").Select 
ActiveSheet.Paste 
ActiveSheet.Shapes.Range(Array("Picture 1")).Select 
Selection.ShapeRange.Width = 719.28 

Sheets("Private Company (w Debt)").Select 
Range("B16:M25").Select 
Selection.CopyPicture Appearance:=xlPrinter, Format:=xlPicture 
Sheets("Sheet2").Select 
ActiveSheet.Paste 
ActiveSheet.Shapes.Range(Array("Picture 2")).Select 
Selection.ShapeRange.Width = 719.28 

Sheets("Private Company (w Debt)").Select 
Range("B26:M35").Select 
Selection.CopyPicture Appearance:=xlPrinter, Format:=xlPicture 
Sheets("Sheet2").Select 
ActiveSheet.Paste 
ActiveSheet.Shapes.Range(Array("Picture 3")).Select 
Selection.ShapeRange.Width = 719.28 

В моем макросе код следующим образом разрывы страниц непосредственно (это как 40 страниц или около того), он работает прилично хорошо.

Есть ли кто-нибудь, кто может показать мне, как вы могли бы написать это более интуитивно, так что VBA знает установить горизонтальный разрыв страницы каждые десять строк, а затем распечатать вырез/вставку без физической записи каждой строки и указания точных ячеек?

+0

доучиться по переменным? Изменить: см. [This] (http://stackoverflow.com/questions/30378320/excel-vba-loop-through-range). – findwindow

+2

Возможно, это лучше для [CodeReview] (http://codereview.stackexchange.com/) вместо SO. Кроме того, это очень поможет узнать, как избежать «.Select» (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros). Используйте Macro Recorder, чтобы делать простые, средние и «жесткие» вещи в Excel и просматривать код, чтобы увидеть, как он работает. Похоже, вам просто нужно потратить некоторое время на изучение VB, но это очень поможет вам начать понимать, как удалить «.Select», так как вы узнаете, как работать непосредственно с данными , а не выбор – BruceWayne

+1

смотреть в циклы. 'для i = от 6 до 295 шага 10' будет зацикливаться каждые десять, где я буду выдавать номер строки. Также просмотрите размер, это позволит вам использовать первый диапазон ячеек («B» & i) .resize (10,13), чтобы скопировать вашу область в качестве изображения. –

ответ

0

Хммм что-то вроде:

Dim i as Long 
Dim copyRange as Range 
Range("B6:M6").Select 
Range(Selection, Selection.End(xlDown)).Select 
ActiveSheet.PageSetup.PrintArea = "$B$6:$M$300" 


For i = 1 to 6 '## Modify from 6 to a larger number, as needed 
    'Set up your page break locations 
    Set ActiveSheet.HPageBreaks(i).Location = Range("B" & 6 + (10 * i)) 
    'copy/paste in to Sheet2: 
    ' use the resize method to get a 10 rows x 12 columns range 
    Set copyRange = ActiveSheet.HPageBreaks(i).Location.Resize(10, 12) 
    'copyPicture: 
    copyRange.CopyPicture Appearance:=xlPrinter, Format:=xlPicture 

    With Workshheets("Sheet2") 
     .Paste 
     .Shapes.Range(Array("Picture " & i)).ShapeRange.Width = 719.28 
    End With 

Next 
Смежные вопросы