【发布时间】:2016-09-25 18:04:36
【问题描述】:
所以我需要做的是使用 InputBox 填充一个数组,然后在一个数组中,按字母顺序对其进行排序,然后将其输出到当前的 word 文档。我几乎完成了它,问题是它只是将最后一个单词输出到文档中。我猜我的循环是错误的,但我找不到 VBA 文档来执行此操作以挽救我的生命。谢谢
Option Explicit
这是声明数组的主子
Sub Main()
Dim ListArr() As String
ListArr = Get_Input_List()
Call Bubble_Sort_Ascending(ListArr)
Call Output_List_To_Document(ListArr)
End Sub
获取输入并填充数组的函数
Function Get_Input_List() As String()
Dim list As String
list = InputBox("Please enter words to sort separated with a comma and no spaces", "Words")
Get_Input_List = Split(list, ",")
End Function
按字母顺序对数组进行排序
Sub Bubble_Sort_Ascending(listNewArray() As String)
Dim SrtTemp As Variant
Dim inputWord As Variant
Dim i As Long
Dim j As Long
'Alphabetize Sheet Names in Array List
For i = LBound(listNewArray) To UBound(listNewArray)
For j = i To UBound(listNewArray)
If listNewArray(i) > listNewArray(j) Then
SrtTemp = listNewArray(j)
listNewArray(j) = listNewArray(i)
listNewArray(i) = SrtTemp
End If
Next j
Next i
End Sub
这是问题所在,我无法将整个数组输出到 word 文档。我找到了大量关于如何在 Excel 电子表格中执行此操作的文档,但几乎没有任何文字。
Sub Output_List_To_Document(newListArray() As String)
Dim inputWord As Variant
Dim i As Long
Dim j As Long
For i = LBound(newListArray) To UBound(newListArray)
For j = i To UBound(newListArray)
For Each inputWord In newListArray
ActiveDocument.Range = inputWord & vbCrLf
Next
Next j
Next i
End Sub
【问题讨论】:
-
Output_List_To_Document有三个嵌套循环。这是故意的吗?你内心的For Each应该足够了。另外,可以考虑使用Join函数,以vbCrLf为分隔符构建一个完整的字符串,然后就可以一次性追加整个数组了。