VBA - Index außerhalb des gültigen Bereichs ?

Hallo zusammen,

ich brauch mal wieder Eure Hilfe.

Mit nachfolgendem Code möchte ich Daten von einer geöffneten
Excel-Datei in eine andere kopieren:

 'Daten1
 Sheets("Quellblatt").Range("AC5").Copy
 ActiveWindow.ActivateNext

 Sheets("Zielblatt").Range("I3").PasteSpecial Paste:=xlPasteValues

ActiveWindow.ActivateNext

 'Daten2
 Sheets("Quellblatt").Range("AC6").Copy
 ActiveWindow.ActivateNext

 Sheets("Zielblatt").Range("i6").PasteSpecial Paste:=xlPasteValues

ActiveWindow.ActivateNext

 'Daten3
 Sheets("Quellblatt").Range("AC8").Copy
 ActiveWindow.ActivateNext

--\> Sheets("Zielblatt").Range("i9").PasteSpecial Paste:=xlPasteValues


ActiveWindow.ActivateNext

 'Daten4
 Sheets("Quellblatt").Range("AC2").Copy
 ActiveWindow.ActivateNext

 Sheets("Zielblatt").Range("i12").PasteSpecial Paste:=xlPasteValues

In der mit --> gekennzeichneten Zeile meckert er immer
„Index außerhalb des gültigen Bereichs“.
Ich komme einfach nicht dahinter.

Wär nett, wenn jemand helfen könnte.

Gruß und danke schonmal
Rolf

Hallo Rolf

Bei mir scheint der Code (excel2007) zu funktionieren. Der Fehler könnte jedoch von einer weiteren geöffneten Mappe kommen welche kein sheet „Zielblatt“ hat.

Um zu prüfen as genau passiert, kannst du den code mit F8 einzeln Satz für Satz durchklicken.
Prüfe welche Mappe vor dem Fehlersatz geöffnet ist und ob diese das sheet „Zielblatt“ enthält.

gruss

Andreas

Hallo Andreas,

Bei mir scheint der Code (excel2007) zu funktionieren. Der
Fehler könnte jedoch von einer weiteren geöffneten Mappe
kommen welche kein sheet „Zielblatt“ hat.

Um zu prüfen as genau passiert, kannst du den code mit F8
einzeln Satz für Satz durchklicken.
Prüfe welche Mappe vor dem Fehlersatz geöffnet ist und ob
diese das sheet „Zielblatt“ enthält.

Danke für Dein Interesse,

Sorry, hab XL2000

Es sind nur die 2 Dateien geöffnet, Quell- und Zielblatt
stimmen auch.

Wenn ich es mit F8 durchtippe, kommt keine Fehlermeldung.

Starte ich das ganze Makro, bleibt er wieder an genau der
selben Stelle hängen.

Hast Du noch eine Idee?

Gruß
Rolf

Grüezi Rolf

Mit nachfolgendem Code möchte ich Daten von einer geöffneten
Excel-Datei in eine andere kopieren:

In der mit --> gekennzeichneten Zeile meckert er immer
„Index außerhalb des gültigen Bereichs“.
Ich komme einfach nicht dahinter.

Irgendwo ist dir die ganze .Activate-erei durcheinander geraten.

Arbeite daher lieber mit sauberer Referenzierung, damit weisst Du immer exakt was whon kopiert wird und der ganze Code wird erst noch viel lesbarer:

Public Sub tr()
Dim wSSource As Worksheet
Dim wSGoal As Worksheet

 Set wbSource = Workbooks("DeineQuell\_Mappe").Sheets("Quellblatt")
 Set wbGoal = Workbooks("DeineZiel\_Mappe").Sheets("Zielblatt")

 'Daten1
 wSGoal.Range("I3").Value = wSSource.Range("AC5").Value

 'Daten2
 wSGoal.Range("I6").Value = wSSource.Range("AC6").Value

 'Daten3
 wSGoal.Range("I9").Value = wSSource.Range("AC8").Value

 'Daten4
 wSGoal.Range("I12").Value = wSSource.Range("AC2").Value

