Я работаю в офисе службы по делам инвалидов, и мы часто делаем одну вещь - увеличиваем документы Word, которые были преобразованы из PDF. Чтобы упростить процесс, я работал над «написанием» макроса (в основном копированием и вставкой битов из другого места или из устройства записи макросов), чтобы сделать такие вещи, как удаление лишних разрывов абзаца или «нормализация» стиля шрифта / размера / интервала /etc.
Часто, когда мы конвертируем файл PDF в файл Word, мы получаем часть текста в текстовых полях. Я хотел бы иметь возможность удалить текст из всех текстовых полей и заменить их на простой текст. Меня не волнует сохранение форматирования текста или сохранение декоративных линий, а что нет. Я нашел некоторый код в моем поиске, который работает для текстовых полей, которые не сгруппированы, но у меня есть документ, в котором текстовые поля сгруппированы.
Я нашел макрос, который должен разгруппировать фигуры, включая текстовые поля. Но когда я запускаю макрос, строка разгруппировки выдает сообщение об ошибке; «Ошибка времени выполнения '-2147024891 (80070005)': группа заблокирована и ее нельзя разгруппировать" Я могу вручную выбрать и разгруппировать текстовые поля, ЕСЛИ Я не установил их вручную, чтобы они были встроены в документ, после чего " «Разгруппировка» выделена серым цветом на вкладке. Если я просто копирую текстовое поле в новый документ и запускаю макрос разгруппировки, он работает как задумано, но только после того, как я вручную установил для группы что-то отличное от встроенного. Если я оставлю его как встроенный, макрос выдаст то же сообщение об ошибке.
Код, о котором идет речь:
Sub Ungroup
Dim xNmbr As Integer
Dim strText As String
With ActiveDocument
For xNmbr = .Shapes.Count To 1 Step -1
.Shapes(xNmbr).Select
.Shapes(xNmbr).ConvertToInlineShape
.Shapes(xNmbr).Ungroup
Next
End With
End Sub
Кто-нибудь знает, что здесь происходит? Я знаю, что здесь есть еще один вопрос, который спрашивает об одном и том же сообщении об ошибке, но они работают с фигурами, которые не являются текстовыми, поэтому их решение не работает для меня.
Вот пример файла, который совпадает с тем, который я пытался редактировать (я просто изменил текст; структура та же).
https://www.dropbox.com/s/z6ovashu3qv43i9/Fake%20Book.docx?dl=0
Заранее спасибо!
ETA - вот некоторый код, который отлично работает с моим примером документа, но в других документах, на которых я его пробовал, текстовые поля удаляются, а не разгруппируются.
Sub Ungroup()
Dim xNmbr As Integer
With ActiveDocument
For xNmbr = .Shapes.Count To 1 Step -1
.Shapes(xNmbr).Select
Set thisshape = .Shapes(xNmbr)
With thisshape.WrapFormat
.Type = wdWrapSquare
End With
Next
End With
Dim mydocument As Document
Set mydocument = ActiveDocument
Dim shp As Shape
For Each shp In mydocument.Shapes
If shp.Type = msoGroup Then shp.Ungroup
Next shp
End Sub