Man musst überhaupt nicht auf ein Blatt wechseln um dessen Daten zu manipulieren.
Worksheets("Tabelle2").Range("B2")
greift auf die Zelle B2 im Blatt 'Tabelle2' zu. Egal ob gerade ein anderes Blatt aktiv/sichtbar ist oder nicht.
Genau das habe ich dir auch in dem älteren Post auch gesagt. ;)
Wenn du allerdings in einem Modul (nicht Klassenmodul ! ) sowas schreibst wie
Range("B2")
oder
Cells(1, 2)
du also kein Tabellenblatt angibst, dann bezieht sich dieser Ausdruck auf das aktive/sichtbare Blatt. Dieses Verhalten ist in der Informatik als Sichtbarkeitsbereich (Scope) bekannt.
Pragmatishes Beispiel: Stell dir vor, als ob du Zuhause in deiner Wohnung einen Fernseher mit Fernbedienung hast und dein bester Kumpel hat exakt den gleichen bei sich Zuhause rumstehen. Wenn du jetzt in deiner Wohnung die Fernbedienung betätigst, bedienst du damit deinen Fernseher.
Nimmst du deine Fernbedienung jetzt mit zu deinem Kumpel in seine Wohnng und benutzt deine Fernbedienung dort, dann bedienst du damit seinen Fernseher - eben WEIL die Wohnung deines Kumpels in jenem Moment der Sichtbarkeitsbereich deiner Fernbedienung ist und nicht mehr deine Wohnung.
Stehst du mit der Fernbedienung auf der Straße, dann bedienst du damit (mal technische Details außen vor gelassen) den nächst gelegenen Fernseher des gleichen Bautyps. Das wäre dann der Fall, wie VBA reagiert wenn du in einem Modul einfach nur Cells(1, 2) schreibst. Das wurde in VBA einfach so implementiert.
Nun solltest du auch verstanden haben, dass ein Activate nicht notwendig ist und damit auch dein Problem mit dem Laufzeitfehler im letzten Durchgang nichtig ist. :)
Grüße
|