Elettracompany.com

Компьютерный справочник
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Снять выделение ячеек excel vba

Снять выделение ячеек excel vba

Здравствуйте, DreamWeaver, Вы писали:

DW> Есть выделенный объект (textBox). Мне нужно сделать активной основную страницу. Как это сделать? Пытался методом Collapse — не помогает

Снять выделение очень просто — например так: Selection.End = Selection.Start.
Непонятно что вы понимаете под «сделать активной основную страницу». Либо я просто не въехал в чем состоит контекст вопроса.

Вообще — вы очень странно формулируете ваши вопросы. Только посмотрев ваши последние несколько сообщений, можно понять, что вы пытаетесь сделать что-то с помощью VBA, скорее всего — в Word’е. Можно было бы указать это и в самом сообщении.

Здравствуйте, nzeemin, Вы писали:

N>Здравствуйте, DreamWeaver, Вы писали:

DW>> Есть выделенный объект (textBox). Мне нужно сделать активной основную страницу. Как это сделать? Пытался методом Collapse — не помогает

N>Снять выделение очень просто — например так: Selection.End = Selection.Start.
N>Непонятно что вы понимаете под «сделать активной основную страницу». Либо я просто не въехал в чем состоит контекст вопроса.

N>Вообще — вы очень странно формулируете ваши вопросы. Только посмотрев ваши последние несколько сообщений, можно понять, что вы пытаетесь сделать что-то с помощью VBA, скорее всего — в Word’е. Можно было бы указать это и в самом сообщении.
Я пишу прогу под VC++. С VB до этого дело не приходилось иметь. Мне нужно реализовать экспорт в Word. У меня есть таблица (в ListView) (пусть в ней для определенности 5 столбцов). В таблице 7 строк с данными. Мне нужно создать документ Word с 7-ью страницами, на каждой из которых располагались бы TextBox (по 5 штук на каждой странице). Таким образом вся информация из списка будет перенесена в документ. (Каждая строка из ListVIew отображается на отдельной странице в соответствующих TextBox-ах)
Я написал 5 макросов (вызываю их из VC++ через COM методом Run):
1) Создание TextBox-а. Передается позиция x ,y, ширина, высота текстбокса. В зависимости от дополнительного параметра скрывается рамка.

1-ый макрос создает шаблон

2) Копирует весь шаблон в буфер обмена

3) Я определяю сколько строк из ListVIew нужно экспортировать и создаю нужное количество страниц, затем перемещаюсь на самое начало документа

4) Затем в цикле прохожу по всем строкам ListView моего приложения и для каждой вызываю макросы 4 и 5
Этот макрос вставляет содержимое буфера обмена (в нем содержится шаблон формы), а затем переходит на следующую страницу

5) Этот макрос устанавливает для только что вставленного шаблона новые имена. Изменяется не только текст на TextBox-ах, но и имена этих текстбоксов.

А вот теперь проблема: я вставил из буфера обмена несколько TextBox-ов (шаблон), я знаю их имена. Выделяю по отдельности каждый из них и устанавливаю нужный текст. Затем в программе на VC++ начинается новый цикл и снова вставляется из буфера обмена шаблон. Но проблема в том, что у меня уже выделен TextBox и шаблон вставляется в этот выделенный TextBox, а не в основную страницу. Точно не знаю как она называется, но я имею в виду большой белый лист, который отображается на экране. ВОт мне и нужно снять выделение с TextBox-а. Ваш способ Selection.End = Selction.Start не работает.
ЕЩе странность в том, что если поставить на запись макрос, то нет возможности снять выделение с TextBox-а. Как такое может быть?

Снять выделение ячеек excel vba

Опытный

Профиль
Группа: Участник
Сообщений: 598
Регистрация: 17.2.2008

Репутация: нет
Всего: 6

подскажите, как снять после этого выделение с области ячеек?
нашел вот подробнее про PasteSpecial, но мало помогло, к тому же у меня не работает.
Да, и кстати, границы копирует, а объединения ячеек почему-то нет

Это сообщение отредактировал(а) neweraser — 17.5.2010, 22:20

Yersinia pestis

Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Читать еще:  Excel для закупок

Репутация: 5
Всего: 130

Опытный

