Word消失的文本

时间:2016-01-08 12:39:06

标签: vba ms-word word-vba

我目前正在Word 2010中设置一些MS Word模板并遇到问题,文本在段落末尾突然消失。

问题只出现在某些特定场景中,但我已经体验到它可以通过很多不同的方式重新创建。但是,我还没有找到发生这种情况的确切原因。因此,我想找到具体的原因,使问题发生,以避免它。

似乎包装表的存在,页眉中的内容和一行的某个长度的组合可以调用该问题。

要重新创建出现此问题的文档,请按照以下步骤操作:

  1. 在Word 2010中打开一个新文档。
  2. 将以下代码复制到VBA编辑器中的新模块中。
  3. 运行A_ReplicateScenario宏以在文档中插入示例内容。
  4. 将光标放在第3行的末尾(靠近边距的行)。
  5. 在点后面键入一个新句子,以空格开头。
  6. 您输入的文字将在达到保证金时消失。

    如果例如从原始文本中删除字符(即从行的开头)或者如果进行格式化更改(例如,清除格式),则将显示该文本。 Word中的“全部显示”设置有时也可以显示文本,但只有在激活“全部显示”时才会显示。其他时候Word将显示无法选择的“幻影”双线。

    可以在此处查看复制问题的简短视频:https://youtu.be/Bqp9STDRkXc

    Sub A_ReplicateScenario()
    
        Call SetUpNormalStyle
        Call InsertBodyTextLines
        Call InsertHeaderTextLines
        Call InsertWrappedTables
        Call SetUpMargins
        Call InsertExampleBodyText
    
    End Sub
    
    Sub SetUpNormalStyle()
    
        With ActiveDocument.Styles("Normal").Font
            .Name = "Arial"
            .Size = 10
        End With
        With ActiveDocument.Styles("Normal").ParagraphFormat
            .SpaceAfter = 0
            .LineSpacingRule = wdLineSpaceAtLeast
            .LineSpacing = 12
        End With
    
    End Sub
    
    Sub InsertBodyTextLines()
    
        For i = 1 To 4
            Selection.TypeParagraph
        Next
    
    End Sub
    
    Sub InsertHeaderTextLines()
    
        If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
            ActiveWindow.Panes(2).Close
        End If
        If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
            ActivePane.View.Type = wdOutlineView Then
            ActiveWindow.ActivePane.View.Type = wdPrintView
        End If
    
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    
        For i = 1 To 26
            Selection.TypeParagraph
        Next
    
        ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    
    End Sub
    
    Sub InsertWrappedTables()
    
        Selection.HomeKey Unit:=wdStory
    
        ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=1, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitFixed
        With Selection.Tables(1).Rows
            .WrapAroundText = True
            .HorizontalPosition = CentimetersToPoints(2)
            .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
            .VerticalPosition = CentimetersToPoints(4.5)
            .RelativeVerticalPosition = wdRelativeVerticalPositionPage
        End With
        Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
        Selection.Tables(1).Columns(1).PreferredWidth = CentimetersToPoints(11)
    
        Selection.MoveDown Unit:=wdLine, Count:=1
    
        ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=1, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitFixed
        With Selection.Tables(1).Rows
            .WrapAroundText = True
            .HorizontalPosition = CentimetersToPoints(10)
            .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
            .VerticalPosition = CentimetersToPoints(8)
            .RelativeVerticalPosition = wdRelativeVerticalPositionPage
        End With
        Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
        Selection.Tables(1).Columns(1).PreferredWidth = CentimetersToPoints(9)
    
    End Sub
    
    Sub SetUpMargins()
    
        With ActiveDocument.PageSetup
            .TopMargin = CentimetersToPoints(3.8)
            .BottomMargin = CentimetersToPoints(2.8)
            .LeftMargin = CentimetersToPoints(2.3)
            .RightMargin = CentimetersToPoints(1.5)
        End With
    
    End Sub
    
    Sub InsertExampleBodyText()
    
        With Selection
            .HomeKey Unit:=wdStory
            .MoveDown Unit:=wdLine, Count:=3
    
            .TypeText Text:="Ouwouwouwoiwoiuwoiuwoiuwoiuwoiuwoiuwoiw oiwu oiwu owiu woiu woiuw oiwu owiu owiu ww."
            .TypeParagraph
            .TypeText Text:="Woiuwoiuwoiuw."
        End With
    
    End Sub
    

1 个答案:

答案 0 :(得分:0)

问题与格式化为在文本周围浮动的表有关。 Word具有浮动对象问题的悠久历史。尽管Word多年来经历了很多改进,但您仍可能遇到问题,尤其是浮动表。

如果更改第二个表格的格式(通过表格属性)并将文本换行设置为,则错误消失(YMMV)。

我的建议是尽可能避免使用浮动表。