Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Оптимизировать обработку таблицы Ворда / 25 сообщений из 43, страница 1 из 2
05.02.2013, 08:01
    #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
05.02.2013, 09:48
    #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
05.02.2013, 10:36
    #38137482
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать обработку таблицы Ворда
Antonariy,
понял For Each r In - рулит? странно почему???
...
Рейтинг: 0 / 0
05.02.2013, 10:45
    #38137494
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать обработку таблицы Ворда
Потому что последовательный проход по коллекции итератором быстрее, чем обращение к произвольному элементу по индексу. С массивами наоборот, хотя разница гораздо менее значительна. Кроме того, обращение .Rows(q).Range происходило не один раз за итерацию, а целых семь.
...
Рейтинг: 0 / 0
05.02.2013, 10:49
    #38137502
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать обработку таблицы Ворда
Antonariy, ясность полная, как бы это не забыть...
щас Шокер скажет, что надо записать в тетрадку... :)
...
Рейтинг: 0 / 0
05.02.2013, 11:53
    #38137635
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать обработку таблицы Ворда
Antonariy, спасибо, вопрос жесть
последовательный проход по коллекции итератором быстрее, чем обращение к произвольному элементу по индексу
что такое итератор?? блин не знаю...
...
Рейтинг: 0 / 0
05.02.2013, 12:19
    #38137697
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать обработку таблицы Ворда
For x In — переменная x называется итератором, объектом, в котором содержится ссылка на очередной элемент коллекции/массива
for x = — переменная x называется индексом, порядковым номером произволного элемента коллекции/массива
...
Рейтинг: 0 / 0
05.02.2013, 12:36
    #38137735
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать обработку таблицы Ворда
Antonariy, познавательно, спасибо!!!!
...
Рейтинг: 0 / 0
06.02.2013, 07:49
    #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
06.02.2013, 07:51
    #38139294
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать обработку таблицы Ворда
как бы понятно, на
Код: vbnet
1.
For Each g In ActiveDocument.Tables(1)


ругается
...
Рейтинг: 0 / 0
06.02.2013, 08:56
    #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
06.02.2013, 10:16
    #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
06.02.2013, 10:33
    #38139475
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать обработку таблицы Ворда
Antonariy, какие Worksheet In Worksheets если ветка: Оптимизировать обработку таблицы Ворда
...
Рейтинг: 0 / 0
06.02.2013, 10:41
    #38139489
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать обработку таблицы Ворда
катастрофа,
Код: vbnet
1.
2.
3.
4.
разные буквы [SIZE=5]g/q[/SIZE]
wdYellow = (g.Range.HighlightColorIndex = wdYellow)

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

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

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

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

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

Это лажа какая-то.
конечно, вот это wdYelloww = (g.Range.HighlightColorIndex = wdYellow) - другое делоПотому что не используешь option explicit, а вместе с ним тоже лажа.
...
Рейтинг: 0 / 0
08.02.2013, 11:33
    #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
08.02.2013, 13:00
    #38143261
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать обработку таблицы Ворда
кстати она верная??Нет, она тупая. Она дважды тупая, потому что один раз я уже об этом сказал: 13882195

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

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

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


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