End Sub


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Rolf

Spekulativ meine ich, dass der Wechsel der beiden Mappen von Excel nicht schnell genug vollzogen wird.
Mit:
Debug.Print ActiveWorkbook.Name
wird der Name der Mappe im direktfenster angezeigt.

Der von Thomas geposteten code finde ich gut, jedoch muss dann stetig den Mappen Namen (Falls dieser ändert) nachgetragen werden.

gruss

Andreas

Grüezi Rolf

Spekulativ meine ich, dass der Wechsel der beiden Mappen von
Excel nicht schnell genug vollzogen wird.

Ein stetiger Wechsel kostet Performance und somit Zeit, ist unnötig und bringt den Betrachter durcheinander :wink:

Der von Thomas geposteten code finde ich gut, jedoch muss dann
stetig den Mappen Namen (Falls dieser ändert) nachgetragen
werden.

Dann gestalte den Code individuell und verzichte ganz auf die Namen.
Starte in der aktuellen Mappe in welcher der Code steht (das dürfte dann wohl die Quellmappe sein) und lege die andere Mappe einmalig fest indem Du einfach die andere nimmst, die geöffnet ist oder den User zu Beginn des Codes abfragst.

Dies beiden Mappen (oder eben die Sheets daraus) weist Du dann den Objekt-Variablen zu und alles ist gut. :wink:


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas

Mit nachfolgendem Code möchte ich Daten von einer geöffneten
Excel-Datei in eine andere kopieren:

In der mit --> gekennzeichneten Zeile meckert er immer
„Index außerhalb des gültigen Bereichs“.
Ich komme einfach nicht dahinter.

Irgendwo ist dir die ganze .Activate-erei durcheinander
geraten.

Arbeite daher lieber mit sauberer Referenzierung, damit weisst
Du immer exakt was whon kopiert wird und der ganze Code wird
erst noch viel lesbarer:

Public Sub tr()
Dim wSSource As Worksheet
Dim wSGoal As Worksheet

Set wbSource =
Workbooks(„DeineQuell_Mappe“).Sheets(„Quellblatt“)
Set wbGoal =
Workbooks(„DeineZiel_Mappe“).Sheets(„Zielblatt“)

'Daten1
wSGoal.Range(„I3“).Value = wSSource.Range(„AC5“).Value

'Daten2
wSGoal.Range(„I6“).Value = wSSource.Range(„AC6“).Value

'Daten3
wSGoal.Range(„I9“).Value = wSSource.Range(„AC8“).Value

'Daten4
wSGoal.Range(„I12“).Value = wSSource.Range(„AC2“).Value

End Sub

Danke, ja, so hätte ich das gerne gehabt, geht aber nicht, weil
sich der Dateiname von („DeineQuell_Mappe“)ständig ändert.

Habe daher am Anfang des Codes eine Message-Box gesetzt,
die darauf hinweist, dass nur „diese beiden“ Dateien geöffnet
sein dürfen.

Gruß
Rolf

Moin zusammen,

Spekulativ meine ich, dass der Wechsel der beiden Mappen von
Excel nicht schnell genug vollzogen wird.

Ein stetiger Wechsel kostet Performance und somit Zeit, ist
unnötig

stimmt, nervt mich auch.

und bringt den Betrachter durcheinander :wink:

Das habe ich mit „Application.ScreenUpdating = False“ abgestellt.

Der von Thomas geposteten code finde ich gut, jedoch muss dann
stetig den Mappen Namen (Falls dieser ändert) nachgetragen
werden.

Genau, darum funzt das bei mir nicht.

Dann gestalte den Code individuell und verzichte ganz auf die
Namen.
Starte in der aktuellen Mappe in welcher der Code steht (das
dürfte dann wohl die Quellmappe sein) und lege die andere
Mappe einmalig fest indem Du einfach die andere nimmst, die
geöffnet ist oder den User zu Beginn des Codes abfragst.

