(Vba)Ms Word:大约255个字符的限制

时间:2016-02-23 16:24:38

标签: forms vba ms-word

我是编程的新手,我正在尝试将表单字段的内容复制到同一Word文档中的另一个表单字段,如下所示:

Sub Copyfield()
Dim Temp As String
Temp = ActiveDocument.FormFields("Field1").Result
ActiveDocument.FormFields("Field2").Result = Temp
End Sub

我的问题是我的“Field1”是一段超过255个字符的文本,这似乎与“结果”有关。我知道这里有一个非常相似的主题:Passing MS-Access string >255 characters to MS-Word field但我仍然没有50个声誉来评论该主题。

有人可以帮我理解如何在我的代码中实现更改吗?

2 个答案:

答案 0 :(得分:1)

嗯,这是一种可能性。由于我没有环境,因此我更容易在文档中测试文本而不是具有如此多内容的另一个表单字段。您需要相应地调整代码。

关键是获得选择"内部"表单字段,以便它不会触及"保护屏障"。只需使用FormField.Select就可以将焦点放在字段的开头,VBA将其视为" protected"。向右移动一个字符会更正该字符,然后可以将长文本分配给选择。但该领域需要有内容。

所以我的代码正在做的是"切断"进入表单字段的文本的第一个单词。这足够短,可以分配给Result属性,并让Selection向右移动。然后剩下的 - 长文本 - 可以分配给选择。

您可能希望将整个FormField.Result分配给字符串变量,然后操纵该字符串。

Sub WriteLongTextToFormField()
  Dim ffld As word.FormField
  Dim doc As word.Document
  Dim rng As word.Range
  Dim s1 As String, s2 As String

  Set doc = ActiveDocument
  'Get the long text
  Set rng = doc.Range(doc.Paragraphs(1).Range.Start, doc.Paragraphs(6).Range.End)
  'Split off a bit to go into FormField.Result
  s1 = rng.Words(1)
  rng.MoveStart wdWord, 1
  'The rest of the long text, to be assigned to Selection.Text
  s2 = rng.Text

  Set ffld = doc.FormFields("Text1")
  ffld.result = s1
  ffld.Select
  Selection.MoveRight wdCharacter, 1
  Selection.Text = s2
End Sub

答案 1 :(得分:1)

好的,在疯狂的边界3天之后,最后感谢@Cindy Meister的帮助(以及一些严肃的个人挖掘),我让它成功了。也许这对你们来说并不是什么大不了的事情,但是相信我,就像看到Matrix代码中的所有东西一样(来自电影人,电影)。

我想发布并分享,因为我试图在我们的互联网的每个角落和外星人的一部分找到它而我无法做到。所以希望它对另一个编程文盲/愚蠢的人(就像我自己)一样有用。

以下是代码:

Sub CopyField()

  Dim ffld As Word.FormField
  Dim doc As Word.Document
  Dim rng As String

  Dim s1 As String, s2 As String

  Set doc = ActiveDocument

  'Get the long text
  rng = ActiveDocument.FormFields("Field1").Result

  'Split off a bit to go into FormField.Result
  s1 = Left(rng, 4) 'Keeps the first 4 characters of the rng string starting from left to right this can be adapted
  'The rest of the long text, to be assigned to Selection.Text
  s2 = Mid(rng, 5) 'Starting from the 5th character from the left keeps the rest of the string

  Set ffld = doc.FormFields("Field2")
  ffld.Result = s1
  ffld.Select
  Selection.MoveRight wdCharacter, 1

  ActiveDocument.Unprotect 'Unprotects the document!
  Selection.Text = s2
  ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True 'Protects the document again!

  ActiveDocument.Bookmarks("Field1").Select ' "Sends cursor" back to Field1

End Sub

代码的很大一部分原本是由@Cindy Meister ...我只是根据我的情况调整了它,我有2个表单字段而不是段落。我还必须添加一些行以在某一点取消保护文档以使其工作(向专业人员询问原因)以及最终指示回到" Field1" (这是一些页面)在过程之后。最后只是为我愚蠢的家伙做了一个笔记:我在退出时添加了宏#34;"在" Field1"使流程自动化的属性。

再次感谢Cindy,我希望你再次帮助我的黑暗编程时刻! (请做)

:)