Чтобы получить правильные результаты, принимая во внимание такие вещи, как возможность границы, горизонтальную полосу прокрутки и / или число плавающих пикселей, вы должны использовать ...
el.scrollHeight - el.scrollTop - el.clientHeight < 1
ПРИМЕЧАНИЕ. : Вы должны использовать clientHeight вместо offsetHeight, если хотите получить правильные результаты. offsetHeight даст вам правильные результаты только тогда, когда el не имеет границы или горизонтальной полосы прокрутки
Вам не нужно, чтобы там была строка x% = 1. Когда вы пишете для x% = 1 до 3, компьютер инициализирует его как 1. Мне также кажется, что вам вообще не нужны операторы «If ... else». x% уже увеличивается с 1 до 3 в цикле For. Если вы пытаетесь заставить его поставить число 1 на листе 1, ваша проблема:
With Activesheet.PageSetup
Это должно быть
With Activeworkbook.Sheets(x%).PageSetup
Таким образом, вы всегда будете фокусироваться на листах с 1 по 3, потому что это внутри вашего цикла For. Наконец, эта строка работает против вас:
result = .CenterFooter = x% & " of 3" & " Company Copy" & ActiveSheet.PrintOut
Это, вероятно, та часть, которая возвращает ошибку. Когда вы пишете это так, вы сохраняете параметры страницы (справа от знака +) в неокрашенную переменную. Даже если вы хотите Dim result как объект, вы не скажете компьютеру сделать что-нибудь с результатом позже, так что это не даст вам страницы внизу. С уже говорит компьютеру использовать любой объект, который вы поставили после этого слова.
Чтобы переключать словоблудие, вы можете циклически перемещать счетчик по массиву с соответствующими терминами.
Из того, что вы сказали нам в своем первоначальном вопросе и в последующем комментарии, я думаю, что ваш окончательный код должен выглядеть следующим образом:
Dim x%
Dim ppl as string
ppl = Array("Company", "Customer", "Carrier")
For x% = 1 To 3
With ActiveSheet.PageSetup
.CenterFooter = x% & " of " & ActiveWorkbook.Sheets.Count & " " & ppl(x%-1) & " Copy"
End With
ActiveSheet.PrintOut
Next x%
Имейте в виду, что массивы начинаются с 0, поэтому x% -1 на вашем счетчике держит все в порядке.
Это должно сработать:
Sub PrintBOL()
Dim x%
x% = 1
For x% = 1 To 3
If x% = 1 Then
ActiveSheet.PageSetup.CenterFooter = x% & " of 3" & " Company Copy"
ElseIf x% = 2 Then
ActiveSheet.PageSetup.CenterFooter = x% & " of 3" & " Customer Copy"
ElseIf x% = 3 Then
ActiveSheet.PageSetup.CenterFooter = x% & " of 3" & " Carrier Copy"
End If
ActiveSheet.PrintOut
Next x%
End Sub