Статьи из блога
Как определить нахождение курсора ввода в ячейке таблицы
Как узнать, находится ли курсор ввода в таблице в документе Word или нет?
Недавно мне пришлось столкнуться с такой проблемой, когда я готовил шаблон документа для организации. Пришлось поспрашивать на тематических форумах по программированию. Решение нашлось быстро. Возможно оно кому-то и пригодится.
P.S. Обнаружилось, что если курсор ввода находится в конце таблицы (не в последней ячейке, а за границей таблицы впритык к последней ячейке), то этот макрос выдает неверный результат.
Правильнее использовать другой код (макрос + функция), опубликованный ниже макроса "PointIntoTable".
Sub PointIntoTable Set rngTable = Selection.Range If Not rngTable.Information(wdWithInTable) Then MsgBox prompt:="Курсор находится вне таблицы" Else ... 'ваш код после условия End if End sub
Дополнено с учетом комментариев Вождя и Александра Витера:
Sub PointIntoTable2() Dim rngTable As Range Set rngTable = Selection.Range If Range_InCell(rngTable) = True Then MsgBox prompt:="Курсор находится в таблице" Else MsgBox prompt:="Курсор находится вне таблицы" End If End Sub Public Function Range_InCell(ByRef icRange As Word.Range) As Boolean ' возвращает True, если область icRange целиком находится в ячейке Range_InCell = False On Error Resume Next If icRange.Information(wdWithInTable) <> True Then ElseIf icRange.Cells.Count <> 1 Then Else Range_InCell = True End If End Function
Рубрика: Макросы, Таблицы Word
Метки: макросы | позиция курсора | таблицы
Просмотров: 16337
Подписаться на комментарии по RSS
Версия для печати
Метки: макросы | позиция курсора | таблицы
Просмотров: 16337
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 3 способа очистки списка недавно открытых документов
- Абзац с цветным фоном
- Автоматическая запись макроса
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение документа при его закрытии
- Быстрая смена ориентации страниц документа
- Быстрое перемещение между открытыми документами Word
- Быстрое создание нового документа на основе шаблона
- Быстрое удаление границ у таблицы
- Быстрый ввод текста с помощью команды =rand()
- Ввод часто повторяющихся фрагментов текста
- Вставка будущей даты
- Вставка документа с книжной ориентацией в документ с альбомной ориентацией
- Вставка завтрашней даты
- Вставка изображений из указанной папки для Word 2007
- Вставка неформатированного текста
- Вставка скопированного текста в предопределенном формате
- Вставка текста с полями в нижний колонтитул
- Вставка текста с помощью кнопки
- Выделение видимой части экрана
- Двойная нумерация страниц в документе
- Дизайн границ у таблиц в редакторе Word
- Задать обтекание текстом для всех рисунков в документе
- Замена жаргонных слов в тексте
Комментариев: 9
Разочарую автора функции PointIntoTable. Его функция будет правильно сообщать, как пишет автор, «находится ли курсор ввода в таблице или нет» только когда Selection.Range целиком находится в таблице.
Для справки: функция Information(wdWithInTable) выдает True, когда область целиком находится в таблице.
Т.е. Selection.Information(wdWithInTable)=True и когда Selecion содержит несколько ячеек, и когда Selecion находится в конце строки таблицы, а это уже вообще не ячейка.
Вопрос был о нахождении в ячейке. Для ячейки я написал и пользуюсь макросом:
Эй! А куда делить неравенства из кода макроса?
Кокин научи правильно код в комментарии вставлять.
При добавлении кода в комментарии используйте такое выражение:
<pre class="brush:vb;"&qt;</pre&qt;
Хочу заметить, что задача состояла в том, чтобы определить, находится ли курсор в таблице, а не выделенный диапазон. Курсор всегда находится там целиком, поэтому макрос Антона верен.
Ваш же макрос, Вождь, более универсальный, но с какой-то непонятной мне логикой. По-моему, так будет понятнее.
«В таблице» и «в ячейке таблицы» - это разные понятия.
Чтобы вы поняли, попробуйте следующее:
1. Поместите курсор под таблицей, в начале параграфа
2. Нажмите клавишу «Влево». Курсор сместится в конец таблицы, но не в ячейку.
3. Сейчас функция PointIntoTable выдаст, что курсор в ячейке, моя – нет.
Мой макрос не универсальный, а правильный
Возможно, это моя ошибка в том, что в заголовке речь идет о ячейке, а в тексте о таблице в целом, поскольку вопрос был о таблице, а не о конкретной ячейке таблицы.
P.S. Действительно, если курсор находится сразу же за таблицей, то и тогда макрос сообщит, что курсор в таблице, а это неверно.
Дополнил заметку с учетом ваших поправок. Спасибо!
а как получить ссылку на эту таблицу, для того чтобы добавить колонки или строки и вставить туда значения?
Ссылку на таблицу, в которой находится курсор?