【发布时间】:2019-05-20 09:41:12
【问题描述】:
我是 VBA 新手,我正在尝试从 VBA 中由章节内容组成的 400 页字文档创建一个数组。数组的每个元素都应包含从粗体章节标题到下一章节标题的所有段落。将其表述为章节标题之间的信息可能会更好。
章节标题是一个总是加粗的句子(也是文档中唯一加粗的部分)。章节描述后面的信息可能有多个段落和项目符号信息,但在少数情况下也可能完全为空。在章节内容为空的情况下,我希望存储某种空白条目。
我已经设法创建了一个数组,其中每个段落都作为数组元素。但是,由于有时每章有多个段落和项目符号部分,因此数组中的元素数量大于章节数量。该数组还将章节标题存储为它们自己的元素(尽管我想出了如何通过类似的比较从数组中删除标题)。今天研究了几个小时后,我有点迷失了。
将“粗体章节标题”之间的所有信息存储为数组中的元素的方法是什么?
非常感谢您的帮助!
Sub addUnderlinedWordsToArray()
On Error GoTo errhand:
Dim myWords() As String
Dim i As Long
Dim myDoc As Document: Set myDoc = ActiveDocument ' Change as needed
Dim aRange As Range: Set aRange = myDoc.Content
Dim sRanges As StoryRanges: Set sRanges = myDoc.StoryRanges
Dim ArrayCounter As Long: ArrayCounter = 0 ' counter for items added to the array
Dim Sentence As Range
Dim Paragraph As Range
Dim w As Variant
Dim myDescs() As String
Dim x As Variant
Application.ScreenUpdating = False
ReDim myWords(aRange.Words.Count) ' set a array as large as the
' number of words in the doc
For Each Paragraph In ActiveDocument.StoryRanges
For Each w In ActiveDocument.Paragraphs
myWords(ArrayCounter) = w
ArrayCounter = ArrayCounter + 1
Next
Next
On Error GoTo 0
Set myDoc = Nothing
Set aRange = Nothing
Set sRanges = Nothing
Set Ex0 = New Excel.Application
Set Wb0 = Ex0.Workbooks.Add
Ex0.Visible = True
Wb0.Sheets(1).Range("A1").Resize(UBound(myWords) + 1, 1) = WorksheetFunction.Transpose(myWords)
Application.ScreenUpdating = True
Debug.Print UBound(myWords())
Exit Sub
errhand:
Application.ScreenUpdating = True
MsgBox "An unexpected error has occurred." _
& vbCrLf & "Please note and report the following information." _
& vbCrLf & "Subroutine Name: addUnderlinedWordsToArray" _
& vbCrLf & "Error Number: " & Err.Number _
& vbCrLf & "Error Description: " & Err.Description _
, vbCritical, "Error!"
End Sub
【问题讨论】:
-
我昨天用数组打印的方法回复了上一个帖子中的一个答案,并告知发布者他的代码解决了这个问题。现在我学会了如何打印数组,我想打印两列(由上一个线程解决),一列带有章节标题(已解决),另一列带有章节标题之间的数据(这个问题)。随意删除多余的代码,问题应该集中在“粗体”标题之间数据的选择逻辑上。
-
如果某个答案解决了问题,请单击该答案旁边的复选标记。这将把它标记为这样,这将帮助其他人和回答的人识别它。在您获得 15 个“声誉点”后,您还可以对您认为有用的网站上的所有贡献(包括问题和答案)进行投票,这也有助于其他人认可质量。