2014-11-21 148 views
0

我使用.FormFields("WordBookmarkName").Result = stringFromAccess方法將數據從MS-Access傳遞到MS-Word文檔。將MS-Access string> 255個字符傳遞到MS-Word字段

看來它只能傳遞255個字符。有什麼方法可以在MS-Word中傳遞給我的領域?

編輯:

這是代碼的簡化版本,我使用的作品確定爲255個字符:

Dim startForms As String 
Dim appWord As Word.Application 
Dim doc As Word.Document 

startForms = String(256, "x") 

Set appWord = GetObject(, "Word.Application") 'Set appWord object variable to running instance of Word. 

If Err.Number <> 0 Then 

    Set appWord = New Word.Application 'If Word isn't open, create a new instance of Word. 

End If 

Set doc = appWord.Documents.Open("C:\myFolder\MyForm.docx", , True) 

With doc 

    .FormFields("wdStartForms").Result = "" 'Clear anything currently in the form's field 
    .FormFields("wdStartForms").Result = startForms 

    .Visible = True 
    .Activate 

End With 

Set doc = Nothing 
Set appWord = Nothing 

JohnnyBones:這是我經過改編的代碼你的答案;使用ActiveDocument是行不通的,所以我繼續使用doc參考我就做,它似乎後,與256+字符來確定:

Dim startForms As String 
Dim appWord As Word.Application 
Dim doc As Word.Document 

startForms = String(256, "x") 

Set appWord = GetObject(, "Word.Application") 'Set appWord object variable to running instance of Word. 

If Err.Number <> 0 Then 

    Set appWord = New Word.Application 'If Word isn't open, create a new instance of Word. 

End If 

Set doc = appWord.Documents.Open("C:\myFolder\MyForm.docx", , True) 

With doc 

    .FormFields("wdStartForms").Result = "" 'Clear anything currently in the form's field 
    .Bookmarks("wdStartForms").Range.Fields(1).Result.Text = startForms 
    .Visible = True 
    .Activate 

End With 

Set doc = Nothing 
Set appWord = Nothing 
+1

索引通常爲1:通過FormFields,名稱/書籤通常「覆蓋」FormField,而不是其他任何東西。因此它的範圍「覆蓋」1個字段,索引是範圍中的「第n個」字段,而不是整個文檔。從理論上講,書籤可以被移動(但是可以在表單中創建一個「錯誤狀態」),理論上AFAICR可以將字段嵌套在FormField中,這可能會改變索引。但我幾乎沒有見過它。 – 2014-11-24 10:54:02

+0

ahh ok,很高興知道:)'.Fields(1)'當我的字段有255個字符時填充,但不填充256個字符。我一直在測試'String(255,「x」)'字符串(256,「x」)'。 – 2014-11-24 11:23:49

+0

實際上,它沒有填充,我剛剛評論了錯誤位 – 2014-11-24 11:40:10

回答

1

如果你使用:

Dim FmFld As FormField, Str1 As String 
Str1 = (a long string > 256 characters) 

Set FmFld = ActiveDocument.FormFields(1) 
FmFld.Result = Str1 

你會得到一個錯誤:「字符串太長」(一個荒謬的「設計」功能,因爲你可以手動完成而沒有問題!)。

相同的,如果你使用:

ActiveDocument.Formfields("Text1").Result = Str1 

你可以避開這個問題,通過使用:

ActiveDocument.Unprotect 
FmFld.Range.Fields(1).Result.Text = Str1 
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True 

或者如果你指的是按名稱formfield:

ActiveDocument.Unprotect 
ActiveDocument.Bookmarks("Text1").Range.Fields(1).Result.Text = Str1 
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True 

您也可以嘗試傳遞多個字符串並將它們連接起來,將每個字符串切分成少於255個字符的塊。

+0

謝謝約翰尼。我無法得到這個工作,雖然 - 請參閱我原來的問題編輯。 – 2014-11-24 10:13:25

+0

沒關係,我設法通過參考我製作的'.doc'參考而不是主動文檔:) – 2014-11-24 11:56:46

+4

順便說一句,除非你是Dave Rado,否則你至少應該相信這個解決方案的來源,例如http:///word.mvps.org/FAQs/MacrosVBA/SetLongFmFldResult.htm。 – 2014-11-24 15:50:22