Excel-VBA: Error 1004 nur wenn Workbook nicht aktiviert

Hallo Profis,

wenn ich folgendes ausführe:

    With Workbooks(strSourceFilename).Sheets(1)
 .Cells(1, 53).FormulaR1C1 = "=SUBSTITUTE(RC[-46]&"" ""&RC[-47],"","",""."")"
        .Cells(1, 53).AutoFill Destination:=Range("BA1:BA" & intLastUsedRow), Type:=xlFillDefault
        .Cells(1, 54).FormulaR1C1 = "=LEFT(RC[-50],6)&""20""&RIGHT(RC[-50],2)"
        .Cells(1, 54).AutoFill Destination:=Range("BB1:BB" & intLastUsedRow), Type:=xlFillDefault
 End With

funktioniert es nicht („Laufzeitfehler 1004 - Die Autofill-Methode des Range-Objektes konnte nicht ausgeführt werden“), vermutlich weil das Workbook(strSourceFilename) nicht im Vordergund ist (es ist also geöffnet, aber nicht active). Denn wenn ich im Debugging das Script vor diesem With anhalte, das Workbook(strSourceFilename) markiere und damit nach vorne hole und active setze, funktioniert das Script. Wieso ist das so? Ich dachte, die Vermeidung von Select und Acitvate ist die hohe Kunst des VBA-Codens. Wie geht’s richtig?

Danke und ein schönes Wochenende :o)
-Rob.

P. S. @ Reinhard:
Danke für Deine Hilfe. Beispiel-Datei folgt.

Hallo Rob,

sind deine Range auch aus Sheets(1)?
Dann fehlt davor jeweils der Punkt.

Gruß, Andreas

    With Workbooks(strSourceFilename).Sheets(1)
.Cells(1, 53).FormulaR1C1 = „=SUBSTITUTE(RC[-46]&“"
„“&RC[-47],"","",""."")"
        .Cells(1, 53).AutoFill Destination:=Range(„BA1:BA“
& intLastUsedRow), Type:=xlFillDefault

funktioniert es nicht („Laufzeitfehler 1004 - Die
Autofill-Methode des Range-Objektes konnte nicht ausgeführt
werden“), vermutlich weil das Workbook(strSourceFilename)
nicht im Vordergund ist (es ist also geöffnet, aber nicht
active).

Wieso ist das so? Ich dachte, die Vermeidung von Select und
Activate ist die hohe Kunst des VBA-Codens. Wie geht’s
richtig?

Hallo Rob,

das mit dem Vermeiden ist in der Tat richtig. Warum Anfänger kiloweise selektieren kannste u.a. hier nachlesen.
http://xlfaq.herber.de/xlbasics/main_sel.htm

Andreas hat dich ja schon auf die fehlenden Punkte hingewiesen. Wenn es vermutlich daran liegt ist ja deine Frage wegen Activate/Select hinfällig.

Zum Thema Activate/Select, einige wenige Vba-Funktionen können nur auf einem aktivierten Blatt ausgeführt sind. Eine Liste der wenigen Funktionen habe ich leider nicht.

Ob Autofill dazugehört kannste ja nach Punktebereinigung leicht selbst testen.

Zu Autofill, bei Formeln benutze ich das nicht. Schau mal diesen Code:
Sub tt2()
Range(Cells(1, 53), Cells(100, 53)).FormulaR1C1 = „=SUBSTITUTE(RC[-46]&“" „“&RC[-47],"","",""."")"
End Sub

Die 100 ist deine intLastUsedRow. Wobei ich diese variable nie hätte, wenn dann hätte ich lngLastUsedRow

Gruß
Reinhard

Lösung: unvollständige Objektreferenz

sind deine Range auch aus Sheets(1)?
Dann fehlt davor jeweils der Punkt.

Salu Andreas,

das wird’s sein (herrjeh). Ich teste es heute Abend.

Vielen Dank und ein schönes Wochenende :o)
-Rob.

Salu Reinhard,

das mit dem Vermeiden ist in der Tat richtig. Warum Anfänger
kiloweise selektieren kannste u.a. hier nachlesen.
http://xlfaq.herber.de/xlbasics/main_sel.htm

Andreas hat dich ja schon auf die fehlenden Punkte
hingewiesen. Wenn es vermutlich daran liegt ist ja deine Frage
wegen Activate/Select hinfällig.

Richtig. Danke…

Zum Thema Activate/Select, einige wenige Vba-Funktionen können
nur auf einem aktivierten Blatt ausgeführt sind. Eine Liste
der wenigen Funktionen habe ich leider nicht.

Ob Autofill dazugehört kannste ja nach Punktebereinigung
leicht selbst testen.

Zu Autofill, bei Formeln benutze ich das nicht. Schau mal
diesen Code:
Sub tt2()
Range(Cells(1, 53), Cells(100, 53)).FormulaR1C1 =
„=SUBSTITUTE(RC[-46]&“" „“&RC[-47],"","",""."")"
End Sub

Hmm, das führt doch zu WECHSELN, oder? Wie kann ich damit Autofill ersetzen? :o|

Die 100 ist deine intLastUsedRow. Wobei ich diese variable nie
hätte, wenn dann hätte ich lngLastUsedRow

Ah, paßt das maximale Maximum nicht mehr in Integer rein?

Vielen Dank für die prima Tipps und ein schönes Wochenende :o)
-Rob.