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
Чтобы отправить ответ, вы должны войти или зарегистрироваться
|
|
|
Популярные разделы FAQ: Общие вопросы Особенности VBA-кода Оптимизация VBA-кода Полезные ссылки
1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
Поиск в конкретном столбце таблицы
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Всем привет:) Догнать сам не могу,как можно сделать что бы поиск производился не по всему документу,а только в таблице,и в определённом столбце этой таблицы?
Selection.Find.Replacement.ClearFormatting Selection.Find.ClearFormatting With Selection.Tables(1).Columns(1) .Find.Text = «5» .Find.Replacement.Font.Superscript = True .Find.Replacement.Font.Subscript = False .Find.Replacement.Text = «йцукен» .Find.Forward = True .Find.Wrap = wdFindContinue .Find.Format = True .Find.MatchCase = False .Find.MatchWholeWord = False .Find.MatchWildcards = False .Find.MatchSoundsLike = False .Find.MatchAllWordForms = False .Find.Execute Replace:=wdReplaceAll End With
шото типа этого, но не то… |
Саня87 |
|
Selection.Find.Replacement.ClearFormatting Selection.Find.ClearFormatting A = ActiveDocument.Tables(1).Columns(1) A.Find.Text = «5» A.Find.Replacement.Font.Superscript = True A.Find.Replacement.Font.Subscript = False A.Find.Replacement.Text = «йцукен» A.Find.Forward = True A.Find.Wrap = wdFindContinue A.Find.Format = True A.Find.MatchCase = False A.Find.MatchWholeWord = False A.Find.MatchWildcards = False A.Find.MatchSoundsLike = False A.Find.MatchAllWordForms = False A.Find.Execute Replace:=wdReplaceAll Вот такой код написал,но появилась ошибка :Отсутствует доступ к отдельным столбцам, поскольку ячекий таблицы имеют разную ширину. |
Akina |
|
Select этот столбец и делать поиск в выделенном |
Саня87 |
|
Цитата Akina @ 10.11.09, 12:26 Select этот столбец и делать поиск в выделенном
Ну я вроде это и делаю вот строка A = ActiveDocument.Tables(1).Columns(1).Select Но оно ошибку выдаёт,ругается на select. |
Akina |
|
Правильно ругается. Для выделения колонки используйте .SelectColumn |
Саня87 |
|
Цитата Akina @ 10.11.09, 13:12 Правильно ругается. Для выделения колонки используйте .SelectColumn
Если не трудно дайте ссылку где про этот SelectColumn() почитать можно? |
Akina |
|
Не поверите — во встроенной справке по Word VBA. Это метод объектов Selection, Table и некоторых других. |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- VB for Application
- Следующая тема
[ Script execution time: 0,0617 ] [ 16 queries used ] [ Generated: 14.04.23, 17:33 GMT ]
Something like this:
Sub ReplaceTables()
Dim oTable As Table
Dim oRng As Range
For Each oTable In ThisDocument.Tables
If oTable.Rows.Count > 1 And oTable.Columns.Count > 1 Then
If IsNumeric(oTable.Cell(2, 1).Range.Words(1).Text) And _
IsNumeric(oTable.Cell(2, 2).Range.Words(1).Text) Then
Set oRng = oTable.Range
oTable.Delete
oRng.Text = "[TABLE]" & vbCrLf
End If
End If
Next
Set oTable = Nothing
Set oRng = Nothing
End Sub
It loops through all the tables in the document, checks in the first two cells in the second row if the first word is numeric, and if so deletes the table and puts the [TABLE] text and a new line instead.
Hope this helps.
Addition:
To check for 4 columns or more, and the presence of a $ sign in the text of the table, use this check instead:
If oTable.Columns.Count >= 4 Then
If InStrRev(oTable.Range.Text, "$") > 0 Then
Формулировка задачи:
Здравствуйте, есть макрос по поиску и замене текста из таблицы Excel в шаблоне файла Word
и так далее…
как дописать код чтобы при нахождении findtext определённого значения findtext={имяi}, макрос удалял строку таблицы открытого документа word с найденным значением findtext?
Спасибо
Код к задаче: «Поиск текста в таблице файла Word и удаление строки с текстом»
textual
Do While .Execute If WA.Selection.Tables.Count > 0 Then WA.Selection.Rows(1).Delete Else WA.Selection.Collapse Direction:=0 'wdCollapseEnd End If Loop
Полезно ли:
10 голосов , оценка 4.300 из 5