2016-11-17 8 views
0

Я автоматически заполняю Excel с помощью макроса в Excel. Полученный лист может выглядеть следующим образом:VBA: разрыв страницы только после определенных строк

|1. TOYS-----------| 

|LEGO--------------| 

|Product 1|199,99--| 

|Product Text------| 

|Product 2|299,99--| 

|Product Text------| 

|MARVEL------------| 

|Product 3|79,99---| 

|Product Text------| 

|2. FOOD-----------| 

|Vegetables--------| 

|Product 4|9,99----| 

|Product Text------| 

|Product 5|2,99----| 

|Product Text------| 

Когда я печатаю этот список, разрывы страниц создаются случайным образом и могут прорезать статью (т.е. имени и цены на странице 1, текст на странице 2).

Как сообщить макросу только разрешить разрывы страниц после строки, содержащей «текст продукта». К сожалению, я не могу сказать ему делать это каждые x строк, потому что из-за группировки строк шаги не всегда одинаковы.

Благодаря

+0

Keep '| Текст продукта ------ |', как только первая строка (стереть все остальные вхождения), а затем установить «Макет страницы -> Лист -> строка в repeat at top "Выбор первой строки – user3598756

ответ

0

После вставки «текст продукта» блок, проверить, какие строки вы, и присвоить его переменной TarRow. Затем используйте:

Worksheets("Sheet1").Rows(TarRow).PageBreak = xlPageBreakManual

Я предполагаю, что вы находитесь на листе 1 и имеют петлю, так что если вы вставите это в цикле, он будет работать для всех продуктов?

В будущем, пожалуйста, имейте в виду, что всегда лучше привести пример, чтобы мы могли видеть код.

+0

Спасибо за отзыв. Разве это не приведет к разрыву строки после каждого продукта? Я хочу, чтобы разрывы страниц были динамическими (т. Е. Всякий раз, когда они необходимы для заполнения страницы), но с ограничением, которое появляется только после строк данных – Berbatov

+0

намного сложнее ... потому что в excel «когда они нужны» сама динамична , Может быть, вы можете указать некоторый буфер и сказать «после того, как вы увидели строку сведений, вам разрешено вставить разрыв страницы для 10 строк»? –

0

Попробуйте это:

Sub add_HPBreak() 

Dim HPBreak As HPageBreak 
Dim i As Long, lastrow As Long 


'set your last row as required 
lastrow = ActiveSheet.Rows.Count + 1 
ActiveWindow.View = xlPageBreakPreview 

For i = 1 To lastrow 

     For Each HPBreak In ActiveSheet.HPageBreaks 
     'assuming product text string is in column 1 
     If InStr(ActiveSheet.Cells(i, 1).Value, "product text") > 0 Then 
      ActiveSheet.Cells(i, 1).EntireRow.Select 
      ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell 

     End If 

    Next 

Next 

ActiveWindow.View = xlNormalView 


End Sub