Профиль
Группа: Участник
Сообщений: 598
Регистрация: 17.2.2008

Репутация: нет
Всего: 6

все работает, спасибо а синее выделение снять можно?

Добавлено @ 22:53
хотя можно просто и Sheet.Cells[1,1].Select; )) только вот не пойму, почему объединения ячеек не копирует?

Это сообщение отредактировал(а) neweraser — 17.5.2010, 22:56

Выделение строки и столбца при выделении ячейки

Долго держал в закромах эту надстройку — она долгое время была частью моей старой надстройки MyAddin (которая впоследствии переросла в MulTEx) — Координатное выделение строки и столбца

Надстройка пригодится тем, кто часто работает с большими таблицами, просматривая их и сопоставляя данные в строках и столбцах. Что дает эта надстройка? Она выделяет столбец и строку таблицы на пересечении выделенной ячейки, благодаря чему можно просмотреть все данные в столбце и строке активной ячейки, не перепроверяя себя лишний раз – «А в том ли столбце я смотрю данные?».

Надстройка рассчитана на пользователей Excel версий 2007 и выше. После подключения или открытия надстройки на панели появится новая вкладка: Excel-vba.ru с единственной кнопкой, по нажатии на которую появится форма:

Метод — выбор метода подсветки строки и столбца, их два:

  • выделение — строка и столбец выделяются так же, как если бы вы выделяли ячейки мышкой. У этого метода есть один недостаток. Если на листе в этом режиме будут сделаны изменения(удаление значения ячейки), то отменить их будет невозможно
  • условное форматирование — строка и столбец выделяются при помощи условного форматирования. Можно выбрать один из шести цветов для подсветки выделения строки и столбца. У такого подхода тоже есть недостаток. Все условное форматирование, примененное к текущему листу ранее, будет удалено

Весь лист — выделяются строка и столбец всего листа.

Вся таблица данных — выделяются строка и столбец только в пределах используемого диапазона данных.

Выбранный диапазон — выделяются строка и столбец только в пределах указанного вами диапазона. Особенность: не допускается выделение несвязанных диапазонов.

Область применения — выбирается область листа, к которой применяется координатное выделение:

  • только строка — выделяется только строка активной ячейки
  • только столбец — выделяется только столбец активной ячейки
  • строка и столбец — выделяется строка и столбец на пересечении активной ячейки

Отменить Координатное выделение — отменяет примененное координатное выделение.

Внимание! Координатное выделение действует во всех открытых книгах во всех листах до тех пор, пока вы не отключите его через пункт «Отменить координатное выделение».

Важно! При примененном координатном выделении невозможно скопировать выделенный диапазон, однако можно удалить значение активной ячейки (будет удалено только значение одной ячейки, расположенной на пересечении строки и столбца).

ExcelVBA_KoordSel.zip (49,5 KiB, 3 600 скачиваний)

В архиве расположен файл надстройки. Прежде чем установить надстройку, необходимо её распаковать из архива на жесткий диск, после чего установить. Как установить надстройку: Установка надстроек

Надстройка распространяется бесплатно и с открытыми исходными кодами — смотрите, изучайте, меняйте под себя.
Самый важный момент для тех, кого не устроит цвет выделения по умолчанию: чтобы изменить цвет выделения ячеек через условное форматирование, необходимо перейти в модуль mKoordSelection, найти вверху строку
Public Const lKS_FC_Color As Long = 10921638
и заменить число 10921638 на числовой код нужного цвета заливки. Подобрать нужный цвет можно следующим образом:

  • назначаем заливке любой ячейки нужный цвет
  • выделяем эту ячейку и выполняем код:

Sub GetActiveCellColor() MsgBox ActiveCell.Interior.Color, vbInformation, sAPP_NAME End Sub

этот код так же есть внутри надстройки, поэтому его можно вызвать просто через Alt+F8
Изменить цвет выделения методом Обычного выделения нельзя. Это ограничение самого Excel. Можно изменить только изменением цветовых схем Windows.

Работа с выделениями

Работа с выделениями

