Vba word поиск текста в таблице

12 / 11 / 3

Регистрация: 07.09.2015

Сообщений: 256

21.04.2020, 13:45

7

Narimanych,

Цитата
Сообщение от Narimanych
Посмотреть сообщение

Кикие следующие действия после нахождения?

Да там, задача простая. В определённой таблице (именно в таблице №7) найти текст в строке, (например: «Отчёт №3», а их например всего пять),

и удалить все строки

(со столбцами)

идущие до этого текста

(в таблице).
Т.е. скажем так: укоротить таблицу, обрезая её с начала. А флагом остановки, служит искомый текст. Это, то я реализую. Хотя если будет, хороший пример (как выше), буду благодарен.

Цитата
Сообщение от Narimanych
Посмотреть сообщение

Visual Basic
1
2
3
4
5
6
7
Sub MMM()
For i = 1 To Word.ActiveDocument.Tables.Count
   For Each C In ActiveDocument.Tables(i).Range.Cells
   If C.Range.Text Like "*AA*" Then MsgBox ("Table #:" & i & Chr(13) & "Row:" & C.RowIndex & Chr(13) & "Column:" & C.ColumnIndex)
   Next
Next
End Sub

Блин, спасибо! Красивая реализация!
Вот совсем запамятовал про Метод «Like»
И с

Visual Basic
1
For Each C In ActiveDocument.Tables(i).Range.Cells

тоже круто Нуб я в Word…

Не по теме:

Думаю: Т.к. мне искать только в одной таблице, всё ок.
А вот если перебирать каждую ячейку, например в 10 таблицах, то конечно, возможно, метод «Like» не так быстро справится как метод «Find». (не стану писать, что подвиснет, но … есть немного похожий код с выравниванием, вот там тоже все ячейки перебираются, ворд, как-то с этим грустно, справляется).

Добавлено через 24 минуты
Narimanych,

Цитата
Сообщение от Narimanych
Посмотреть сообщение

Кикие следующие действия после нахождения?

На самом деле, ещё один нюанс. Надо будет, потом, после строки (заголовка — «Отчёт №6», она без столбцов) найти максимальное число в последних 4 столбцах (всего столбцов 8).
Хотя опять же, уверен с этим справлюсь.

Не по теме:

Цитата
Сообщение от Schumacher57
Посмотреть сообщение

А вот если перебирать каждую ячейку, например в 10 таблицах, то конечно, возможно, метод «Like» не так быстро справится как метод «Find»

Зря. Всё чётко, и быстро отработал. Проверил, сейчас.



0



Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 23.06.2017 09:07:50

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Тема: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Здравствуйте!
Необходимо найти ячейку с нужным текстом. Как правильно искать?
Есть вот такая идея, прошу отредактировать, так как это только алгоритм, сам код кривой:
Поиск по строкам таблицы, а внутри строки — по ячейкам

Dim iStr, iCol As Integer
For iStr = 1 To .Table.Count
For iCol = 1 To .Cells.Count
  Find.Text = "искомый текст"
  MsgBox (ячейка с искомым текстом)
Next
Next

Прошу правильно записать этот код. Или код с функцией For Each. Или ещё какой-нибудь способ.
Спасибо.

2 Ответ от MrBrown 23.06.2017 09:26:49

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Вопрос снят: нашел несколько решений здесь:
внешняя ссылка

3 Ответ от MrBrown 24.06.2017 13:55:31

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Увы, рано закрыл вопрос.
Туплю чего-то. Не получается.
Вот часть кода:

n = oDoc.Tables(2).Rows.Count 'количество строк таблицы
m = oDoc.Tables(2).Columns.Count  'количество столбцов таблицы
For i = 1 To n
For j = 1 To m
   With oDoc.Tables(2).Range
      .Find.ClearFormatting
      .Find.Text = "контроля:"       'Ищем вхождения текста
      .Wrap = wdFindStop
      If .found = True Then
            MsgBox i & "-" & j   'Номера строки и столбца с искомым вхождением
         Else
            MsgBox "нет"
         End If
   End With
Next
Next

Здесь MsgBox последовательно выдает все строки и столбцы. А мне надо получить индекс самой первой ячейки с нужным вхождением.
И ещё вопрос: как искать ячейку, введя только часть текста, например «контр»?
p.s. ну и прошу поправить код в смысле культуры оформления.
Спасибо.

