2014-03-21 3 views
0

Я уверен, что это было задано сто раз, и я сравнивал его с другими, как это, но я не вижу проблемы в своем коде. Теперь он доходит до «Next oOccurrence», и я получаю сообщение «Next Without For». Я этого не вижу ... не так ли?Next Without For?

Option Explicit 
Public i As Integer 

Sub ReplaceComponent() 
Dim NameStr As String 
Dim NewNamePath As String 

Dim NameStr2 As String 
Dim OldNamePath As String 

For i = 0 To 99 Step 1 

NameStr = Renamer.New_Name.Text    'Concatenates the full new file path 
NewNamePath = Renamer.Path_Text.Text & "\" + NameStr & "-" & Right("00" & i, 3) & ".ipt" 

NameStr2 = Renamer.Old_Name_Display.Text  'Concatenates the old file NAME 
OldNamePath = NameStr2 & "-" & Right("00" & i, 3) & ".ipt" 


Dim oOccurrence As ComponentOccurrence    'Creates a ton of errors that have been giving me a headache 
For Each oOccurrence In ThisApplication.ActiveDocument.ComponentDefinition.Occurrences 
    If oOccurrence.ReferencedDocumentDescriptor.FullDocumentName = OldNamePath Then 
    oOccurrence.Replace NewNamePath, True 
Exit For 
    End If 

    If i = 99 Then 
DeletetheDirectory       'When i = 99, deletes the temporary directory 
               'Will save the file 
               'Will close the file 
Resolve_and_Open.Show vbModal     'Reopens form 3 to select the next assembly 
    Else: Next oOccurrence 
    Next i 
    End If 

End Sub 
+1

Вы не можете сделать это таким образом: 'Else: Next i'. А также это не имеет для меня никакого смысла: «Еще: следующее oOccurrence» и следующая строка «Next i». Что вы собираетесь достичь с помощью тёмных линий? –

+0

Отредактировано это до того, как это было до того, как я начал общаться с ним больше. Я просто пытаюсь заставить его перейти к следующему вхождению части (скажем, две части из той же части в группе) для замены, а затем перейти к следующему i. Итак, скажем, есть два PrettyPonies-001 и один PrettyPonies-002. Раньше их называли UglyPonies-001 и UglyPonies-002. Программа входит и заменяет UglyPonies-001 на PrettyPonies-001, переходит к следующему вступлению PrettyPonies-001 и меняет его, а затем добавляет i + 1 и ищет UglyPonies-002 для замены PrettyPonies-002. – meer2kat

+0

Я действительно не знаю, что вы подразумеваете под словом 'Else: Next oOccurrence',' Next i', поэтому я уверен, что компилятор тоже этого не делает. – Boann

ответ

1

Я думаю, что ваша проблема в том, что у вас есть End If after Next i. Сначала нужно закрыть If i = 99, и нет необходимости в Else вообще, так как вы должны зацикливаться независимо от того, i = 99 или нет.

If i = 99 Then 
     DeletetheDirectory           
     Resolve_and_Open.Show vbModal    
    End if 
    Next oOccurrence 
Next i 
+0

Хорошо, что очистил эту ошибку. Открыл совершенно новую проблему, но она очистила эту ошибку :) – meer2kat

1

Я не совсем уверен, что вы пытаетесь сделать, но, возможно, следующее переформатирование поможет.

Я не могу запустить ваш код, потому что я не знаю, что такое Renamer. Можете ли вы просто объяснить две петли и что вы, когда хотите, чтобы они закончились?

Option Explicit 
Public i As Integer 

Sub ReplaceComponent() 
    Dim NameStr As String 
    Dim NewNamePath As String 

    Dim NameStr2 As String 
    Dim OldNamePath As String 

    For i = 0 To 99 Step 1 

     'Concatenates the full new file path 
     NameStr = Renamer.New_Name.Text 
     NewNamePath = Renamer.Path_Text.Text & "\" + NameStr & "-" & Right("00" & i, 3) & ".ipt" 

     'Concatenates the old file NAME 
     NameStr2 = Renamer.Old_Name_Display.Text 
     OldNamePath = NameStr2 & "-" & Right("00" & i, 3) & ".ipt" 

     'Creates a ton of errors that have been giving me a headache 
     Dim invAD 
     Set invAD = ThisApplication.ActiveDocument 
     Dim oOccurrence As ComponentOccurrence 
     Set oOccurrence = invAD.ComponentDefinition.ActiveOccurrence 

     For Each oOccurrence In ThisApplication.ActiveDocument.ComponentDefinition.Occurrences 
      If oOccurrence.ReferencedDocumentDescriptor.FullDocumentName = OldNamePath Then 
       oOccurrence.Replace NewNamePath, True 
       Exit For 
      End If 

      If i = 99 Then 
       'When i = 99, deletes the temporary directory 
       DeletetheDirectory 

       'Reopens form 3 to select the next assembly 
       Resolve_and_Open.Show vbModal 
       Exit For 
      End If 
     Next oOccurrence 
    Next i 

End Sub 
+0

«... Я просто пытаюсь заставить его перейти к следующему вхождению части (скажем, что две части той же части в группе) заменить, а затем перейти к следующему i. Итак, скажем, там это два из PrettyPonies-001 и один PrettyPonies-002. Они назывались UglyPonies-001 и UglyPonies-002. Программа входит и заменяет UglyPonies-001 на PrettyPonies-001, переходит к следующему вступлению PrettyPonies-001 и изменяется , а затем добавляет i + 1 и ищет UglyPonies-002 для замены PrettyPonies-002. " Ответит ли этот вопрос – meer2kat

+0

на ваш вопрос? Renamer - это форма, которая переименовывает эти файлы. Он ссылается на старые и новые имена префиксов и конкатенирует их имена пути/файла оттуда :) – meer2kat

+0

Когда я запускаю вашу версию, он возвращает меня к моей исходной проблеме (опубликовано в другом вопросе), где я получаю ошибку времени выполнения 91, утверждая, что oОцикл не установлен. Петля ошибок никогда не закончится hahaha – meer2kat

Смежные вопросы