Hallo Charly,
Ich bin nicht so ein Basic-Experte wie du und so habe ich noch eine Zusatzfrage
bin ich auch nicht unbedingt
In deiner Version hast du laut Handbuch ein paar Felder wie CellRangeAddress.sheet bzw. CellAddress.Sheet und CellAddress.Column nicht belegt. Meine Frage ist, mit was werden diese Felder beim Befehl sheet.copyrange gefüllt
Ja, der Hintergrund Deines Einwurfs ist völlig berechtigt. Was soll ich sagen: Ich habe gestern den post von vanglio gelesen und schnell etwas zusammengeschoben habe dann zwischenzeitlich etwas anderes gemacht und irgendwann festgestellt das Du schon gepostet hattest. Ich habe Deinen Code nicht gelesen und als ich heute in den Thread schaute hatte ich eigentlich nur erwartet das vanglio sich bedankt das alles funktioniert. Da das nicht der Fall war habe ich das "halbfertige Zeug" von gestern gepostet (ein schneller Test ergab das es funktionierte)... so ist das gelaufen.
insbesondere wenn ich davon ausgehe, dass Vanglio nicht mit Blattindex 0 arbeitet, da er zu diesem Blatt anschließend erst springen will und man mit dem Befehl auch blattübergreifend kopieren kann.
Ja, ich sehe das:
ActiveWindow.GoToCell( "$A$4:$H$4" )
ActiveWindow.JumpToTable( 1 )
Ich war unaufmerksam und habe ohne nachzudenken etwas unfertiges gepostet (siehe oben). Dein Einwurf ist auch hier berechtigt...
Der Befehl Cursor.GotoEndofUsedArea funktioniert bei mir nur mit (0). Bei Eingabe von True erhalte ich eine Fehlermeldung. Deswegen verwende ich für True immer (0) und für False(1)
Also eine Fehlermeldung bekomme ich in keinem Fall und ich fand es etwas merkwürdig das True=0 und False=1 sein sollte, ich habe Folgendes gefunden:
Dein Orginal-Code ist:
Cursor.gotoEndOfUsedArea (0)
Zeile = Cursor.getRangeAddress().StartRow + 1
Zielbereich = AktBlatt.getCellByPosition(0,Zeile)
Ziel = Zielbereich.getCellAddress()
Ich war bisher der Meinung das .gotoEndOfUsedArea ein "Äquivalent" (inhaltlich keine schöne Formulierung an dieser Stelle) für STRG+ENDE ist jedoch finde ich jetzt das alles (u.a.) von .StartRow (das verwendest Du) oder .EndRow (das verwende ich) abhängt. Dein obenstehender Code arbeitet nicht mit True, aber:
(a)ersetze 0 durch False (wenn False=0 ist auch meine Weltsicht wieder in Ordnung) und es funktioniert.
(b)ersetze 0 durch True UND ersetze .StartRow durch .EndRow und es funktioniert
aber
(c)ersetze 0 durch True oder 1, belasse jedoch .StartRow und es funktioniert nicht -->die zu kopierende Zeile wird in Zeile 2 kopiert (Row=1)
Ich habe noch nicht ausgiebig über die Gesamtsituation nachgedacht, unser Code ist in Details verschieden, aber ich würde
zunächst folgende Interpretation geben:
(*)
gotoEndOfUsedArea bedeutet:
"nimm"
die Enden des genutzten Bereichs
(**)
gotoEndOfUsedArea (x) bedeutet:
"nimm" Dir
ein Ende des genutzten Bereichs wobei x darüber entscheidet welches Ende, ist x=True dann das hintere ("rechte untere Ecke") ist x=False dann das vordere ("linke obere Ecke") - denn so würde sich das Verhalten erklären was ich unter (c) beschreibe
(***)
.StartRow bzw. .EndRow regeln wo der Zugriff auf den Bereich gemäß (*) beginnt
Das Ganze ist eine Frage der Selection, auch wenn diese hier nur "virtuell" ist und kein wirkliches ".Select" ... das wiederum ist eine Problematik zu der Andrew Pitonyak in dem Dokument http://www.pitonyak.org/AndrewMacro.sxw einiges bezüglich Textdokumenten ausführt. Ein Buch basierend auf diesem Dokument ist am 1.August erschienen (USA) und ich hoffe das ich es noch diese Woche in Händen halten werde (habe es gestern bestellt), ich hoffe das ich dort bessere Erklärungen finden kann denn in dem Dokument bleibt einiges offen.
Ich habe jetzt sehr viel geschrieben, aber vielleicht trotzdem nicht den Kern des Problems erkannt (oder verkannt).
Wie denkst Du darüber? Und da Du schreibst das Du einer Fehlermeldung erhältst poste doch bitte mal den genauen Inhalt Selbiger und Dein System! Bei mir läuft das auf SO7 PP2 und Windows 2000 SP4 so wie beschrieben.
Ich danke für die interessante Anregung.
Herzlichen Gruß
Stephan