VBA:从数组创建选定的字符串

时间:2019-03-16 13:49:58

标签: arrays vba powerpoint do-while

编辑:预先感谢您的帮助。我想遍历一个数组并基于创建一个字符串,直到不再满足条件为止。我认为我当前的代码创建了一个无限循环。

我在数组中有以下内容(小节以“-”开头)。注意:请忽略引号-破折号格式为项目符号,因此必须将其插入以终止该操作。

“-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

任何帮助将不胜感激!

1 个答案:

答案 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