4 Ответ от Fck_This 26.06.2017 10:10:45

  • Как просканировать всю таблицу в поисках ячейки с нужным текстом?
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

MrBrown пишет:

Увы, рано закрыл вопрос.
Туплю чего-то. Не получается.
И ещё вопрос: как искать ячейку, введя только часть текста, например «контр»?
p.s. ну и прошу поправить код в смысле культуры оформления.
Спасибо.

Эммм
Лучше искать так

Sub ValueOfCell()
'Запоминаем текст ячейки в переменную
Dim sValue
Dim oCell As Cell
Dim oDoc As Document
Set oDoc = ActiveDocument
For Each oCell In oDoc.Tables(2).Cell
    If InStr(oCell.Range.Text, "контроля:") >= 1 Then
        sValue = oCell.Range.Text
        MsgBox sValue
    End If
Next oCell
End Sub

Ну и, понятное дело, если часть текста будете искать, то часть и указываете
Ещё можно методом Selection.Find.Execute искать по всему документу и проверять найденную строку на вхождение в таблицу 2, заранее установив область начала и конца таблицы.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

5 Ответ от MrBrown 26.06.2017 12:14:20

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Почему-то выскакивает такая ошибка:
User-defined type not defined
Как в коде определить этот тип?

6 Ответ от MrBrown 26.06.2017 12:16:16

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Забыл сообщить: ругается на строчку
Dim oCell As Cell (выделяет жёлтым)

7 Ответ от Fck_This 26.06.2017 15:15:40

  • Как просканировать всю таблицу в поисках ячейки с нужным текстом?
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Пардон. Надо так. Не проверял на документе

Sub ValueOfCell()
'Запоминаем текст ячейки в переменную
Dim sValue As String
Dim oCell As Cell
Dim oDoc As Document
Set oDoc = ActiveDocument
For Each oCell In oDoc.Tables(1).Range.Cells
    If InStr(oCell.Range.Text, "контроля:") >= 1 Then
        sValue = oCell.Range.Text
        MsgBox sValue
    End If
Next oCell
End Sub

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

8 Ответ от MrBrown 27.06.2017 09:57:26

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Всё равно ругается на эту же строчку.

9 Ответ от shanemac51 27.06.2017 11:22:32

  • shanemac51
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 05.03.2012
  • Сообщений: 467
  • Поблагодарили: 119

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

и какой же текст ругани

у меня все работает

10 Ответ от shanemac51 27.06.2017 11:25:39

  • shanemac51
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 05.03.2012
  • Сообщений: 467
  • Поблагодарили: 119

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

какая у вас версия и разрядность ВИНДОВС
и офиса

32 или 64

11 Ответ от MrBrown 27.06.2017 11:34:15

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Ругается вот так:
User-defined type not defined
на строку
Dim oCell As Cell
Система Win 8.1 х 64
Офис 2013.
И система и офис — легальные.

12 Ответ от MrBrown 27.06.2017 11:36:25

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Полное содержание ошибки:

Compile error:
User-defined type not defined

13 Ответ от yshindin 27.06.2017 11:44:27

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 447
  • Поблагодарили: 171

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

MrBrown пишет:

Ругается вот так:
User-defined type not defined
на строку
Dim oCell As Cell
Система Win 8.1 х 64
Офис 2013.
И система и офис — легальные.

Попробуйте использовать oCell как объект общего вида:
Dim oCell as Object

14 Ответ от shanemac51 27.06.2017 13:15:20

  • shanemac51
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 05.03.2012
  • Сообщений: 467
  • Поблагодарили: 119

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

может у вас битая ссылка(например типа Календарь)
какая разрядность офиса  (32 или 64)

15 Ответ от MrBrown 27.06.2017 13:48:16

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Офис 2013 х32

16 Ответ от Fck_This 27.06.2017 13:56:24

  • Как просканировать всю таблицу в поисках ячейки с нужным текстом?
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97
  • За сообщение: 1

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

MrBrown пишет:

Офис 2013 х32

В этом случае, мне помнится, не играет роль версия ворда
Пробуйте так

Sub ValueOfCell()
'Запоминаем текст ячейки в переменную
Dim sValue As String
Dim oDoc As Document
Set oDoc = ActiveDocument
For Each Cell In oDoc.Tables(1).Range.Cells
    If InStr(Cell.Range.Text, "контроля:") >= 1 Then
        sValue = Cell.Range.Text
        MsgBox sValue
    End If
