Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Runtime error 80070057 / 8 сообщений из 8, страница 1 из 1
13.08.2020, 22:47
    #39989586
iMerlin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime error 80070057
Hi!

Прошу помощи, никак не соображу что делать.
Решаю примитивную, в сущности задачу: разбиваю таблицу в WORD на две, красный заголовок остается в первой, остальная часть уходит во вторую. При этом во второй таблице формируется дополнительная строка с цифрами 1,2,3... и т.д. до конца и назначается заголовком, повторяемым на каждой странице. Ну то есть оформление по ГОСТ, когда надо не весь заголовок, а только номера колонок повторять.
Сделал три тестовые таблицы: первая простая, вторая с объединенными ячейками в теле таблицы, третья с объединенными ячейками и в теле и в заголовке.
Так вот: первая таблица отрабатывает на ять, а на второй, в момент t.Split вываливается ошибка: Run-time error '-2147024809 (80070057)' Объект был удален.
По простоте душевной я решил, что таблица действительно удалилась, и вставил перед t.split строчку Set t = cm.Scope.Tables(1),
которая ничего не дала. Пошаговое исполнение выявило, что прямо перед исполнением проблемного t.split t указывает на валидную таблицу, в окне immediate правильно исполняется ?t.rows.count.

Порыскал в гугле, понял что ошибка скорее системная, чем vba'шная.

Может кто нибудь подсказать, как продраться сквозь эту бяку?

Код прилагаю.

Если требуется док, на котором был тест, то подскажите, как его приаттачить к сообщению.


Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
Option Explicit



Sub zzz()

Dim d As Document
Dim t As Table
Dim rcnt As Integer, rn As Integer, ccnt As Integer, cn As Integer
Dim c As Cell
Dim rng As Range
Dim n As Integer
Dim cm As Comment



    Set d = ThisDocument
    
    
    
    For Each t In d.Tables
        If (t.Cell(1, 1).Shading.BackgroundPatternColorIndex = wdRed) Then d.Comments.Add t.Range, "SplitTable"
    Next t
    
    
    
l1:

    
    For Each cm In d.Comments
        If (cm.Range = "SplitTable") Then
            Set t = cm.Scope.Tables(1)
            rcnt = t.Rows.Count
            ccnt = t.Columns.Count
            rn = 1
            cn = 1
            Set c = t.Cell(rn, cn)
            
            For rn = 1 To rcnt
                For cn = 1 To ccnt
                    If (t.Cell(rn, cn).Shading.BackgroundPatternColorIndex = wdRed) Then
                        t.Cell(rn, cn).Shading.BackgroundPatternColorIndex = wdAuto
                    Else
                        If (rn > 1 And rn < rcnt) Then
                            t.Cell(rn - 1, 1).Select
                            Selection.SelectRow
                            Selection.InsertRowsBelow 1
    
                            For n = 1 To ccnt
                                t.Cell(rn, n).Range.Text = VBA.Trim(VBA.Str(n))
                            Next n
                            
                            Set t = cm.Scope.Tables(1)
                            t.Split rn    '<----------------------------ОШИБКА ПРОИСХОДИТ ЗДЕСЬ!!!!!!!!!!!!!!!!!!---------------------
                            
                            cm.Scope.Tables(2).Cell(1, 1).Select
                            Selection.SelectRow
                            Selection.Rows.HeadingFormat = True
                            
                            Set rng = t.Range
                            rng.Collapse wdCollapseEnd
                            rng.Paragraphs(1).Range.Font.Size = 1
                            rng.Paragraphs(1).Format.LineSpacingRule = wdLineSpaceExactly
                            rng.Paragraphs(1).Format.LineSpacing = 0.7
                            rng.Paragraphs(1).Format.SpaceAfter = 0
                            rng.Paragraphs(1).Format.SpaceBefore = 0
                            t.Borders(wdBorderBottom).Visible = False
                            cm.DeleteRecursively
                            GoTo l1
                        End If
                    End If
                Next cn
            Next rn
        End If

    Next cm
    

    


End Sub



Заранее огромное спасибо всем откликнувшимся.
...
Рейтинг: 0 / 0
13.08.2020, 22:48
    #39989587
iMerlin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime error 80070057
Вдогонку: увидел как приложить файл, прикладываю doc.
...
Рейтинг: 0 / 0
13.08.2020, 23:28
    #39989607
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime error 80070057
Удаление объектов из коллекции при ее итерировании через foreach ни к чему хорошему никогда не приводит.

Для безопасного удаления в таких случаях используется for, причем от конечного индекса элемента к начальному
...
Рейтинг: 0 / 0
13.08.2020, 23:30
    #39989610
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime error 80070057
Хотя, вижу GoTo l1
Это, конечно, жесть, но значит дело не в этом
...
Рейтинг: 0 / 0
13.08.2020, 23:59
    #39989618
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime error 80070057
iMerlin
Порыскал в гугле, понял что ошибка скорее системная, чем vba'шная.
Может кто нибудь подсказать, как продраться сквозь эту бяку?
но всё же, раз такое дело, попробуй цикл с конца без goto
...
Рейтинг: 0 / 0
14.08.2020, 09:51
    #39989673
iMerlin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime error 80070057
Shocker.Pro
но всё же, раз такое дело, попробуй цикл с конца без goto


Увы, как и предполагалось, все то же самое на том же самом месте. Да и какое отношение цикл по коллекции комментариев который Вам не понравился имеет к разрезанию таблицы, где происходит ошибка?
...
Рейтинг: 0 / 0
14.08.2020, 09:55
    #39989676
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime error 80070057
iMerlin
Да и какое отношение цикл по коллекции комментариев
я исхожу из этого
iMerlin
Код: vbnet
1.
cm.DeleteRecursively

iMerlin
Объект был удален.
возможно, там что-то связано с асинхронностью этого удаления. Можно исправленный код или новый файл?
...
Рейтинг: 0 / 0
14.08.2020, 09:56
    #39989677
iMerlin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime error 80070057
Все, решил. Всем, кто потратил время большое спасибо.
В чем конкретно ошибка так и не понял, подозреваю, что из-за объединенных ячеек таблицы где-то внутри функции splittable(n) при попытке обратиться к строке n идет неперехваченная разработчиками Word ошибка, перехватывается где - то дальше по стеку и номер ошибки не соответствует тому, что реально ее вызвало.
Решил обращением к Selection.SplitTable.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Runtime error 80070057 / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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