Как обойти ограничение символов в FormFields VBA при переходе от Access к Word - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь передать содержимое полей в форме доступа в документ Word, который, используя приведенный ниже код, выполняет именно то, что мне нужно, за исключением одной небольшой проблемы с одним из полей.

.FormFields("txtReasonforReward").Result = Me![Reason for Reward]

вызывает у меня некоторые проблемы, так как я достигаю предела количества символов.

Я видел несколько примеров того, как обойти это, но я не уверен, как они работают внутримой базовый код.Я чувствую себя немного неадекватно в своем понимании VBA, поэтому я буду признателен за любые четкие советы, защищающие от идиота.

Пожалуйста, кто-нибудь может подсказать мне, как действовать.

Dim objWord As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set doc = objWord.Documents.Open(***path to file***, , True)
With doc
.FormFields("txtFirstName").Result = Me![First Name]
.FormFields("txtLastName").Result = Me![Last Name]
.FormFields("txtReasonforReward").Result = Me![Reason for Reward]
.FormFields("txtCompanyValue").Result = Me![Company Value]
.FormFields("txtRequestingManager").Result = Me![Requesting Manager]
.FormFields("txtLocation").Result = Me![Location]
.FormFields("txtJobTitle").Result = Me![Job Title]
.FormFields("txtReqMgrJobTitle").Result = Me![Requesting Manager Job Title]
.FormFields("txtMonetaryValue").Result = Me![MoneyCalculated]
.FormFields("txtDesc").Result = Me![Description]
.FormFields("txtPayroll").Result = Me![Payroll Number]
.FormFields("txtGrade").Result = Me![Grade]
.FormFields("txtLocation2").Result = Me![Location]
.FormFields("txtRequestingMgr").Result = Me![Requesting Manager]
.FormFields("txtLevelofAction").Result = Me![ValueofPayment]
.FormFields("txtGemNom").Result = Me![GemNomination]
.FormFields("txtHRID").Result = Me![ID]
.FormFields("txtPeriod").Result = Me![Period]

.Visible = True
.Activate

End With

objWord.View.ReadingLayout = True

1 Ответ

0 голосов
/ 13 февраля 2019

Word имеет ряд возможных объектов, которые можно использовать как «цели данных», одним из которых является поле формы.Закладки и элементы управления содержимым являются дополнительными (но не единственными) возможностями.

В этом случае я бы предложил записать данные в Bookmark, поскольку поле формы также является закладкой - целевой документ не будетне нужно менять.Это позволит избежать ограничения в 255 символов, которое связано с полем формы, а не с Word.

Для записи в закладку в документе, защищенном как форма (как это выглядит), необходимо снять защиту форм.Это можно восстановить записав данные.Это, вероятно, хорошая идея, так как в противном случае поля формы могут быть сброшены, что приведет к потере записанных в них данных.Это или применить технику закладки по всем направлениям, а не только к одной цели данных.

'Add objects to the declarations
Dim rng As Word.Range
Dim x As String

'Do things...

.FormFields("txtHRID").Result = Me![ID]
.FormFields("txtPeriod").Result = Me![Period]

'After writing to the form fields, add the long string of data
If doc.ProtectionType <> wdNoProtection Then
   doc.Unprotect
End If
'Get the range of the form field, based on its name
Set rng = doc.Bookmarks("txtReasonforReward").Range
'Move the starting point back one character so that the form field can be deleted. 
rng.MoveStart wdCharacter, -1
'Be sure to save this character as the deletion will remove it
x = rng.Characters.First
rng.FormFields(1).Delete
'Assign the value
rng.Text = x & Me![Reason for Reward]
'Re-instate document protection
doc.Protect wdAllowOnlyFormFields, True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...