VBA, Эксель. Выполните код, который смещает и изменяет размер диапазона, а затем копирует его. "Ошибка компиляции: недопустимое выражение просмотра"

Я пытаюсь сместить, изменить размер и скопировать диапазон, содержащий данные, и набираю эту строку кода в непосредственном окне:

shAll.Range("A1:I78").Offset(1).Resize(.Rows.Count - 1, .Columns.Count - 
1).SpecialCells(xlCellTypeVisible).copy

Когда я нажимаю ввод, я получаю эту ошибку: «Ошибка компиляции: недопустимое выражение просмотра»

Это проблема синтаксиса?

Эта часть кода работает нормально при выполнении в непосредственном окне:

shAll.Range("A1:I78").Offset(1).select

Это компенсируется так, как я хочу. Оставшаяся часть - изменить размер и скопировать его.

Кстати, диапазон shAll.Range("A1:I78") содержит данные во всех ячейках.

Заранее спасибо!

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
120
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете сделать диапазон имен или указать фактический диапазон, который вам нужен.

Worksheets("Sheet").Range("namedrange_d").Resize(, 4).Offset(6, 0).Copy _
  Worksheets("Sheet1").Range("namedrange").Resize(, 4).Offset(6, 0)

Вы говорите, что часть (.Rows.Count - 1, .Columns.Count - 1) невозможно выполнить в непосредственном окне? Должен ли я указывать его как фиксированные числа?

SweDentan 29.05.2019 14:24

Мне просто интересно узнать, почему я получаю сообщение об ошибке с кодом, который использую. Код взят из онлайн-курса, поэтому я знаю, что он работает, но в курсе используется переменный диапазон и выглядит так: shAll.Range("A1:I" & LastRow)Offset(1).Resize(.Rows. Количество — 1, .Columns.Count — 1).SpecialCells(xlCellTypeVisible).Копировать. Я просто хочу протестировать код в ближайшем окне, используя вместо этого фиксированный диапазон.

SweDentan 29.05.2019 14:39
Ответ принят как подходящий

Вы не указали, к какому объекту относятся .Rows и .Columns.

Если они относятся к диапазону, то

With shAll.Range("A1:I78")
    .Offset(1).Resize(.Rows.Count - 1, .Columns.Count - 1).SpecialCells(xlCellTypeVisible).copy
End with

или

shAll.Range("A1:I78").Offset(1).Resize(shAll.Range("A1:I78").Rows.Count - 1, _
shAll.Range("A1:I78").Columns.Count - 1).SpecialCells(xlCellTypeVisible).copy

Вот оно, теперь это работает! :) И вы действительно преподнесли мне очень полезную информацию сегодня. Объект должен быть указан и может быть выполнен способами, которые вы описали. Большое спасибо Гарет!

SweDentan 29.05.2019 19:23

Другие вопросы по теме