12 / 11 / 3
Регистрация: 07.09.2015
Сообщений: 256
21.04.2020, 13:45
7
Narimanych,
Сообщение от Narimanych
Кикие следующие действия после нахождения?
Да там, задача простая. В определённой таблице (именно в таблице №7) найти текст в строке, (например: «Отчёт №3», а их например всего пять),
и удалить все строки
(со столбцами)
идущие до этого текста
(в таблице).
Т.е. скажем так: укоротить таблицу, обрезая её с начала. А флагом остановки, служит искомый текст. Это, то я реализую. Хотя если будет, хороший пример (как выше), буду благодарен.
Сообщение от Narimanych
Visual Basic | ||
|
Блин, спасибо! Красивая реализация!
Вот совсем запамятовал про Метод «Like»
И с
Visual Basic | ||
|
тоже круто Нуб я в 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: Как просканировать всю таблицу в поисках ячейки с нужным текстом?
Я бы то же так сделал бы, если б знал )
Вопрос: как перейти на следующую ячейку?
Это главное на сей момент.
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) введите искомый текст и
Поиск и замена данных
Поиск и замена данных
По современным меркам таблица с несколькими тысячами записей считается небольшой, но даже в такой таблице ручной поиск или отбор нужной информации может занять продолжительное время. С помощью средств поиска, сортировки и фильтрации нужные данные