Next Cell
End Sub

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

17 Ответ от MrBrown 27.06.2017 14:09:31

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Работает!
Прошу извинить, это я сам недоглядел: в самом начале макроса уже было такое:

Dim oDoc As Object
Set oDoc = WD.Documents.Open(Filename:=File)

Видимо, по этой причине не работало.
Сейчас работает.
Только мне нужен не сам текст, а адрес ячейки, в которой он находится, чтобы от неё дальше плясать.
Надо что-то типа такого:
MsgBox [№ строки, № столбца]

18 Ответ от Fck_This 27.06.2017 14:20:21

  • Как просканировать всю таблицу в поисках ячейки с нужным текстом?
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

MrBrown пишет:

Работает!
Прошу извинить, это я сам недоглядел: в самом начале макроса уже было такое:

Dim oDoc As Object
Set oDoc = WD.Documents.Open(Filename:=File)

Видимо, по этой причине не работало.
Сейчас работает.
Только мне нужен не сам текст, а адрес ячейки, в которой он находится, чтобы от неё дальше плясать.
Надо что-то типа такого:
MsgBox [№ строки, № столбца]

Вы опять идете в ту же ловушку зависимости от адреса ячейки. Зачем знать адрес ячейки, если он не статичен?!
Можно использовать RowIndex & ColumnIndex

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

19 Ответ от MrBrown 27.06.2017 14:20:36

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

MsgBox cell.Row & cell.Column

не работает

20 Ответ от MrBrown 27.06.2017 14:24:19

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Именно по этой причине, что — не статичен!
В каком-то акте Word эта ячейка, допустим, на 24-й строке, в другом акте — на 25-й строке.
А в следующей ячейке — нужная мне инфа, которую надо загнать в реестр Excel.
Если привязаться только к 24-й строке жёстко, то нужная инфа из другого (кривого) файла Word запишется криво, не та и не в те ячейки.
Я же пробовал.

21 Ответ от MrBrown 27.06.2017 14:26:22

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Я вижу, что всех работников «под одну гребенку» не причешешь:
нет-нет, да найдется «тётенька», которой, ну, жизненно необходимо добавить ещё одну строчку в акте Word!

22 Ответ от Fck_This 27.06.2017 14:31:48

  • Как просканировать всю таблицу в поисках ячейки с нужным текстом?
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

MrBrown пишет:

Я вижу, что всех работников «под одну гребенку» не причешешь:
нет-нет, да найдется «тётенька», которой, ну, жизненно необходимо добавить ещё одну строчку в акте Word!

Так а смысл вам обращаться к ячейке, если вы уже осуществляете поиск по тексту?

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

23 Ответ от MrBrown 27.06.2017 14:32:59

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Опечатка:
добавить не строчку в текст , а строку в таблицу.
Ну или разделить/объединить ячейки таблицы.
И данный акт Word автоматом становится «кривым».

24 Ответ от MrBrown 27.06.2017 14:41:37

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Для понимания прикладываю шаблон акта Word.
Допустим, макрос нашел текст во второй таблице:
«2. Работы выполнены по проектной документации».
Но мне нужен не этот текст, а следующий за ним (выделен красным).
А если эта документация занимает не две, а пять-шесть строчек, то их приходится добавлять инженеру.
А раз строчки добавлены, значит строчки начала и конца работы тоже «сползут» вниз.
Так вот я стремлюсь все нужные данные «привязать» к своим текстам, выполненным шрифтом Bold.
Макрос ищет очередной текст и вставляет в реестр НЕ ЕГО, А СЛЕДУЮЩИЙ ЗА НИМ!
Подскажите метод, который считаете лучшим.
Спасибо.

Post’s attachments

Word.docx 21.13 Кб, 2 скачиваний с 2017-06-27 

You don’t have the permssions to download the attachments of this post.

25 Ответ от Fck_This 27.06.2017 14:51:24

  • Как просканировать всю таблицу в поисках ячейки с нужным текстом?
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Я бы находил текст, переходил на следующую ячейку, брал текст и переходил дальше — Если пусто или если маркер — переход на следующий поиск. Если текст — добавляем текст и идём дальше. В Ворде существует серьёзная проблема с обращением к ячейкам по их адресу в тех таблицах, где существуют объединённые ячейки.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

