#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)
помощью wherelastrow = Cells(rows.count, 4).End(xlUp).row
3. Warcupine, вау, это сработало отлично. Я пытался сделать что-то подобное ранее, но не мог понять, как заставить переменную последней строки работать для диапазона столбцов. Спасибо!
4. Scot Craner, ошибка заключалась в том, что требуется время выполнения 424 объекта
Ответ №1:
Отложив в сторону то, что вам не нужно Union
для этой задачи, причина сбоя вашего кода заключается в том, что у вас слишком много скобок.
У вас есть скобки вокруг каждого передаваемого параметра Union
. Это переопределяет ByRef
поведение по умолчанию ByVal
, поэтому передается массив значений, который Union
не может быть обработан.