Hallo theindless,
oooohhhhh mannoooo! Was für eine schwere Geburt das war um deinen Denkfehler rauszubekommen, erklär ich jetzt lieber nicht. Ich werd dir jetzt lieber deinen Denkfehler anhand deines Verfahrens- und/oder Ablauffehler vorführen.
Also, wenn ich das jetzt richtig sehe ist folgende Situation gegeben.
Tabellenblattindexnummer 0 = Übersicht. Spalte B ist dort der "Quellbereich". Spalte F ist dort der "Zielbereich" wohin die Daten aus dem Quellbereich kopiert werden.
Tabellenblattindexnummern 1 bis 4 sind deine 'Problemblätter'.
-{Die anderen lassen wir nun mal außen vor.}- Dort, in den Blättern 1 bis 4, steht z.B. in D3 folgender Zellbezug.
Das ist die Ausgangssituation. Und nun knöpfen wir uns mal dein Makro vor, und zwar Blockweise.
1. Block
Code: Alles auswählen
For i = 1 to 4
oSheet=oDoc.Sheets(i)
myColumn=oSheet.getColumns
myColumn.insertByIndex(7,1)
oQuellRange = oSheet.GetCellRangeByPosition(3,0,3,100)
oQuellRangeAdresse = oQuellRange.getRangeAddress
oZiel = oSheet.getCellByPosition(7,0)
oZielCellAdresse = oZiel.getCellAddress
oSheet.copyRange(oZielCellAdresse,oQuellRangeAdresse)
Next i
In Sheets(i) wird bei Spalte H (Index 7) eine zusätzliche Spalte eingefügt.
Nun wird der Zellbereich "D1:D101" -[GetCellRangeByPosition(3,0,3,100)]- nach "H1" -[GetCellRangeByPosition(7,0)]- kopiert. Macht also 4 Spalten nach Rechts.
Die Zelle D3, als Beispiel, mit dem Zellbezug =Übersicht.B$3 wird durch die Kopieraktion nach H3 kopiert. Und dabei passt sich der Zellbezug
vollkommen korrekt zu =Übersicht.F$3 an.
Den 2. Block -[For i = 6 to 7]- überspringen wir.
3. Block
Code: Alles auswählen
oSheet=oDoc.Sheets(0)
myColumn=oSheet.getColumns
myColumn.insertByIndex(5,1)
oQuellRange = oSheet.GetCellRangeByPosition(1,0,1,100)
oQuellRangeAdresse = oQuellRange.getRangeAddress
oZiel = oSheet.getCellByPosition(5,0)
oZielCellAdresse = oZiel.getCellAddress
oSheet.copyRange(oZielCellAdresse,oQuellRangeAdresse)
Jetzt befinden wir uns im Blatt Übersicht.
Bei der Spalte F (Index 5) wird jetzt eine weitere Spalte eingefügt.
H A L T ! ! ! S T O P ! ! !
Genau an dieser Stelle kommt es zu deinem eigentlichem Hauptproblem.
Und warum?
Ganz einfach!
Weil sich nämlich jetzt alle Zellbezüge in den anderen Tabellenblättern mit =Übersicht.F$3 automatisch zu =Übersicht.G$3 anpassen. Denn die Bezugszelle wird von einer Position zu einer anderen Position verschoben, und Calc passt dann automatisch die Zelladressierung an.
Also, deine Fehler sind:
- Du kopierst erst Zellen mit einem bestimmten Zellbezug.
- Dann verschiebst Du die Zellen auf die sich die vorher kopierten Zellen beziehen.
- Du denkst, das die zu erst kopierten Zellen ihre Zelladressierung beibehalten, was aber einfach Falsch ist. Denn sie passen den Zellbezug automatisch an.
Jetzt kannst Du ja selber mal probieren ob es nicht vielleicht besser wäre erst den 3. Block abzuarbeiten, also die Aktionen im Blatt Übersicht durchzuführen, und danach dann die anderen Blöcke.
Ich hoffe Du hast alles verstanden.
Gruß
balu