Dies beiden Mappen (oder eben die Sheets daraus) weist Du dann
den Objekt-Variablen zu und alles ist gut. :wink:

Oh oh, das war mir jetzt grad etwas zu hoch. :frowning: Hast du das
etwas ausführlicher? Dann versuche ich das gerne.

Danke für Deine Geduld

Gruß
Rolf

Grüezi Rolf

Spekulativ meine ich, dass der Wechsel der beiden Mappen von
Excel nicht schnell genug vollzogen wird.

Ein stetiger Wechsel kostet Performance und somit Zeit, ist
unnötig

stimmt, nervt mich auch.

und bringt den Betrachter durcheinander :wink:

Das habe ich mit „Application.ScreenUpdating = False“
abgestellt.

Das beseitigt nur das Symptom, nicht aber die Ursache… :wink:

Der von Thomas geposteten code finde ich gut, jedoch muss dann
stetig den Mappen Namen (Falls dieser ändert) nachgetragen
werden.

Genau, darum funzt das bei mir nicht.

Das halte ich für eine (unbewiesene) Behauptung.

In erster Linie hängt das von der Struktur deines Codes ab, denke ich mal.

Dann gestalte den Code individuell und verzichte ganz auf die
Namen.
Starte in der aktuellen Mappe in welcher der Code steht (das
dürfte dann wohl die Quellmappe sein) und lege die andere
Mappe einmalig fest indem Du einfach die andere nimmst, die
geöffnet ist oder den User zu Beginn des Codes abfragst.

Dies beiden Mappen (oder eben die Sheets daraus) weist Du dann
den Objekt-Variablen zu und alles ist gut. :wink:

Oh oh, das war mir jetzt grad etwas zu hoch. :frowning: Hast du das
etwas ausführlicher? Dann versuche ich das gerne.

Ich kanns versuchen:

  • Wo genau, in welcher Mappe, hast Du deinen Code gespeichert?
    Wenn das eine der beiden Mappen ist (Quelle oder Ziel’), dann hast Du bereits den Namen der ersten Mappe und kannst eine Referenz darauf setzen.

  • Wie genau und wann wird die zweite Mappe (Quelle oder Ziel?) geöffent?
    Zu diesem Zeitpunkt sollte dann auch die Referenz auf diese Mappe erstellt werden.

Damit hast Du dann alles was notwendig ist um den Code schlank (und somit schnell), sowie übersichtlich zu gestalten.

Wenn Du deine Anwendung offenlegst, sprich die Mappe auf einen WebSpace hochlädst und den Link hier nennst, dann können wir da auch mal direkt reinsehen, wenn Du magst.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas,

zunächst, ich hab’s hinbekommen. Im Einzelschrittmodus (F8)
hab ich gefunden, dass er sich zwischendurch „verlaufen“ hat.

Trotzdem würde mich noch ein „saubererer“ Codeaufbau, wie
Du ihn beschreibst, interessieren, weil ich dann nicht mehr
darauf achten müsste, dass wirklich nur die 2 Dateien geöffnet sind.

  • Wo genau, in welcher Mappe, hast Du deinen Code gespeichert?

Die erste Mappe wird als Vorlage.xlt geöffnet und unter einem
Projektnamen gespeichert: Projekt4711.xls - Zielverzeichnis unbekannt,
macht jeder User anders.

In dieser Mappe hats eine Schaltfläche, die die zweite
Mappe öffnet: Workbooks.Open „C:\Verzeichnis\Name2.xls“
Verzeichnis und Dateiname sind immer gleich.

In dieser 2. Mappe „Name2.xls“ hats dann eine Schaltfläche,
die den Kopiervorgang startet, wobei ich Daten in beide
Richtungen kopiere, aus Name2.xls in Projekt4711.xls
und umgekehrt.

