Макросы Excel - вставьте строки над определенным текстом, чтобы отделить их от страницы - PullRequest
0 голосов
/ 03 июля 2018

Мне нужна помощь.

У меня есть вывод из очень старой системы, которая дает нам манифесты для грузоперевозок. Думайте о них как об отгрузочных талонах.

Каждый начинается с заголовка «Номер манифеста: #####», где #### - фактическое число.

Загвоздка в том, что когда они распечатываются, они должны быть разнесены, поэтому по одному на страницу. (что никогда не бывает в необработанном выводе.) На первой странице всегда есть первый манифест (хорошо), но также и второй манифест. Ежедневно я подсчитываю пробелы и вставляю строки над заголовком второго манифеста, пока он не окажется на второй странице. Затем я подсчитываю строки между 2-м и 3-м и вставляю пробелы над третьим заголовком, пока он не окажется на странице 3, и так далее. При выполнении 18 страниц это становится утомительным.

Я смотрю, не могли бы вы помочь мне с макросом, который ищет заголовок " МАНИФЕСТНЫЙ НОМЕР ", а затем подсчитывает строки до следующего разрыва страницы (разрывы страницы - каждые 47 строк) и вставляет это количество строк выше. Затем выполните это действие еще раз для следующего.

При необходимости могу предоставить файл примера.

РЕДАКТИРОВАТЬ: Я решил свою проблему. Ниже приведен код, который я использовал.

Sub ManifestSplit()
'
' ManifestSplit Macro

Dim gap As Long
gap = 7

Dim searchText As String
searchText = "*MANIFEST NUMBER*"

Dim originalRange As Range
Set originalRange = Range("A" & (gap + 1) & ":A1000")

Dim manifestTotal As Long
manifestTotal = Application.WorksheetFunction.CountIf(originalRange, searchText)

MsgBox ("The total number of Manifests is " & manifestTotal + 1)

Dim manifestLocation As Long
Dim numberofrowstoPage
Dim newRange As Range

Dim counter As Long

If manifestTotal = 0 Then
    MsgBox ("There is only one Manifest. Macro will end.")
Else
    For counter = 1 To manifestTotal
           Set newRange = Range("A" & (gap + 1) & ":A1000")
           manifestLocation = Application.WorksheetFunction.Match(searchText, newRange, 0) + gap
'              MsgBox ("The " & counter & " manifest is on line " & manifestLocation)

           numberofrowstoPage = counter * 47 - manifestLocation
'              MsgBox ("The Number of Rows that will be inserted is " & numberofrowstoPage)

           Rows(manifestLocation & ":" & (manifestLocation + numberofrowstoPage + 1)).Insert Shift:=xlDown

           gap = 47 * counter + 2

    Next counter
End If

End Sub

1 Ответ

0 голосов
/ 03 июля 2018

Нет необходимости вставлять произвольное количество строк; просто установите страницу клювом.

Sub makeReadyForPrinting()
    Dim r As Long, fr As Long
    With Worksheets("sheet6")
        .ResetAllPageBreaks
        With .Columns(1).Cells
            fr = .Find(What:="Manifest Number:*", After:=.Cells(.Cells.Count), LookAt:=xlWhole, _
                       SearchDirection:=xlNext, SearchOrder:=xlByRows).Row
            r = .FindNext(After:=.Cells(fr)).Row
            Do While fr <> r
                .Parent.HPageBreaks.Add Before:=.Cells(r)
                r = .FindNext(After:=.Cells(r)).Row
            Loop
        End With
    End With
End Sub

Пример в вашем повествовании содержал пробел в " Manifest Number: ##### ". Я предположил, что это была опечатка и удалил ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...