没有隐藏文字的Word VBA“Saveas”?

时间:2015-04-22 15:11:46

标签: vba ms-word

有没有办法以编程方式从Microsoft Word .docm保存而不包含隐藏文本?

我让用户单击一个按钮来执行其他一些操作,然后打开一个另存为对话框,将.docm文件保存为.html文件,在Word VB编辑器中使用它:

With Dialogs(wdDialogFileSaveAs)
    .Format = wdFormatHTML
    .Show
End With

它会保存页面上显示的所有内容,但也会保存当前隐藏的段落。 (它们也隐藏在html页面的Web显示中,但隐藏的内容仍然在.html中,标有mso-hideall标签。)我只想保存不是的内容隐藏,如果可能的话,所以它根本不在html文件中。

我没有看到任何提供here的内容,但我想知道是否有人可能知道使用VB执行此操作的方法。

我一直在努力使用VBA删除隐藏的文本,但它很棘手,因为你必须首先显示它,然后选择它,然后删除它,每次隐藏的部分是不同的,这取决于用户选择的内容在Word .docm文档中。

更新

这是我现在的完整代码:

Public strActiveOption As String

Private Sub OptionConcept_Click()
strActiveOption = "OptionConcept"

Bookmarks("ConceptText").Range.Font.Hidden = False
Bookmarks("TaskText").Range.Font.Hidden = True
Bookmarks("RefText").Range.Font.Hidden = True




End Sub

Private Sub OptionTask_Click()
strActiveOption = "OptionTask"
Bookmarks("TaskText").Range.Font.Hidden = False
Bookmarks("ConceptText").Range.Font.Hidden = True
Bookmarks("RefText").Range.Font.Hidden = True


End Sub



Private Sub OptionReference_Click()
strActiveOption = "OptionReference"
Bookmarks("RefText").Range.Font.Hidden = False
Bookmarks("ConceptText").Range.Font.Hidden = True
Bookmarks("TaskText").Range.Font.Hidden = True


End Sub

Private Sub formatSave_Click()
'Concept Content = 3
'Task Steps = 4
'ReferenceData = 5

Select Case strActiveOption
 Case "OptionConcept"
 ActiveDocument.ContentControls(4).Delete
 ActiveDocument.ContentControls(5).Delete
Case "OptionTask"
 ActiveDocument.ContentControls(3).Delete
 ActiveDocument.ContentControls(5).Delete
Case "OptionReference"
 ActiveDocument.ContentControls(3).Delete
 ActiveDocument.ContentControls(4).Delete
Case Else
    MsgBox "Invalid option"
End Select

With Dialogs(wdDialogFileSaveAs)
    .Format = wdFormatHTML
    .Show
End With
End Sub

它的作用:页面上有三个选项按钮,内容控件隐藏或取消隐藏,具体取决于用户选择的内容。 Private Sub formatSave_Click()中的代码读取了哪一个,并尝试删除相应的隐藏文本。

问题:

第一个潜艇中的所有东西都完美无缺,直至Private Sub formatSave_Click()。之后,它似乎无法看到隐藏的内容控件以便删除它们。我尝试在'Private Sub formatSave_Click()'

之后添加它
ActiveWindow.View.ShowHiddenText = True

但它似乎不起作用。

通过标签而不是索引选择内容控件也会容易得多。我试过这个,没有成功:

ActiveDocument.SelectContentControlsByTag("TaskSteps").Delete

“TaskSteps”是control(4)的标记名称。

更新II

(来自stuartd的建议)

这不能删除隐藏文本,但也许我没有正确格式化?

Private Sub formatSave_Click()

Selection.Find.ClearFormatting
Selection.Find.Font.Hidden = True
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
End With
Selection.Find.Execute Replace:=wdReplaceAll

End Sub

SOLUTION:

好的,我的原始代码可以使用了。这就是发生的事情:

VB删除了ContentControls(4)

我接下来告诉它删除ContentControls(5)

现在除了(4)已删除,ContentControls(5)现在是ContentControls(4)。

所以我更改了编号,如下所示,现在它可以工作,并删除正确的编号:

Private Sub formatSave_Click()
'Concept Content = 3
'Task Steps = 4
'ReferenceData = 5

ActiveDocument.ActiveWindow.View.ShowHiddenText = True

Select Case strActiveOption
    Case "OptionConcept"
     ActiveDocument.ContentControls(4).Delete
     ActiveDocument.ContentControls(4).Delete
    Case "OptionTask"
     ActiveDocument.ContentControls(3).Delete
     ActiveDocument.ContentControls(4).Delete
    Case "OptionReference"
     ActiveDocument.ContentControls(3).Delete
     ActiveDocument.ContentControls(3).Delete
    Case Else
        MsgBox "Invalid option"
End Select

End Sub

我看了调试告诉我的内容,停止了每个系列的第二次删除,我终于意识到发生了什么。

感谢所有建议。

0 个答案:

没有答案