Выбор столбцов в VBA при объединении ячеек (Microsoft Excel)
Предположим, у вас есть пустой лист, и к диапазону A1: F1 применен формат «объединить и центрировать». Если вы выберете столбец B, щелкнув заголовок столбца, Excel послушно выберет столбец B и сделает ячейку B2 активной. Это поведение было изменено в Excel 2000 или Excel 2002; в предыдущих версиях Excel вы получали объединенную ячейку (A1: F1)
включены в подборку.
По-видимому, VBA несколько отстает от поведения пользовательского интерфейса, поскольку выбор всего столбца B также приводит к выбору всех столбцов, от A до F:
Sub TestMacro1() Range("B3").EntireColumn.Select End Sub
Кажется, это поведение невозможно обойти. Даже если вы исключите метод CompleteColumn и просто выберете столбец B, вы все равно получите все столбцы, от A до F:
Sub TestMacro2() Range("B:B").Select End Sub
Вероятно, лучший подход к программированию — не выбирать столбец перед выполнением каких-либо действий с этим столбцом, а выполнять действие напрямую. Например, предположим, что вы хотите выделить все ячейки в столбце B жирным шрифтом. Вы можете сделать это следующим образом:
Sub TestMacro3() Range("B3").EntireColumn.Font.Bold = True End Sub
Это влияет только на ячейки в столбце B и ничего в столбцах от A или C до F. Аналогичным образом можно использовать итерационный подход к обработке ячеек в нужном столбце:
Sub TestMacro4() Dim rCell As Range Dim X As Long X = 1 For Each rCell In Range("B:B") rCell.Value = X X = X + 1 Next End Sub
Это вставляет значение в каждую ячейку столбца B и игнорирует любые слияния, которые включают ячейку в столбце B.
Если вы обязательно должны иметь возможность выбрать весь столбец без добавления каких-либо столбцов из-за объединенных ячеек, тогда у вас может возникнуть соблазн использовать свойство MergeCells для проверки объединенных ячеек. Согласно онлайн-справке VBA, следующее должно обнаруживать объединенные ячейки в выделенном фрагменте и затем выгружать макрос:
Sub TestMacro5() Range("B3").EntireColumn.Select If Selection.MergeCells Then Exit Sub End If ' ' Perform rest of macro ' End Sub
К сожалению, тестирование показывает, что этот код работать не будет. Свойство MergeCells, по-видимому, возвращает True только в том случае, если весь выбор состоит из объединенных ячеек, а не если выбор содержит только несколько объединенных ячеек. Это означает, что вам предоставляется другой способ определить, изменили ли объединенные ячейки предполагаемый выбор, например:
Sub TestMacro6() Range("B3").EntireColumn.Select If Selection.Columns.Count > 1 Then Exit Sub End If ' ' Perform rest of macro ' End Sub
При таком подходе проверяется количество столбцов в выборке, а затем выгружается, если Excel сообщает, что их несколько.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (12218) применим к Microsoft Excel 2007, 2010, 2013 и 2016.
Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:
link: / excel-Selecting_Columns_in_VBA_when_Cells_are_Merged [Выбор столбцов в VBA при объединении ячеек]
.