编辑:预先感谢您的帮助。我想遍历一个数组并基于创建一个字符串,直到不再满足条件为止。我认为我当前的代码创建了一个无限循环。
我在数组中有以下内容(小节以“-”开头)。注意:请忽略引号-破折号格式为项目符号,因此必须将其插入以终止该操作。
“-Subsection2”
“-Subsection3”
“第二部分”
“-第4节”
“第三部分”
“-第5节”
我想创建一个新字符串,该字符串只存储以“-”开头的那些字符串/数组插槽,直到并排除不以“-”开头的下一个字符串/数组插槽。我想要的结果字符串是:
“-Subsection1”
“-Subsection2”
“-Subsection3”
(但不包括“-第4小节”和“-5小节”)
基本上,我希望其余的小节都位于同一“主”部分中。
以下是我对此的尝试:
Dim testArray() As Variant
Dim count1 As Integer
Dim CurrentSectionIndex as Integer
CurrentSectionIndex = ActivePresentation.Slides(i).sectionIndex
count1 = ActivePresentation.SectionProperties.Count - CurrentSectionIndex
'clear previous array (I am looping through slides)
Erase testArray
' size the array
ReDim testArray(1 To count1)
'Fill the array
For n = 1 To count1
testArray(n) = ActivePresentation.SectionProperties.Name(CurrentSectionIndex + n)
Next n
Dim AllPostSections As String
Dim PostSections As String
For m = LBound(testArray) To UBound(testArray)
Do While testArray(m) Like "-*"
PostSections = testArray(m)
Loop
AllPostSections = AllPostSections & PostSections & vbNewLine
Next m
任何帮助将不胜感激!
答案 0 :(得分:0)
关于为什么要使用“ Do While / Until”循环的基本假设是正确的,但是实现不正确。对于您要实现的任务,您无需使用Do While循环,因为您需要的循环是For M循环。然后,在For循环中,您所需要做的就是使用If语句测试所需字符串的组合。如果您愿意,可以用Do while循环替换for next循环,但实际上,使用集合更容易实现所需的目标。您可以以与数组相同的方式为集合中的项目建立索引,因此,除非您查看变量定义,否则可以知道my_array(1)是使用数组还是集合。
下面的代码将收集您所有标题(测试数组)的集合,并在您只有串联的子标题的地方产生一个新的集合。
Option Explicit
Dim my_headings As Collection
Dim my_heading As Variant
Dim my_subheadings As Collection
Dim my_collector As String
my_collector = vbNullString
' fill the my_heading collection
Set my_subheadings = New Collection
For Each my_heading In my_headings
If my_heading Like "-*" Then
my_collector = my_collector & my_heading & vbCrLf
Else
If Len(my_collector) > 0 Then
my_sub_headings.Add my_collector
my_collector = vbNullString
End If
End If
Next
编辑:这与上面的逻辑相同,但是用下一个do while循环代替了for next循环。希望这将使您对do While循环的作用一清二楚。
Dim my_headings As Collection
Dim my_subheadings As Collection
Dim my_collector As String
Dim my_index As Long
my_collector = vbNullString
' fill the my_heading collection
Set my_subheadings = New Collection
my_index = 1
Do While my_index <= my_headings.Count
If my_headings(my_index) Like "-*" Then
my_collector = my_collector & my_heading & vbCrLf
Else
If Len(my_collector) > 0 Then
my_sub_headings.Add my_collector
my_collector = vbNullString
End If
End If
my_index=my_index+1
Loop