Ich weiß nicht genau, was Du bezweckst. Daher ist die Antwort schwierig.
Ziemlich sicher (mehrfach) falsch ist aber der Ansatz
Sheets(Array „1“, „2“).Select
mit folgend
If Cells(counter, 2) = „Rezeption“ Then
Willst Du damit etwa prüfen, ob sich in den beiden Tabellenblättern mit den Namen „1“ und „2“ gleichermaßen jeweils in der Zeile (counter), Spalte 2 der Wert „Rezeption“ befindet? Falls ja, müßte das in etwa so lauten:
'Prüfe auf Wert „Rezeption“ im 1. Tabellenblatt:
If ThisWorkbook.Sheets(„1“).Cells(counter, 2) = „Rezeption“ Then
'Falls ja, prüfe auf Wert „Rezeption“ im 2. Tabellenblatt:
If ThisWorkbook.Sheets(„2“).Cells(counter, 2) = „Rezeption“ Then
'Füge eine Zeile unterhalb ein
ThisWorkbook.Sheets(Array(„1“,„2“)).Rows(counter).Insert Shift:=xlDown
formatrows (counter)
counter = counter + 2
End If
Else
…
Meiner Meinung nach ist es nicht möglich, eine Schleife über einen Verbund mehrerer Range-Objekte durchführen. Denn Du bildest damit ein Range-Objekt aus den beiden Zellen. Was soll denn „der“ Wert in einem Verbund mehrerer Zellen sein? Sind das beide Werte hintereinander? In welcher Reihenfolge?
Du musst daher die beiden Zellen einzeln für sich auslesen wie oben dargestellt. Natürlich könntest Du auch notieren:
If …sheets(„1“).cells(counter, 2) = „Rezeption“ AND …sheets(„2“).cells(counter, 2) = „Rezeption“ Then …
Das ist persönlicher Programmierstil. Ich würde aber die zuerst g. Version bei sehr langen, komplexen Scripten vorziehen, weil das Script dabei schneller ist.
Weitere Hinweise:
Das „Selektieren“ (select hier, select da) bringt nicht nur nichts, sondern ist unprofessionell. Bezüge zu Objekten wie Zellen, etc. werden *nicht* dadurch hergestellt, dass diese vorher selected werden, sondern dadurch dass die Objekte direkt angesprochen werden. Es heißt also nicht:
Cells(1,1).select
Selection = 1
sondern gleich:
Cells(1,1) = 1
Und besser heißt es auch außerdem:
ThisWorkbook.Sheets(1).cells(1,1) = 1, weil nur dadurch ein sicherer Bezug zur Zelle A1 im ersten TB hergestellt wird. Cells(1,1) klappt nur „zufälligerweise“, wenn bzw. weil der Fokus auf TB 1 liegt.
Um nicht 100 Mal ThisWorkbook.Sheets(1)… schreiben zu müssen, wenn man sich mehrmals auf dasselbe Objekte bezieht, schreibt man eleganterweise auch besser:
With Thisworkbook.Sheets(1)
If .cells(1,1) = 1 Then
If .cells(1,2) = 2 then
.cells(1,3)=4
end if
end if
End With
Der Punkt . steht in diesem Fall als Platzhalter für den Ausdruck nach „With“
Rows(counter).Select
Selection.Insert Shift:=xlDown
Was mir noch so aufgefallen ist:
In deinem Codeschnipsel am Ende fehlt die Übergabe der Variable Counter in der Function formatrows
Außerdem ist die Funktion in der notierten Weise ziemlich sinnlos. Was und wie soll dadurch formatiert werden? Dadurch wird lediglich kurzzeitig der Cursor auf 2 Zellen ausgewählt. Richtigerweise müßte es auch zudem heißen: Array(„1“, „2“) statt („1“, „2“). Aber wozu soll das gut sein?
Gruß
p.
P.S.:
Wie bist Du gerade auf mich als „Experten“ gekommen?