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

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

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки


    1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
    2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
    3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
    4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.

    >
    Поиск в конкретном столбце таблицы

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    10.11.09, 12:16

      Всем привет:)

      Догнать сам не могу,как можно сделать что бы поиск производился не по всему документу,а только в таблице,и в определённом столбце этой таблицы?

      ExpandedWrap disabled

        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



      Сообщ.
      #2

      ,
      10.11.09, 12:26

        ExpandedWrap disabled

          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

        Вот такой код написал,но появилась ошибка :Отсутствует доступ к отдельным столбцам, поскольку ячекий таблицы имеют разную ширину.
        Оибка в строке:A = ActiveDocument.Tables(1).Columns(1)

        Monster

        Akina



        Сообщ.
        #3

        ,
        10.11.09, 12:26

          Select этот столбец и делать поиск в выделенном :)


          Саня87



          Сообщ.
          #4

          ,
          10.11.09, 12:55

            Цитата Akina @ 10.11.09, 12:26

            Select этот столбец и делать поиск в выделенном :)

            Ну я вроде это и делаю вот строка A = ActiveDocument.Tables(1).Columns(1).Select
            потом уже A.Find.Text = «5»

            Но оно ошибку выдаёт,ругается на select.

            Monster

            Akina



            Сообщ.
            #5

            ,
            10.11.09, 13:12

              Правильно ругается. Для выделения колонки используйте .SelectColumn


              Саня87



              Сообщ.
              #6

              ,
              10.11.09, 14:01

                Цитата Akina @ 10.11.09, 13:12

                Правильно ругается. Для выделения колонки используйте .SelectColumn

                Если не трудно дайте ссылку где про этот SelectColumn() почитать можно?
                Яндекс жадничает.

                Monster

                Akina



                Сообщ.
                #7

                ,
                10.11.09, 14:07

                  Не поверите — во встроенной справке по Word VBA. Это метод объектов Selection, Table и некоторых других.

                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                  0 пользователей:

                  • Предыдущая тема
                  • VB for Application
                  • Следующая тема

                  Рейтинг@Mail.ru

                  [ 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

                  Like this post? Please share to your friends:
                • Vba word поиск текста в таблице
                • Vba word поиск строки
                • Vba word поиск в строке
                • Vba word поиск в документе
                • Vba word подстановочные символы