Страницы: 1 2 След.
RSS
Word+Excel, Экспорт и обработка данных в Word
 
Привет, Планетяне!

Нужна помощь в доработке запускаемого из Excel макроса обработки Word-файла (кнопка на листе "Л" ;) .
Точнее - не хватает куска кода, обозначенного как '***** ДОПОЛНЕНИЕ ТАБЛИЦЫ НТД *****.
Макрос должен:
- найти разбросанные в Word-файле номера вида [^#^#] и [^#^#^#], не содержащиеся в БС (таблице, которую можно найти по закладке "p_Список"  ;)  
- составить из найденных результатов отсортированный по возрастанию список номеров (без повторов)
- подгрузить для них вид и наименование НТД с листа "Л" Excel
- интегрировать полученный перечень в таблицу NT, выделив его цветом
* Очищать (удалять) таблицу NT нельзя!

Конечно, всё это можно выполнить вручную (см. видео и выделенный оранжевым кусок таблицы в файле Тест.docx).
Но очень нужно автоматизировать!
Своих мозгов и знаний VBA не хватает.

Выручайте, Товарищи!
Изменено: Acid Burn - 27.01.2013 18:03:51 (Относительно задачи от 20.01.2013 всё сильно упростилось.)
 
Больше на ТЗ смахивает :))
Спасибо
 
Видимо сказывается то, что я проектировщик.
Хотел максимально точно описать задачу )))
 
Да уж, настолько точно описали, что получилось техзадание из 5 пунктов...
Задавали бы вы конкретные вопросы по каждому пункту - тогда было бы больше шансов, что кто-то поможет.

PS: В макросе больше всего понравилось это:
Цитата

'••••••••••••••••••••••••••••••••••••
' СОЗДАНИЕ СПИСКА НТД
'••••••••••••••••••••••••••••••••••••
Sub НТД_Make()
MsgBox "Упс..."
End Sub
 
To EducatedFool
Говорю ж меня на этом замкнуло )))
При этом макрос НТД_Proc вроде полностью рабочий.

