Необходимо выбрать все строки (занятые и пустые строки) в диапазоне столбцов для последующего форматирования

#excel #vba #union

#excel #vba #объединение

Вопрос:

Я пытался сделать это несколькими различными способами, я думаю, что лучше всего использовать объединение диапазонов или цикл for. Прямо сейчас я не могу заставить это объединение работать, и я не могу понять, почему.

У меня есть несколько столбцов (D: G), которые я форматирую, и количество строк меняется каждый раз, поэтому это должно быть динамичным.

Я хочу иметь возможность выбирать все строки в D: G, включая промежуточные пустые строки, до последней занятой строки.

введите описание изображения здесь

Я начинаю просто, просто пытаясь выбрать объединение диапазонов. Это мой код:

 Dim DGunion As Range
Set DGunion = Union((Range("D2", Range("D" amp; Rows.Count).End(xlUp))), _
(Range("E2", Range("E" amp; Rows.Count).End(xlUp))), _
(Range("F2", Range("F" amp; Rows.Count).End(xlUp))), _
(Range("G2", Range("G" amp; Rows.Count).End(xlUp))))
DGunion.Select
 

Ошибка, которую я получаю, — ошибка времени выполнения 424 требуется объект

Комментарии:

1. какую ошибку вы получаете?

2. Здесь вам не нужно объединение, вы можете получить весь диапазон с Range("D2:G" amp; lastrow) помощью where lastrow = Cells(rows.count, 4).End(xlUp).row

3. Warcupine, вау, это сработало отлично. Я пытался сделать что-то подобное ранее, но не мог понять, как заставить переменную последней строки работать для диапазона столбцов. Спасибо!

4. Scot Craner, ошибка заключалась в том, что требуется время выполнения 424 объекта

Ответ №1:

Отложив в сторону то, что вам не нужно Union для этой задачи, причина сбоя вашего кода заключается в том, что у вас слишком много скобок.

У вас есть скобки вокруг каждого передаваемого параметра Union . Это переопределяет ByRef поведение по умолчанию ByVal , поэтому передается массив значений, который Union не может быть обработан.