26 Ответ от MrBrown 27.06.2017 14:58:23

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Я бы то же так сделал бы, если б знал smile)
Вопрос: как перейти на следующую ячейку?
Это главное на сей момент.

27 Ответ от MrBrown 27.06.2017 14:59:27

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

С offset-ом у меня беда…

28 Ответ от MrBrown 27.06.2017 15:04:41

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Вопрос: что такое маркер?
Ну, применительно к моей проблеме.

29 Ответ от shanemac51 27.06.2017 15:18:43

  • shanemac51
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 05.03.2012
  • Сообщений: 467
  • Поблагодарили: 119

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

я бы видимо не стала привязываться к таблице , а перебирала бы параграфы
вечером попробую на вашем примере

30 Ответ от shanemac51 27.06.2017 16:13:00

  • shanemac51
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 05.03.2012
  • Сообщений: 467
  • Поблагодарили: 119

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

не совсем четко, но получила

Sub ValueOfCell_170627()
'Запоминаем текст ячейки в переменную
Dim sValue As String
Dim c1 As Cell, s1, k1, k2
Dim oDoc As Document
Set oDoc = ActiveDocument
Dim tbl As Table
k1 = 0
k2 = 0
For Each tbl In Word.ActiveDocument.Tables
tbl.Select
For Each c1 In Selection.Cells
s1 = Replace(c1.Range.Text, Chr(13), " ")
s1 = Replace(s1, Chr(10), " ")
s1 = Replace(s1, Chr(9), " ")
s1 = Replace(s1, Chr(7), " ")
s1 = Replace(s1, Chr(11), " ")


s1 = Replace(s1, "  ", " ")

If c1.Range.Font.Size < 7 Then s1 = ""

If s1 Like "5. *" Then
Debug.Print
Debug.Print s1;

k1 = 0
k2 = 0
s1 = ""
ElseIf s1 Like "[12346789]. *" Then
Debug.Print
'Debug.Print s1;

k1 = 0
k2 = 8
s1 = ""
ElseIf s1 Like "требованиям:*" Then
k1 = 0
k2 = 8
s1 = ""
''требованиям:

ElseIf s1 Like "Дополнительные сведения*" Then
k1 = 0
k2 = 0

ElseIf s1 Like "№ *" Then   ''№ 000/2.15-КЖ
Debug.Print
 Debug.Print s1
 k1 = 0
 k2 = 0
ElseIf s1 Like "*20??г*" Then  '' "15" марта 2017г
Debug.Print
 Debug.Print s1
 k1 = 0
 k2 = 0
Else
''
End If
k1 = k1 + 1

If k1 < k2 And k1 > 0 And Len(s1) > 0 Then
If k1 = 1 Then
Debug.Print
Debug.Print s1; " ";
Else
Debug.Print s1; " ";
End If
End If
Next c1
Next tbl