Пока бьюсь над этими вопросами:
1. Как из Word-файла зачитать все элементы вида [^#^#^#] в столбец "O" Excel-файла
2. Как в макросе НТД_Proc подсчитать Z
Изменено: Acid Burn - 20.01.2013 22:45:57
 
Да не на этом замкнуло. Вам и намекают, и прямо пишут...
Вы написали целое задание, и копаться-разбираться никому, как видите, не хочется.

Создайте отдельные темы по каждому вопросу. Если вопросы одного направления - можно в одну (но это не значит, что вопросы, объединенные только Вашей задачей, можно считать одного направления). К каждой теме - небольшие подопытные файлы с Вашими наработками для иллюстрации вопроса и для работы с ними.
Иначе долго ждать будете.
 
Цитата
vikttur пишет:
небольшие подопытные файлы с Вашими наработками для иллюстрации вопроса и для работы с ними.
В первом посте постарался по максимуму всё расписать и приложить.
Относительно 20.01.2013 задача сильно упростилась.
Надеюсь, кто-нибудь откликнется и поможет добить макрос!
Изменено: Acid Burn - 27.01.2013 18:09:18
 
Есть вот такой код:
Код
Sub FindText2()
  Dim MyAR() As String
  Dim i As Long
  i = 0
  With Selection
    .HomeKey Unit:=wdStory
    .Find.Text = "[^#^#^#]"
  End With
  Do While Selection.Find.Execute = True
     ReDim Preserve MyAR(i)
     MyAR(i) = Selection
     i = i + 1
  Loop
  For i = LBound(MyAR) To UBound(MyAR)
     Debug.Print MyAR(i)
  Next i
End Sub

Он выводит все найденные результаты в окно VBA Immediate (можно открыть по Ctrl+G).
Как сделать, чтобы результаты без повторов выводились в Excel на лист "Л" в столбец "O"?
 
Цитата
Acid Burn пишет:
Как сделать, чтобы результаты без повторов выводились в Excel на лист "Л" в столбец "O"?
Для начала нужно этот код адаптировать под Эксель, а именно:
1. Создать word application
2. Открыть нужный Ворд документ
3. Переделать последнюю часть кода, значения выводить в коллекцию, чтобы отсечь повторяющие значения
4. Вывести коллекцию на лист

Пс. Таких примеров куча, как на Планете, так и интернете. Юзайте поиск.
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Цитата
LightZ пишет:
- Код адаптировать под Эксель
- Создать word application
- Открыть нужный Ворд документ
Сделал, а дальше как?
Поиском подходящих примеров не нашёл...
Изменено: Acid Burn - 02.02.2013 13:52:57
 
Код у Вас какой-то кривоватый, не переделывал, добавил только коллекцию
Изменено: LightZ - 02.02.2013 14:00:40
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
LightZ, спасибо!

Добавил Ваш код в Module2. Также ввёл:
- поиск "[^#^#]" дополнительно к "[^#^#^#]"
- сортировку полученной коллекции
- выборку по полученным результатам № и названия НТД с листа "Л" Excel
- перенос данных в Word с выделением новых строк жёлтым цветом
Цель почти достигнута!

Вопрос: как исключить из nC результаты, содержащиеся в таблице NT и оптимизировать мой корявый код?

PS: Если уважаемые Модераторы вновь сочтут данные вопросы не относящимися к теме "Экспорт и обработка данных в Word", прошу удалить данную тему.
Изменено: Acid Burn - 02.02.2013 23:08:07
 
Господа, день на исходе, но решения поставленной задачи пока не видно.
Пытаюсь сделать следующее:
- сформировать из первого столбца таблицы NT коллекцию nC1
- сравнить её с nC
- уникальные значения из nC (те, которых нет в nC1) обозначить как nC2
Может кто-то из профессионалов Планеты что-нибудь посоветует?
Я вообще на правильном пути или надо как-то иначе действовать?
Изменено: Acid Burn - 02.02.2013 23:44:37
 
Зачитал в коллекцию 1 весь документ, в коллекцию 2 - только первый столбец таблицы NT.
Как убрать из коллекции 1 результаты, которые есть в коллекции 2?
Изменено: Acid Burn - 06.02.2013 21:42:00
 
:?:  
Я уже всё, что мог по коллекциям прочитал...
Изучаю VBA самостоятельно, поэтому не забрасывайте камнями.
Просто скажите, что я не так делаю?
Изменено: Acid Burn - 06.02.2013 23:03:28
 
Просто пройтись двумя циклами по коллекциям, с помощью оператора if найти одинаковые значения, и с помощью свойства remove (у коллекции) по счетчику цикла удалить нужный элемент из коллекции
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Хороший совет!
Но что-то не выходит у меня ничего...
Что значит двумя циклами?
Изменено: Acid Burn - 07.02.2013 00:17:58
 
2 цикла вложенных один в другой. Первый цикл по элементам первой коллекции, а второй по элементам второй коллекции (циклы for next)
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
А почему бы сразу из двух таблиц не формировать список уникальных?
 
To LightZ
Я думал достаточно будет сравнить элементы первой коллекции со второй...
Но не догнал, как выполнить перебор и удаление элементов по критерию.
Буду разбираться...

To Юрий М
Cогласен, что сразу формировать список уникальных элементов было бы правильнее и быстрее.
Но как это реализовать вообще не представляю...

Всем спасибо!
 
Цикл с отбором уникальных по первой таблице, затем цикл по второй - уникальные в ту же коллекцию. Если сделаете небольшой пример - набросаю код.
 
To Юрий М.
Пример и пояснения в посте №14, макрос FindText.
 
Это не пример - это рабочий файл. Я просил НЕБОЛЬШОЙ пример с двумя таблицами, из которых нужно выбрать уникальные.
P.S. Уже не прошу.
 
To Юрий М.
Но первая "таблица" - это Word-файл, вторая - это реально таблица, но тоже в Word'e.
Поэтому могу упростить, убрав лишь несколько лишних строк.
Как понимать P.S.?
 
Acid Burn, если Вы еще не поняли, тогда разъясню Вам ситуацию - копаться в Ваших файлах с кучей макросов никто не хочет и я на 90% уверен, что никто не будет.
Если же Вы действительно хотите, чтобы Вам помогли (я конечно не уверен, что у кого-то еще осталось желание это делать, после Ваших то сообщений, как например цитата приведенная ниже) - сделайте маленький пример в файле формата .xls, с двумя таблицами и Вашими "попытками" извлечь уникальные значения коллекцией.

Цитата
Acid Burn пишет:
Господа, день на исходе, но решения поставленной задачи пока не видно.
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
LightZ, а что такого в моей цитате?
Я на самом деле просидел весь день в поисках решения.
Или Вы думаете, что я только выкладываю задачи вам, не думая как их решить самому?
 
До свидания
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Что ж я Вам такого сделал то? Чем заслужил такое отношение?
Ведь другие вылезают на форум, вообще не пытаясь разобраться ни в чём, и им помогают.
Я же пытаюсь сам что-то понять, написать. Вот только с массивами и коллекциями у меня туго.
А Вы сразу с плеча рубите.
 
Цитата
Acid Burn пишет:
Как понимать P.S.?
Так и понимать - мне уже неинтересно: не буду я больше просить НОРМАЛЬНЫЙ пример.
 
Наконец доделал макрос!

Реально перемудрил с массивами/коллекциями - на самом деле всё оказалось проще.  :)
В итоге макрос 100%-рабочий и достаточно быстрый.
По любому работает быстрее меня: вместо пары часов ему надо минут 5 (от 4 до 32 опер/с).

В целом макрос умеет:
1. Запрашивать открытый или закрытый Word-файл для обработки
2. Работать с включённым и отключённым экраном по выбору пользователя
3. Обновлять поля Word
4. Находить отсутствующие в таблице НТД номера документов путём анализа Word-файла
5. Дополнять таблицу НТД списком недостающих документов с выборкой данных по ним из Excel
6. Считать число ссылок на НТД в Word-файле
7. Вводить новую нумерацию и закладки для списка НТД, удаляя старые поля и закладки
(старый номер остаётся во вспомогательном столбце)
8. Вводить гиперссылки на НТД в Word-файле, удаляя старые поля
9. Считать время выполнения на основе очень точного таймера

Огромное спасибо:
- SVA за WdGoToItem Enumeration, код выбора файла,
а также помощь с подсчётом заполненных строк, вводом закладок и гиперссылок!
- LightZ за совет с коллекциями
- Юрий М за моральную поддержку

В принципе, тему можно закрывать.
Хотя всё ещё надеюсь, что кто-нибудь поможет улучшить алгоритмы и скорость готового макроса.
Изменено: Acid Burn - 11.02.2013 23:38:21 (Добавил ссылку)
Страницы: 1 2 След.
Наверх