Прежде чем изменить значение или формат ячейки или нескольких ячеек, пользователь должен их выделить. Однако в VBA выделение ячеек не требуется, так как для идентификации ячеек, над которыми должны проводиться определенные действия, можно использовать объекты Range. Но в VBA есть инструменты, связанные с выделением; они используются для реализации двух возможностей — код способен определить, какие ячейки выделены пользователем, и код может показать пользователю место на рабочем листе, где происходит что-то важное.

Во многих случаях пользовательский код должен воздействовать на выбранные ячейки, как это делают встроенные команды Excel. Для доступа к выделенному пользователем диапазону используется свойство Selection (Выделение) объекта Application или Window. Свойство Selection объекта Application возвращает диапазон, выделенный на рабочем листе, активном в данный момент. Следующие два оператора идентичны:

Selection.Value =2 0

Для того чтобы удостовериться в том, что ссылка всегда относится к определенному окну, независимо оттого, какое окно активно в текущий момент, необходимо использовать свойство окна Selection. В следующем примере продемонстрирована данная техника; также здесь показано, как установить объектную ссылку на диапазон, представляющий текущее выделение для повторного использования того же диапазона в дальнейшем:

Dim Sel Range As Range

Set SelRange = Windows(«Инвентаризация игрушек.xls»>.Selection

Когда VBA-программа вносит изменения в рабочий лист и необходимо, чтобы пользователь их заметил, следует воспользоваться методом Select (Выделить) для перемещения выделения на нужный диапазон, диаграмму или что-либо другое. Метод Select можно применять фактически к любому существующему в Excel объекту, в том числе к объектам Chart (Диаграмма) и всем их компонентам (каждая часть диаграммы является отдельным VBA-объектом). к объектам Shape (Форма) и, конечно же, к объектам Range.

Для выделения диапазона необходимо сначала активизировать рабочий лист, на котором диапазон находится, а затем использовать метод Select для объекта Range, как показано в данном примере:

.Activate .Range(«Разбитые сердца»).Select

Кстати, метод Select для объектов Worksheet, очевидно, не выполняет ничего, кроме активизации указанного рабочего листа, и не изменяет в нем существующее выделение. Другими словами, он эквивалентен методу рабочего листа Activate. Подобным образом методы Activate и Select можно использовать для активизации листа диаграммы, но ни один из методов в действительности не выделяет диаграмму. Вот пример;

Chart s(«Места жительства клиентов»).Select

Для того чтобы выделить компонент диаграммы или внедренную диаграмму, используйте метод Select для интересующего вас объекта.

Чтобы сделать ячейку активной для ввода, к данной ячейке используется метод Activate (Активизировать) объекта Range. Если активизированная ячейка находится в пределах текущего выделения, весь диапазон остается выделенным. Именно таким образом работает следующий пример:

Если активизированная ячейка находится за пределами выделения, оно перемещается на активизированную ячейку.

Код для работы с выделенными ячейками, вероятно, приведет к возникновению ошибки, если его применить к диаграмме. Вот почему, прежде чем выполнять какие-либо операции с выделением, обычно следует убедиться, что выделение содержит тот тип объектов, который ожидается в коде. VBA-функция TypeName возвращает строку, содержащую тип объекта

выделения. С помощью структур If. . .Then или Case. . .Select можно определить, какое из возможных действий проводить над выделенным объектом.

В приведенном ниже примере выражение TypeName ( Selection) в операторе Select (вторая строка кода) возвращает строку, содержащую тип объекта текущего выделения. Данная строка затем проверяется рядом операторов Case, является ли выделение диапазоном (в таком случае его значение устанавливается равным 2 001), областью диаграммы (в таком случае устанавливается красный цвет выделения), когда же выделение не сделано, пользователь видит сообщение об отсутствии выделения. Также предусмотрен вывод соответствующего сообщения для случая, когда выделение не принадлежит ни одному из перечисленных типов:

Select Case TypeName(Selection)

.Interior.Colorlndex = 3 ‘ 3 = bright red

MsgBox «Ничего не выделенно»

MsgBox «Невозможно определить тип выделения!»

Координатное выделение ячейки в Excel

Рассмотрим различные способы координатного выделения ячейки в Excel: с применением макросов и с помощью условного форматирования.

Приветствую всех, уважаемые читатели блога TutorExcel.Ru.

Как часто при работе с большими таблицами данных вы теряли из виду нужный столбец или строку?
Или, например, вы находите нужную ячейку и пытаетесь определить в каком столбце или строчке она находится?

Для примера возьмем достаточно большую таблицу, в которой пользователю будет «легко» потеряться:


Допустим нас интересует данные из Статья 8 в Период 6 (или любые другие).
Пытаемся глазами найти пересечение, но быстро с этим справиться сможет далеко не каждый, да и возрастает вероятность ошибиться и получить некорректные цифры.

Поэтому при подобных проблемах с таблицами многие начинают использовать подручные средства: ведут пальцем по экрану или прикладывают лист бумаги к монитору и т.д.
На самом деле эту задачу можно решить куда проще и эффективнее программным путем.

Поэтому давайте представим что при изменении активной ячейки текущая строка и столбец выделялись бы определенным цветом, что позволило бы существенно упростить задачу поиска дынных.
Подобный способ выделения данных часто называют координатным (за схожий внешний вид) или перекрестным.

Перейдем к реализации и разберем 2 разновидности перекрестного выделения: с помощью макроса и условного форматирования.

Способ 1. Макрос

Давайте подумаем каким образом макрос должен производить перекрестное отображение данных на листе.

Во-первых, нам необходимы 2 макроса, которые будут включать или отключать опцию отображения.
Это пригодится нам для удобства работы, чтобы выделение работало исключительно в нужные моменты (при поиске) и не мешало работать в остальных (при вводе формул, создании графиков и т.д.)

Во-вторых, нам нужен сам макрос выделения строк и столбцов для ячейки. Соответственно, постоянно работает при включении опции отображения и не работает при отключенной опции.

Перейдем в редактор Visual Basic (быстрый переход с помощью комбинации клавиш Alt + F11).
Далее добавим в исходный код листа (в левой части панели выбираете нужный лист, правой кнопкой мышки щелкаете по нему и выбираете View Code) вставляем туда следующий код:

Возвращаемся в Excel. Для начала работы координатного пересечения необходимо включить опцию отображения, для этого открываем окно с макросами (сочетание клавиш Alt + F8) и запускаем макрос Coordinate_Selection_On (для отключения опции запускаем Coordinate_Selection_Off).

Все готово (не забудьте сначала запустить макрос Coordinate_Selection_On):


Из плюсов данного способа можно выделить простоту реализации, а к минусам — проблемы с отображением при наличии объединенных ячеек.

Теперь перейдем к альтернативной реализации.

Способ 2. Условное форматирование

Следующий способ базируется на 2 основных принципах: условном форматировании (которое будет подсвечивать все ячейки в строке и столбце) и свойствах функции ЯЧЕЙКА (которая позволит нам составить правило для форматирования).

Пойдем по порядку.
Выделим диапазон таблицы (в нашем примере это A1:Z35), для которого будем делать перекрестное выделение.
Далее в панели вкладок выбираем Главная -> Условное форматирование и нажимаем Создать правило:


В появившемся окне выбираем Использовать формулу для определения форматируемых ячеек и в описании правила вставляем следующую формулу:

Затем нажимаем кнопку Формат и настраиваем внешний вид выделяемых данных (цвет заливки, шрифта) по своему усмотрению.

Что нам дает функция ЯЧЕЙКА?

Мы уже сталкивались с ней, когда, например, получали имя листа в виде формулы.
Данная функция возвращает различные свойства ссылки в зависимости от параметров введенных аргументов. Поэтому формулы ЯЧЕЙКА(«строка») и ЯЧЕЙКА(«столбец») вернут нам, соответственно, номер строки и столбца текущей ячейки.
Следовательно, введенная формула выделит все ячейки таблицы, где строка (или столбец) совпадают со строкой (или столбцом) текущей ячейки, в результате после форматирования и получится перекрестное выделение.

Однако условное форматирование не будет работать, если на листе не произойдет никаких изменений (передвижение активной ячейки к таковым не относится), и раскраска ячеек останется прежней.
Чтобы этого избежать напишем несложный макрос, который бы пересчитывал содержимое текущей ячейки, и в результате запускал бы обновление раскраски.
Переходим в редактор VBA и в модуль листа, где содержится таблица, добавляем следующий код:

Ссылка на основную публикацию
Adblock
detector