这很容易复制....请按照我的步骤使用MS Word。
在Word文件中,创建一个相当大的表(大约五列二十行)。使用一些垃圾文本填充所有单元格。 或者,在您已有的文件中选择“大小合适”的表格。
当您的选择达到大约12行时(结果可能会有所不同),隐藏复选框会显示一个实心块以指示“混合隐藏”,并且“?Selection.Range.Font.Hidden”显示9999999表示'未定义'状态。
当选择在表格中且选择相对多的行时,.Hidden属性变得不可靠/不可读的原因是什么?在非表中选择时不会发生这种情况。这搞乱了我的一个非常好的程序。
答案 0 :(得分:0)
对于它的价值,这不是特定于表格;在具有51个空白(但在其他方面相同)段落的文档中发生完全相同的事情。如果您选择50个段落,则可以获得以下实际结果:
?selection.Range.Paragraphs.Count ' just to confirm the selection
?selection.Font.name
?selection.Range.Font.Hidden
但是一旦你选择第51段,事情就会失去定义,可以这么说。
我想,逐行循环遍历你的表(正如@jsotola所建议的那样)将是一个很好的解决方法。
要回答关于为什么会发生这种情况的问题,那么MS之外最好的人(我认为)就是推测。如果我推测我会建议在处理或存储这么多段落的详细信息时存在某种内部限制或限制。这是一个错误,我想是这样(但这只是恕我直言)。
替换有缺陷的内置功能的功能
将返回True,False或wdUndefined(9999999)的函数示例,具体取决于字体是隐藏的,可见的还是隐藏的和混合的。可见(即未定义),分别为。
请注意,wdUndefined完全有可能是一个有效的结果,因为否则可见的段落可能有一个字体隐藏的单个字符,因此该段落的字体既不是完全可见的,也不是隐藏的 - 所以它是'undefined' - 因此wdUndefined非常有效。
示例用法和输出:
?selection.Paragraphs.Count
2016
?fontIsHidden '(automatically operates on the active selection)
False
功能:
' Put this code into a STANDARD module
Function fontIsHidden() As Variant ' Variant to return True, False, wdUndefined
Dim paraSelected As Paragraph
Dim NotFirstPara As Boolean
Dim result As String
For Each paraSelected In Selection.Range.Paragraphs
' This could be done with Table.Rows instead of Paragraps
' (but would error if there was no table)
If NotFirstPara Then
If paraSelected.Previous.Range.Font.Hidden <> paraSelected.Range.Font.Hidden Then
result = wdUndefined ' this para is different to the previous paras
Exit For
End If
Else
' Setup for the first paragraph
Select Case paraSelected.Range.Font.Hidden
Case False ' 0
result = False
Case True ' -1
result = True
Case wdUndefined
result = "Undefined" ' some text in the para is visible and some is hidden
End Select
NotFirstPara = True
End If
Next paraSelected
fontIsHidden = result
End Function
答案 1 :(得分:0)
感谢所有对MS Word中的这个错误感到困惑的人。我的解决方法如下。我假设选择的隐藏性(或选择的其他属性,如.Font或.Underline)是&#34; uniform&#34; ...我可以尝试读取前10个字符的属性而不是整个选择,并仍然得到正确的答案。如果您不知道您的整个选择与您选择的前10个字符具有相同的属性,则此解决方案无法帮助您。
Function DigDeeperInto(fullSelection As Selection) As String
' This returns the truth of the hidden-ness of the *front end* of a Selection.
' This is used because Word sometimes mis-reads the hidden-ness of a whole Selection.
Dim shortRange As Range ' will hold the just the front end of the full Selection
Dim theTruth As String
Set shortRange = fullSelection.Range
shortRange.SetRange Start:=shortRange.Start + 1, End:=shortRange.Start + 10
If shortRange.Font.Hidden = wdUndefined Then theTruth = "UnDef" ' this Function failed
If shortRange.Font.Hidden = 0 Then theTruth = "Visible"
If shortRange.Font.Hidden = -1 Then theTruth = "Hidden"
DigDeeperInto = theTruth
End Function
选择一个Selection后,如果没有正确报告Selection.Font.Hidden,我会调用DigDeeperInto(Selection)函数。它只查看前10个字符并返回一个字符串&#34; Visible&#34;,&#34; Hidden&#34;或&#34; UnDef&#34;。如果它仍然返回&#34; UnDef&#34; (幸运的是,这不会发生在我身上),这表明DigDeeperInto()未能解决问题。