Ваш код молча терпит неудачу, On Error Resume Next
не позволяет вам узнать, в чем проблема. Никогда используйте On Error Resume Next
, чтобы подсунуть ошибки под ковер таким образом.
Если предположить, что на библиотеку типов Excel нет ссылок (тогда вы не будете связываться поздно, не так ли?), Range
, вероятно, является неопределенным идентификатором. Предполагая, что Option Explicit
не указан (если бы код не компилировался / не выполнялся), эти неквалифицированные Range
идентификаторы «объявляются» на месте, как и любая другая опечатка, как неназначенный Variant/Empty
переменная, которая не может быть объектом для вызова членов.
Итак, я готов поспорить, что полученная вами фактическая ошибка - "Требуется объект" в этой строке:
Set rng = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell))
Вы знаете, что должно быть Worksheet
:
Set Page = XL.Worksheets("Sheet1").Range("A1:I1")
Объявите переменную для него:
Dim ws As Object
Set ws = XL.Worksheets("Sheet1")
Теперь используйте этот Worksheet
объект (я бы объявил его выше этого, и использовал бы его везде, где необходимо ссылаться на лист), чтобы квалифицировать эти Range
вызовы:
Set rng = ws.Range(ws.Range("A1"), ws.Range("A1").SpecialCells(xlLastCell))
... что можно упростить до:
Set rng = ws.Range("A1").SpecialCells(xlLastCell)
... кроме xlLastCell
также является идентификатором, который не существует.
В библиотеке типов Excel правильный идентификатор - xlCellTypeLastCell
- но, поскольку вы не ссылаетесь на эту библиотеку, VBA не может знать, что это означает.
xlCellTypeLastCell
определяется в перечислении со значением 11
.
Чтобы вы могли объявить это так:
Const xlCellTypeLastCell = 11
А затем используйте его в своем коде:
Set rng = ws.Range("A1").SpecialCells(xlCellTypeLastCell)
Редактировать - я пропустил эти два:
Dim tbl As ListObject
Dim rng As Range
Если вы ссылаетесь на библиотеку типов Excel , то вы значительно усложняете свою жизнь, объявляя все о Excel As Object
. Используйте типы, если они у вас есть!