powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Оптимизировать обработку таблицы Ворда
25 сообщений из 43, страница 1 из 2
Оптимизировать обработку таблицы Ворда
    #38137302
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, подскажите что можно предпринять, таблицу за 12 часов обрабатывает только 6000 строк, ужас
делов то узнать в таблице чтобы.... указано в тексте TextError, код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
For q = 1 To Количество_строк_в_таблице

            s1 = Trim$(.Rows(q).Range)

            Курсив = .Rows(q).Range.Font.Italic
         
                      If .Rows(q).Range.HighlightColorIndex = wdYellow _
               And s1 Like "*[её]*" = False Then TextError = "В строке имеется выделение жёлтым цветом, но не имеется буквы ""её""": GoTo Выход_из_цикла
           
            If Курсив = -1 And s1 Like "*[её]*" = False Then TextError = "В строке имеется курсив, но не имеется буквы ""её""": GoTo Выход_из_цикла

                     If .Rows(q).Range.HighlightColorIndex <> wdYellow _
               And Курсив = -1 Then TextError = "В строке имеется курсив, но она не выделена жёлтым цветом": GoTo Выход_из_цикла

                      If Курсив = -1 _
               And .Rows(q).Range.HighlightColorIndex <> wdYellow Then TextError = "В строке имеется курсив, но она не выделена жёлтым цветом": GoTo Выход_из_цикла

            ''''парность строк
         
            If .Rows(q).Range.HighlightColorIndex = wdYellow _
               Or Курсив = -1 Then Парность_строки = Парность_строки + 1

                       If Парность_строки Mod 2 <> 0 Then

                               If .Rows(q).Range.HighlightColorIndex = wdYellow _
                   And .Rows(q + 1).Range.HighlightColorIndex <> wdYellow Then TextError = "В строке имеется выделение жёлтым цветом, но в следующая строке нет выделения жёлтым цветом": GoTo Выход_из_цикла

                               If Курсив = -1 _
                   And .Rows(q + 1).Range.Font.Italic <> -1 Then TextError = "В строке имеется курсив, но в следующей строке не имеется курсива": GoTo Выход_из_цикла
            End If

        Next q



Спасибо
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137392
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Dim r As Range
Dim q As Long
q = 1
For  Each r In Книга.Лист.Rows
    s1 = Trim$(r)
    Курсив = r.Font.Italic
    ...
    With Книга.Лист.Rows(q + 1)
        ...
        If r.HighlightColorIndex = wdYellow And .HighlightColorIndex <> wdYellow Then TextError = "В строке имеется выделение жёлтым цветом, но в следующая строке нет выделения жёлтым цветом": GoTo Выход_из_цикла
        ...
    End With
    q = q + 1
    If q = Количество_строк_в_таблице Then Exit For
Next
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137482
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
понял For Each r In - рулит? странно почему???
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137494
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что последовательный проход по коллекции итератором быстрее, чем обращение к произвольному элементу по индексу. С массивами наоборот, хотя разница гораздо менее значительна. Кроме того, обращение .Rows(q).Range происходило не один раз за итерацию, а целых семь.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137502
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, ясность полная, как бы это не забыть...
щас Шокер скажет, что надо записать в тетрадку... :)
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137635
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, спасибо, вопрос жесть
последовательный проход по коллекции итератором быстрее, чем обращение к произвольному элементу по индексу
что такое итератор?? блин не знаю...
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137697
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For x In — переменная x называется итератором, объектом, в котором содержится ссылка на очередной элемент коллекции/массива
for x = — переменная x называется индексом, порядковым номером произволного элемента коллекции/массива
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38137735
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, познавательно, спасибо!!!!
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139290
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так понял, что
если таблица обычная из одного столбца, тогда вместо
Код: vbnet
1.
Dim q As Row

указываем
Код: vbnet
1.
Dim q As Cell


Но здесь
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1).Rows


или
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1)
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139294
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как бы понятно, на
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1)


ругается
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139330
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё одна не понятка вылезла, в строке
wdYellow = (g.Range.HighlightColorIndex = wdYellow)
Код: vbnet
1.
где Dim q As Cell


и работает в строке
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1).Rows


отрабатывает как = True в момент когда это не так, в чём ошибка???
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139445
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот опять фирменные проблемы с формальной логикой от Эндрю. Наверное тут таки эффективней использовать тетрадку.

Иерархия экселя такова: Excel.Application -> Workbooks -> Workbook -> Worksheets -> Worksheet -> Rows -> Row -> Cells -> Cell.
Никаких исключений вроде этого
я так понял, что
если таблица обычная из одного столбцане допускается. Поэтому For Each Workbook In Workbook s , Worksheet In Worksheet s и т.д, никаких Cell In Rows.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139475
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, какие Worksheet In Worksheets если ветка: Оптимизировать обработку таблицы Ворда
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139489
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофа,
Код: vbnet
1.
2.
3.
4.
разные буквы [SIZE=5]g/q[/SIZE]
wdYellow = (g.Range.HighlightColorIndex = wdYellow)

где Dim q As Cell
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139496
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаAntonariy, какие Worksheet In Worksheets если ветка: Оптимизировать обработку таблицы Ворда Пофиг. В ворде другие объекты тот же принцип.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139521
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА, нашёл проблемс нужно было не называть переменную wdYellow а хотя бы wdYelloww ну или русскими словами
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139527
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В каком контексте использовано выражение
Код: vbnet
1.
wdYellow = (g.Range.HighlightColorIndex = wdYellow)

? Если прямо так вставить, то Compile error: Assignment to constant not permitted.

Файл с таблицей и кодом в студию.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139540
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
wdYellow = (g.Range.HighlightColorIndex = wdYellow)

Это лажа какая-то.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139582
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Код: vbnet
1.
wdYellow = (g.Range.HighlightColorIndex = wdYellow)

Это лажа какая-то.
конечно, вот это wdYelloww = (g.Range.HighlightColorIndex = wdYellow) - другое дело
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38139626
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофаAntonariy
Код: vbnet
1.
wdYellow = (g.Range.HighlightColorIndex = wdYellow)

Это лажа какая-то.
конечно, вот это wdYelloww = (g.Range.HighlightColorIndex = wdYellow) - другое делоПотому что не используешь option explicit, а вместе с ним тоже лажа.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143051
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, уже использую
Код: vbnet
1.
option explicit

, но не пойму
чтобы реализовать мысль
если таблица обычная из одного столбца, тогда вместо Dim g As Row указываем Dim g As Cell
кстати она верная??
получаю ошибку объект не поддерживает этот метод на строке
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1)


как нужно?
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143261
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати она верная??Нет, она тупая. Она дважды тупая, потому что один раз я уже об этом сказал: 13882195

Код: vbnet
1.
For Each g In ActiveDocument.Tables(1)

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

Толстый намек: Tables -> Table.Rows -> Row.Cells -> Cell.
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143361
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
For Each g In ActiveDocument.Tables(1).Range.Cells
так?
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143397
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Читай эту строчку до потери сна и аппетита, до умопомрачения: Tables -> Table.Rows -> Row.Cells -> Cell
...
Рейтинг: 0 / 0
Оптимизировать обработку таблицы Ворда
    #38143417
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
Tables -> Table.Rows -> Row.Cells -> Cell
ну а где тут скобки () для вставки индексов?
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Оптимизировать обработку таблицы Ворда
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]