2016-09-25 3 views
1

, поэтому мне нужно заполнить массив с помощью InputBox, а затем в массиве отсортировать его по алфавиту и затем вывести его в документ текущего слова. У меня это почти самое полное, проблема в том, что он выводит последнее слово в документ. Я предполагаю, что мой цикл ошибочен, но я не могу найти документацию VBA, чтобы сделать это, чтобы спасти мою жизнь. СпасибоVBA выводит содержимое массива в документ Word

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 

Это проблема, я c annot выводит весь массив на документ слова. Я нашел много документации о том, как это сделать, в таблицу 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 
+1

'Output_List_To_Document' имеет три вложенных цикла. Это намеренно? Ваше внутреннее «Для каждого» должно быть достаточно. Кроме того, рассмотрите возможность использования функции 'Join', с' vbCrLf' в качестве разделителя для создания полной строки, а затем вы можете добавить весь массив за один раз. –

ответ

2

Вы переписываете ActiveDocument.Range каждый раз через петлю. Если вы хотите добавить к концу этого, вам нужно свернуть диапазон в это конечное положение:

Sub Output_List_To_Document(newListArray() As String) 
    Dim inputWord As Variant 
    Dim i As Long 
    Dim j As Long 

    Dim insertPos As Range 
    Set insertPos = ActiveDocument.Range 

    For i = LBound(newListArray) To UBound(newListArray) 
     For j = i To UBound(newListArray) 
      For Each inputWord In newListArray 
       insertPos.Collapse wdCollapseEnd 
       insertPos = inputWord & vbCrLf 
      Next 
     Next j 
    Next i 
End Sub 

Примечание - Не понятно, почему вы перекручивание через массив с 3-х вложенных циклов , Если вам нужно только написать каждое слово один раз, я подозреваю, что ты на самом деле ищете что-то вроде этого:

Sub Output_List_To_Document(newListArray() As String) 
    Dim insertPos As Range 
    Set insertPos = ActiveDocument.Range 

    Dim inputWord As Variant 
    For Each inputWord In newListArray 
     insertPos.Collapse wdCollapseEnd 'Value 0, Can ignore writing it as well 
     insertPos = inputWord & vbCrLf 
    Next 
End Sub 
Смежные вопросы