SetPlaceholderText в форме MS Word из Excel - PullRequest
0 голосов
/ 04 декабря 2018

Я пишу макрос Excel VBA для перевода MS Word Form на различные языки.Оригинальные фразы на английском языке перечислены в столбце A, а соответствующие переводы перечислены в полях B, C и т. Д. Нет проблем с заменой перевода на английский в текстовых частях формы, но я борюсь с изменением заполнителя.текст в элементах управления .(Я должен упомянуть, что я ограничен использованием Office 2010, поскольку это то, что еще есть у компании.)

Вот мой код:

Dim frm As Word.Document, cc As ContentControl
Set frm = Documents.Open("C:\[document]", False)

If frm.FormsDesign = False Then 'make sure doc is in Design Mode
  frm.ToggleFormsDesign
End If

For Each cc In frm.ContentControls
 If cc.Type = 1 Then    'this is for textboxes
   cc.SetPlaceholderText , , "phldr 1"
 Else  'this is for all other controls:  eg, drop-downs
  cc.SetPlaceholderText , , "phldr 2"
 End If
Next cc

Когда я запускаю это, текст заполнителя (который в оригинальной английской форме выглядит как «Ввод текста») полностью исчезает, без замены на предполагаемый текст-заполнитель.

Я попытался запустить код из другого Word документа (скорее изExcel) - т.е. не из самой формы - и происходит то же самое.

Но если я вставлю этот код в оригинальную форму (с соответствующими изменениями, например, с изменением "frm")"ThisDocument"), работает нормально.Другими словами, я могу успешно использовать метод SetPlaceholderText, когда модуль VBA находится в том же документе (Word).Но я действительно хочу запустить это из Excel, потому что там я буду перечислять несколько переводов.

1 Ответ

0 голосов
/ 04 декабря 2018

Это "странность" с методом SetPlaceholderText.Я не помню, чтобы я когда-либо видел причину, по которой он ведет себя так, как работает, но у меня работает следующее:

Замечания:

Это работает толькодля меня, если режим разработки не включен, поэтому я изменил это в примере кода.

SetPlaceholderText работает только вне «родительского» документа, если all параметры указаны.Передаваемое им значение может быть неопределенным (Nothing), но объектная модель хочет все три.

If doc.FormsDesign = True Then 'make sure doc is NOT in Design Mode
  doc.ToggleFormsDesign
End If

For Each cc In doc.Contentcontrols
 If cc.Type = 1 Then    'this is for textboxes
   cc.SetPlaceholderText Range:=Nothing, BuildingBlock:=Nothing, Text:="phldr 1"
 Else  'this is for all other controls:  eg, drop-downs
  cc.SetPlaceholderText Range:=Nothing, BuildingBlock:=Nothing, Text:="phldr 2"
 End If
Next cc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...