'''№ 0 / 2.15 - КЖ
'''
'''«15» марта 2017г.
'''
'''Установка опалубки    фундаментов в/о А-С/1-2 отм. +(55.600?58.100).
'''ООО «[наименование ООО]»   2.15-КЖ Лист 2
'''   
'''         
'''5. Даты: начала работ «10» марта 2017г.     окончания работ «14» марта 2017г.
End Sub

31 Ответ от MrBrown 29.06.2017 07:33:23

  • MrBrown
  • лейтенант
  • Неактивен
  • Зарегистрирован: 13.06.2017
  • Сообщений: 41

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

shanemac51, спасибо за отклик, но увы, сколько ни бился, у меня всегда выскакивает какая-нибудь ошибка. Много ещё не понимаю.
Сейчас пока (с великой благодарностью) пользуюсь макросом, предложенным мне Fck_This (см. в приложенном файле-реестре). С этим макросом из десятка обработанных актов Word два-три вставляются криво, это потому, что сами акты Word кривые — с добавленными/убавленными строками, объединёнными/разбитыми ячейками. Такие акты заношу в реестр вручную.
Буду весьма признателен, если Вы доработаете именно этот макрос применительно к моим «хотелкам»:
1. Находить нужные данные и вставлять их в реестр Excel несмотря на добавление/удаление строк в актах Word, объединение/разбиение ячеек.
2. Запоминать последнюю выбранную директорию и начинать новую сессию именно с неё.
Спасибо.
p.s. Все записи в файле Word, выполненные шрифтом Bold — неизменные. Их никогда не удаляют и не редактируют. К ним и нужно привязываться.

Post’s attachments

Реестр АОСР.xls 40 Кб, 2 скачиваний с 2017-06-29 

You don’t have the permssions to download the attachments of this post.

32 Ответ от Alexsh 26.12.2017 18:24:04

  • Alexsh
  • рядовой
  • Неактивен
  • Зарегистрирован: 26.12.2017
  • Сообщений: 1

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Доброго времени суток !Если есть вариант,помогите полжалуйста в поиске решения.После выполнения Макроса(копирование и вставка Таблицы) при определенном условии(при определенном изменении ячейки),не могу эту самую таблицу заполнить,Макрос удаляет лишнее,и оставляет только то,что было в него записано макрорекордером.Вопрос.Как его остановить в строке vba,что бы когда нужно(при изменении значения ячейки)  он срабатывал,но потом не мешал эту самую таблицу заполнять?Заранее благодарю за полезный ответ!

Private Sub Worksheet_Change(ByVal Target As Range)
     If Cells(3, 2) =

33 Ответ от Fck_This 27.12.2017 10:06:04

  • Как просканировать всю таблицу в поисках ячейки с нужным текстом?
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

Alexsh пишет:

Доброго времени суток !Если есть вариант,помогите полжалуйста в поиске решения.После выполнения Макроса(копирование и вставка Таблицы) при определенном условии(при определенном изменении ячейки),не могу эту самую таблицу заполнить,Макрос удаляет лишнее,и оставляет только то,что было в него записано макрорекордером.Вопрос.Как его остановить в строке vba,что бы когда нужно(при изменении значения ячейки)  он срабатывал,но потом не мешал эту самую таблицу заполнять?Заранее благодарю за полезный ответ!Private Sub Worksheet_Change(ByVal Target As Range)     If Cells(3, 2) =

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

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

34 Ответ от Fck_This 27.12.2017 10:10:39

  • Как просканировать всю таблицу в поисках ячейки с нужным текстом?
  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Как просканировать всю таблицу в поисках ячейки с нужным текстом?

КАПЧА ОБРЕЗАЕТ!!

Alexsh пишет:

Доброго времени суток !Если есть вариант,помогите полжалуйста в поиске решения.После выполнения Макроса(копирование и вставка Таблицы) при определенном условии(при определенном изменении ячейки),не могу эту самую таблицу заполнить,Макрос удаляет лишнее,и оставляет только то,что было в него записано макрорекордером.Вопрос.Как его остановить в строке vba,что бы когда нужно(при изменении значения ячейки)  он срабатывал,но потом не мешал эту самую таблицу заполнять?Заранее благодарю за полезный ответ!

Private Sub Worksheet_Change(ByVal Target As Range)
     If Cells(3, 2) =

Как я понял — вам надо сделать так, чтобы макрос заполнял только пустые? Или как?
Не знаю, что там с вашим методом — использую книжный (Создаём в модуле «Эта книга»)

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    sCell = Target.Address ‘Эта строка покажет адрес изменяемой ячейки
    sValue = Target ‘Эта строка покажет введённый текст
     If Target = «Hello World» Then
     ‘Это условие позволит выполнить действие при условии, что содержимое изменяемой ячейки
     ‘соответствует необходимое. В этом промежутке указываем то, что нужно выполнить
     End If
     ‘Если надо найти вхождение текста в текст ячейки, то используем:
     If InStr(Target, «Hello») >= 1 Then
     ‘Указываем, что надо сделать
     End If
End Sub

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

title keywords f1_keywords ms.prod api_name ms.assetid ms.date ms.localizationpriority

Find.Execute method (Word)

vbawd10.chm162529724

vbawd10.chm162529724

word

Word.Find.Execute

3b607955-0e82-aa13-dad1-7a5069a57b9d

06/08/2017

medium

Find.Execute method (Word)

Runs the specified find operation. Returns True if the find operation is successful. Boolean.

Syntax

expression.Execute (FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)

expression Required. A variable that represents a Find object.

Parameters

Name Required/Optional Data type Description
FindText Optional Variant The text to be searched for. Use an empty string («») to search for formatting only. You can search for special characters by specifying appropriate character codes. For example, «^p» corresponds to a paragraph mark and «^t» corresponds to a tab character.
MatchCase Optional Variant True to specify that the find text be case-sensitive. Corresponds to the Match case check box in the Find and Replace dialog box (Edit menu).
MatchWholeWord Optional Variant True to have the find operation locate only entire words, not text that is part of a larger word. Corresponds to the Find whole words only check box in the Find and Replace dialog box.
MatchWildcards Optional Variant True to have the find text be a special search operator. Corresponds to the Use wildcards check box in the Find and Replace dialog box.
MatchSoundsLike Optional Variant True to have the find operation locate words that sound similar to the find text. Corresponds to the Sounds like check box in the Find and Replace dialog box.
MatchAllWordForms Optional Variant True to have the find operation locate all forms of the find text (for example, «sit» locates «sitting» and «sat»). Corresponds to the Find all word forms check box in the Find and Replace dialog box.
Forward Optional Variant True to search forward (toward the end of the document).
Wrap Optional Variant Controls what happens if the search begins at a point other than the beginning of the document and the end of the document is reached (or vice versa if Forward is set to False). This argument also controls what happens if there is a selection or range and the search text is not found in the selection or range. Can be one of the WdFindWrap constants.
Format Optional Variant True to have the find operation locate formatting in addition to, or instead of, the find text.
ReplaceWith Optional Variant The replacement text. To delete the text specified by the Find argument, use an empty string («»). You specify special characters and advanced search criteria just as you do for the Find argument. To specify a graphic object or other nontext item as the replacement, move the item to the Clipboard and specify «^c» for ReplaceWith.
Replace Optional Variant Specifies how many replacements are to be made: one, all, or none. Can be any WdReplace constant.
MatchKashida Optional Variant True if find operations match text with matching kashidas in an Arabic-language document. This argument may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed.
MatchDiacritics Optional Variant True if find operations match text with matching diacritics in a right-to-left language document. This argument may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed.
MatchAlefHamza Optional Variant True if find operations match text with matching alef hamzas in an Arabic-language document. This argument may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed.
MatchControl Optional Variant True if find operations match text with matching bidirectional control characters in a right-to-left language document. This argument may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed.
MatchPrefix Optional Variant True to match words beginning with the search string. Corresponds to the Match prefix check box in the Find and Replace dialog box.
MatchSuffix Optional Variant True to match words ending with the search string. Corresponds to the Match suffix check box in the Find and Replace dialog box.
MatchPhrase Optional Variant True ignores all white space and control characters between words.
IgnoreSpace Optional Variant True ignores all white space between words. Corresponds to the Ignore white-space characters check box in the Find and Replace dialog box.
IgnorePunct Optional Variant True ignores all punctuation characters between words. Corresponds to the Ignore punctuation check box in the Find and Replace dialog box.

Return value

Boolean

Remarks

If MatchWildcards is True, you can specify wildcard characters and other advanced search criteria for the FindText argument. For example, «*(ing)» finds any word that ends in «ing».

To search for a symbol character, type a caret (^), a zero (0), and then the symbol’s character code. For example, «^0151» corresponds to an em dash (—).

Unless otherwise specified, replacement text inherits the formatting of the text it replaces in the document. For example, if you replace the string «abc» with «xyz», occurrences of «abc» with bold formatting are replaced with the string «xyz» with bold formatting.

Also, if MatchCase is False, occurrences of the search text that are uppercase will be replaced with an uppercase version of the replacement text, regardless of the case of the replacement text. Using the previous example, occurrences of «ABC» are replaced with «XYZ».

Example

This example finds and selects the next occurrence of the word «library».

With Selection.Find 
    .ClearFormatting 
    .MatchWholeWord = True 
    .MatchCase = False 
    .Execute FindText:="library" 
End With

This example finds all occurrences of the word «hi» in the active document and replaces each occurrence with «hello».

Set myRange = ActiveDocument.Content 
myRange.Find.Execute FindText:="hi", _ 
    ReplaceWith:="hello", Replace:=wdReplaceAll

[!includeSupport and feedback]

Word VBA Find

This example is a simple word macro find the text “a”:

Sub SimpleFind()

    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "a"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
End Sub

Find and Replace

This simple macro will search for the word “their” and replace it with “there”:

Sub SimpleReplace()

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "their"
        .Replacement.Text = "there"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Find and Replace Only in Selection

This VBA macro will find and replace text in a selection. It will also italicize the replaced text.

Sub ReplaceInSelection()
'replaces text JUST in selection . in adittion it makes replaced text italic
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "their"

        With .Replacement
            .Font.Italic = True
            .Text = "there"
        End With

        .Forward = True
        .Wrap = wdFindStop    'this prevents Word from continuing to the end of doc
        .Format = True 'we want to replace formatting of text as well
        .MatchCase = False
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

This line of code prevents VBA from continuing to the end of the Word document:

.Wrap = wdFindStop    'this prevents Word from continuing to the end of doc

This line of code indicates to replace the formatting of the text as well:

.Format = True 'we want to replace formatting of text as well

Find and Replace Only In Range

Instead of replacing text throughout the entire document, or in a selection, we can tell VBA to find and replace only in range.  In this example we defined the range as the first paragraph:

Dim oRange As Range
Set oRange = ActiveDocument.Paragraphs(1).Range
Sub ReplaceInRange()
'replaces text JUST in range [in this example just in the first paragraph]
Dim oRange As Range
Set oRange = ActiveDocument.Paragraphs(1).Range
 oRange.Find.ClearFormatting
    oRange.Find.Replacement.ClearFormatting
    With oRange.Find
        .Text = "their"
        .Replacement.Text = "there"
        .Forward = True
        .Wrap = wdFindStop 'this prevent Word to continue to the end of doc
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    oRange.Find.Execute Replace:=wdReplaceAll
End Sub

ВикиЧтение

VBA для чайников
Каммингс Стив

Поиск и замена текста с помощью VBA в Word

Хотя это звучит и несколько необычно, но Find — это объект Word VBA. Объекты Find принадлежат диапазонам и выделенным областям. Для обнаружения или форматирования текста с помощью объекта Find вам потребуется выполнить следующие действия.

1. Получите доступ к объекту Find для определенного диапазона или выделенной области. Если вам необходимо просмотреть целый документ, используйте свойство Content объекта Document для получения доступа к соответствующему диапазону, как показано ниже:

ActiveDocument.Content.Find

2. Определить свойства объекта Find в соответствии с тем, что же вы ищете и как именно вы хотите проводить поиск.

3. Вызвать метод Execute объекта Find. Соответствующий пример приведен ниже:

With OpenRange.Find

.Clear Formatting

.Text = «pogosticks»

.Execute

End With

Для свойств, значения которых явно вы задать не можете, объект Find выбирает параметры, использованные последними или те, которые в настоящий момент заданы в диалоговом окне Найти и заменить программы Word. Именно по этой причине вам всегда следует включать метод Clear Formatting перед началом нового поиска- он позволяет убрать все ранее определенные для проведения поиска параметры форматирования.

Работа с найденным текстом

Основная работа метода Execute — обнаружение первого экземпляра искомого текста или форматирования в указанном диапазоне или выделенной области. После выполнения этого метода вам прежде всего следует определить, было ли найдено то, что вы ищете. Для подобной проверки используйте свойство Found объекта Find совместно с инструкцией If…Then, как показано на примере следующей заготовки программного кода:

If .Found = True Then

(выполнение определенных действий с найденным текстом)

Else

(отображение соответствующего сообщения)

End If

Если метол Execute нашел необходимый текст, исходный диапазон или выделенная область переопределяются таким образом, чтобы содержать найденный текст. Это очень важный момент, поскольку это означает, что вы можете работать с найденным текстом посредством свойств и методов исходного объекта. В следующем примере, представляющем собой расширенный вариант первого фрагмента кода из настоящего раздела, инструкция .Parent. Italic = True обращается к родительскому объекту по отношению к объекту Find, т.е. диапазону OpenRange. При выполнении этой инструкции диапазон OpenRange теперь содержит только найденный фрагмент текста, так как только в нем предусмотрено форматирование курсивом:

With OpenRange.Find

.СlearFormatting

.Text = «pogosticks»

If .Found = True Then

.Parent.Italic = True

Else

MsgBox «No pogosticks found.»

End If

End with

Объект Reolacement принадлежит (а значит, является его свойством) объекту Find. При написании кода для операции поиска и замены вам следует задать свойства и выполнить методы объекта Replacement.

Следующий фрагмент кода заменяет все экземпляры фразы pogosticks словом skateboards. Выделенная область изменяется при выполнении критерия поиска, поскольку доступ к объекту Find осуществляется через объект Selection:

With ActiveDocument.Content.Find

.ClearFormatting

.Text = «pogosticks»

With .Replacement

.ClearFormatting

.Text == «skateboards»

End With

.Execute Replace := wdReplaceAll

End With

Обратите внимание на то, что метод Execute может использовать аргумент Replace, предназначенный для контроля за тем, будут ли заменены все обнаруженные экземпляры обнаруженного фрагмента текста, или только первый.

Читайте также

Поиск и замена данных

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

Поиск и замена данных

Поиск и замена данных
В программе Extra Hide Studio имеется удобный механизм для быстрого поиска и замены данных. Эта возможность особенно актуальна при работе с большими исходными кодами, поскольку поиск данных путем просмотра всего кода может занять слишком много времени, и к

Глава 2 Подготовка текста в Microsoft Word

Глава 2 Подготовка текста в Microsoft Word
• Общие сведения о Word 2007• Основные правила форматирования• Вставка стандартных блоков в документ• Нумерация страниц и колонтитулы• Проверка правописания, поиск синонимов, перевод слов• Сноски и закладки• Настройка параметров

3.1. Поиск и замена фрагментов

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

Поиск и замена текста

Поиск и замена текста
В текстовом редакторе Adobe InDesign можно воспользоваться полезнейшей функцией поиска и замены фрагментов текста. Причем, раз мы имеем дело с программой верстки, найденные фрагменты можно не только заменить другими, но и оформить каким-то образом –

Поиск и замена форматирования

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

Автоматический поиск и замена данных

Автоматический поиск и замена данных
В процессе работы иногда возникает необходимость быстро найти те или иные данные (слово, текстовый фрагмент и т. д.) либо заменить одни данные на другие. Для решения такой задачи в Publisher 2007 реализован механизм автоматического поиска и

Поиск и замена

Поиск и замена
В новой версии Excel был полностью изменен пользовательский интерфейс и расширены функциональные возможности средства Найти и заменить. Теперь можно с помощью одной операции производить поиск и замену по всем листам книги, повторно выполнять запросы поиска

Поиск и замена символов

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

Глава 2 Подготовка текста в Microsoft Word

Глава 2
Подготовка текста в Microsoft Word
Microsoft Word – пожалуй, самая популярная на сегодняшний день программа, предназначенная для работы с текстами. Продукт компании Microsoft обладает всеми необходимыми возможностями, связанными с набором и правкой текстов любой сложности.

5.7. Поиск и замена

5.7. Поиск и замена
В документе можно производить автоматический поиск текста и замену его другим.Поиск и замена ведется по введенному образцу. Если в качестве образца указано слово «ход», то компьютер найдет и слово «пароход», если предварительно не поставить условие, что

13.3.4. Поиск и замена текста

13.3.4. Поиск и замена текста
Как вы уже догадались, окно Найти и заменить используется не только для перехода на нужную страницу. Вкладка Найти используется для поиска текста. Для быстрого доступа к этой вкладке нажмите Ctrl+F или выберите команду меню Правка, Найти. Нажмите

Поиск и замена

Поиск и замена
Для поиска в тексте документа нужного слова или сочетания символов служит окно поиска и замены (рис. 9.19), которое открывается нажатием Ctrl+F. Если надо, чтобы оно сразу открылось как окно замены, используйте сочетание Ctrl+H.

Рис. 9.19. Окно поиска и замены.Для

Поиск и замена фрагментов фильма

Поиск и замена фрагментов фильма
Очень часто бывает нужно найти в изображении или фильме Flash какой-либо текст и, возможно, заменить его на другой. Специально для этого Flash, как и многие другие программы, работающие с документами, предлагает богатые возможности по поиску и

Поиск и замена текста

Поиск и замена текста
Поиск определенного слова или фразы в большом документе является довольно непростой задачей, но ее можно значительно упростить, если воспользоваться командой Главная ? Редактирование ? Найти. В появившемся окне (рис. 5.20) введите искомый текст и

Поиск и замена данных

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

Понравилась статья? Поделить с друзьями:
  • Vba word поиск в строке
  • Vba word поиск в документе
  • Vba word подстановочные символы
  • Vba word печать документа
  • Vba word переход на новую строку