powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Runtime error 80070057
8 сообщений из 8, страница 1 из 1
Runtime error 80070057
    #39989586
iMerlin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Runtime error 80070057
    #39989587
iMerlin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вдогонку: увидел как приложить файл, прикладываю doc.
...
Рейтинг: 0 / 0
Runtime error 80070057
    #39989607
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удаление объектов из коллекции при ее итерировании через foreach ни к чему хорошему никогда не приводит.

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


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

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


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