2016-08-08 6 views
0

Ich habe den folgenden Code ein, der bis zum Ende des MsgBox funktioniert gut:VBA Fehler 91 nach korrekter Ausführung mit für jede Schleife und Zell kommentiert

Sub CommentsAsFootnotes(myTemplate As Variant, ByRef footnotespage1 As String, ByRef footnotespage2 As String) 
Dim rngTemp As Range 
Dim rngComment As Range 
Dim footnote As String 
Dim i As Integer 

    On Error Resume Next 
    Set rngComment = myTemplate.Sheets("Seite 1 ").Range("B14:T35").SpecialCells(xlCellTypeComments) 
    On Error GoTo 0 
    i = 1 
    'If rngComment is Nothing 
     'Exit Sub 
    'End If 
    For Each rngTemp In rngComment 
     rngTemp.value = rngTemp.value & CStr(i) 
     rngTemp.Characters(Start:=Len(rngTemp.value), Length:=1).Font.Superscript = True 
     MsgBox rngTemp.Comment.Text 
     ' error thrown here 
    Next rngTemp 

    footnotespage1 = footnote 

End Sub 

Das Meldungsfeld wird angezeigt mit dem richtigen Inhalt. Wenn ich jedoch auf "OK" klicke, wird ein Fehler ausgelöst "Fehler 91, Objektvariable oder mit Blockvariable nicht gesetzt" und der Debugger markiert die Zeile mit dem Meldungsfeld.

Haben Sie eine Idee, was diesen Fehler verursachen könnte?

+0

Sein für mich funktioniert, gibt es ein anderen Inhalte Sie können hinzufügen, dass das helfen könnte? –

+1

Als Antwort auf Shais richtige Umgehung für diese Antwort: Der Grund dafür basiert auf "fusionierten Zellen". Wenn Sie einen Kommentar zu einer verbundenen Zelle haben, erhalten Sie mit "SpecialCells (xlCellTypeComments)" einen Bereich, der alle Zellen enthält, die in dieser verbundenen Zelle enthalten sind, aber nur einer von ihnen enthält einen Kommentar. Es ist also generell eine gute Idee, die von Shai vorgeschlagene Reichweite zu verdoppeln. – derMax

Antwort

2

Es ist, weil der Strombereich keinen Kommentar innen hat, ein IF hinzufügen, wenn die Zelle keinen Kommentar innen, wie dies hat:

If rngTemp.Comment Is Nothing Then 
    MsgBox "No Comment found !" 
Else 
    MsgBox rngTemp.Comment.Text 
End If 
+1

Aber das OP sagte, der Code kam in die Schleife und hinter der 'MsgBox'. Ich denke, das ist etwas, was zu tun ist, wenn eine der Zellen in 'rngComment' (die durch die Auswahl aller kommentierten Zellen gefüllt wird) irgendeine Form einer speziellen Eigenschaft hat. Es ist fast so, als ob es gelöscht wurde, nachdem 'rngComment' gemacht wurde. –

+0

@Shairado, ich glaube nicht, dass das korrekt ist, da der OP den 'rngComment'-Bereich durchläuft, der vorher mit der' .SpecialCells (xlCellTypeComments) -Methode eingestellt wurde, so dass es entweder 'Nothing' ist (und somit den Code stoppte) wenn Sie die 'For Each ...'-Schleife aufrufen oder ein gültiges' Range'-Objekt ist, das Zellen mit einem Kommentar tatsächlich dort sammelt! – user3598756

+0

Nein, eigentlich, über Lösung gelöst. Der Debugger wurde wahrscheinlich in der nächsten Iteration gestoppt. Warum das ist - ich habe keine Ahnung, weil ich spezielle Zellen benutzt habe ... – derMax