Wenn das eine der beiden Mappen ist (Quelle oder Ziel’),
dann hast Du bereits den Namen der ersten Mappe und kannst
eine Referenz darauf setzen.

  • Wie genau und wann wird die zweite Mappe (Quelle oder Ziel?)
    geöffent?
    Zu diesem Zeitpunkt sollte dann auch die Referenz auf diese
    Mappe erstellt werden.

Damit hast Du dann alles was notwendig ist um den Code schlank
(und somit schnell), sowie übersichtlich zu gestalten.

Wenn Du deine Anwendung offenlegst, sprich die Mappe auf einen
WebSpace hochlädst und den Link hier nennst, dann können wir
da auch mal direkt reinsehen, wenn Du magst.

Würd ich machen, aber zum Zerpflücken und neutralisieren
fehlt mir grad die Zeit - sorry :frowning:

Danke allen, die sich nen Kopf gemacht haben.

Gruß
Rolf

Grüezi Rolf

zunächst, ich hab’s hinbekommen. Im Einzelschrittmodus (F8)
hab ich gefunden, dass er sich zwischendurch „verlaufen“ hat.

Ja, das hatte ich mir so schon gedacht, aber einerseits ist das ohne Mappen schwer nachzuvollziehen und andererseits macht die Hüpferei an sich es auch nicht einfacher.

Trotzdem würde mich noch ein „saubererer“ Codeaufbau, wie
Du ihn beschreibst, interessieren, weil ich dann nicht mehr
darauf achten müsste, dass wirklich nur die 2 Dateien geöffnet
sind.

Ja, das ist sicher eine gute Idee.

  • Wo genau, in welcher Mappe, hast Du deinen Code gespeichert?

Die erste Mappe wird als Vorlage.xlt geöffnet und unter einem
Projektnamen gespeichert: Projekt4711.xls - Zielverzeichnis
unbekannt, macht jeder User anders.

In dieser Mappe hats eine Schaltfläche, die die zweite
Mappe öffnet: Workbooks.Open „C:\Verzeichnis\Name2.xls“
Verzeichnis und Dateiname sind immer gleich.

In dieser 2. Mappe „Name2.xls“ hats dann eine Schaltfläche,
die den Kopiervorgang startet, wobei ich Daten in beide
Richtungen kopiere, aus Name2.xls in Projekt4711.xls
und umgekehrt.

Das heisst also, dass der Code in zwei unterschiedlichen Mappen untergebracht ist?

…das ist nicht sehr gut oder optimal, da keine der Mappen von der anderen weiss. Jedenfalls diejenigemit dem relevanten Code kann nicht den Namen der anderen kennen, da diese ja jedesmal anders heissen kann.

Hast Du schon mal daran gedacht, den Code komplett in ein AddIn auszulagern und nur noch ‚dumme‘ Mappen zu verwenden?
Dann könntest Du über eine Symbolleiste deine Makros starten und alles aus dem AddIn heraus regeln.

Wenn das eine der beiden Mappen ist (Quelle oder Ziel’),
dann hast Du bereits den Namen der ersten Mappe und kannst
eine Referenz darauf setzen.

  • Wie genau und wann wird die zweite Mappe (Quelle oder Ziel?)
    geöffent?
    Zu diesem Zeitpunkt sollte dann auch die Referenz auf diese
    Mappe erstellt werden.

Damit hast Du dann alles was notwendig ist um den Code schlank
(und somit schnell), sowie übersichtlich zu gestalten.

Wenn Du deine Anwendung offenlegst, sprich die Mappe auf einen
WebSpace hochlädst und den Link hier nennst, dann können wir
da auch mal direkt reinsehen, wenn Du magst.

Würd ich machen, aber zum Zerpflücken und neutralisieren
fehlt mir grad die Zeit - sorry :frowning:

Kein Problem - deine Anwendung läuft ja im Moment.
Wenn Du Zeit/bedarf hast, dann melde dich einfach wieder.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -