Member 13638770 Ответов: 2

1004 : ошибка, определяемая приложением или объектом, в excel VBA


У меня есть очень большой Макрокод, который будет выполнять одну из следующих функций.
У нас есть шаблоны, которые будут описывать, как будет сгенерирован отчет и приведенный ниже фрагмент кода, в котором он получает ошибку. Функциональность, которую он выполняет, основана на определении шаблона, он будет извлекать данные и вставлять их в новый лист.

With objCurrentWorksheet
            If intTall > 1 Then
                ActiveWindow.View = xlPageBreakPreview
                    i = 1
                    .PageSetup.FitToPagesTall = False
                    .ResetAllPageBreaks
                    Do While i <= .HPageBreaks.Count
                        Set objCell = .Range("B" & .HPageBreaks(i).Location.Row - 1)
                        Do Until objCell.Height < 15
                            Set objCell = .Range("B" & objCell.Row - 1)
                        Loop
                        Set objCell = .Range("B" & objCell.Row + 1)
                        >>> It is throwing the error here
                        .HPageBreaks.Add Before:=objCell
                        i = i + 1
                    Loop
                ActiveWindow.View = xlNormalView
            End If
'            End If
        End With

    finishTemplate = True
    Exit Function


Что я уже пробовал:

Я пытался изменить определения шаблонов, но это не сработало

2 Ответов

Рейтинг:
2

Maciej Los

Член 13638770[^] писанное:

Извините, что ошибка бросает дальше
Set objCell = .Range("B" & .HPageBreaks(i).Location.Row - 1)


Прежде всего, пожалуйста, прочтите это:
При использовании HPageBreaks или VPageBreaks появляется сообщение об ошибке "индекс вне диапазона".Расположение в Excel[^]
Индекс вне диапазона (ошибка 9)[^]

Ну, вы должны избегать установки ссылки на ячейку с помощью взломов страниц. Если вы пытаетесь установить разрывы страниц, используйте пользовательский метод (пользовательская логика), но сначала вы должны очистить настройки разрывов страниц.


Рейтинг:
0

CHill60

Похоже, что вы сбежали с конца коллекции HPageBreaks с помощью

Do While i <= .HPageBreaks.Count
Вы должны начать обход коллекции с индекса 0, а не 1, и остановиться до того, как я равняюсь количеству.
В качестве альтернативы используйте a для каждой конструкции, например
Dim pb As HPageBreak
For Each pb in objCurrentWorksheet.HPageBreaks 
...


Member 13638770

Спасибо @CHill60 еще одна проблема, которая после модификации, как вы предложили, я получаю эту ошибку 9: индекс вне диапазона. Я не улавливаю здесь какую-либо вещь?

CHill60

По какой линии?

Member 13638770

На следующей строчке .HPageBreaks.Добавить перед этим:=objCell

Member 13638770

Извините, что ошибка бросает дальше
Установите objCell = .Range("B" & .HPageBreaks(i).Местоположение.Ряд - 1)

Member 13638770

Я что - то упускаю, потому что все еще получаю ту же ошибку 9:индекс вне диапазона :(