Lauzeitfehler 9: "Index außerhalb des gültigen Bereichs"

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Lauzeitfehler 9: "Index außerhalb des gültigen Bereichs"

    Hallo,

    mit folgendem Code möchte ich aus einer Arbeitsmappe Ergebnisse in eine neue Arbeitsmappe einfügen.

    Problem: Lauzeitfehler 9: "Index außerhalb des gültigen Bereichs" tritt in Zeile 14 auf (nach Debuggen)

    Worksheets("Sheet6").Name = "Upstream Results HHV"

    Visual Basic-Quellcode

    1. Sub InputExport_Click()
    2. Dim ghgName As String
    3. ghgName = ActiveWorkbook.Name
    4. Dim ghgExport As String
    5. Workbooks.Add
    6. ghgExport = ActiveWorkbook.Name
    7. ' Application.DisplayAlerts = False
    8. Worksheets.Add
    9. Worksheets.Add
    10. Worksheets.Add
    11. Worksheets.Add
    12. Worksheets.Add
    13. Worksheets("Sheet6").Name = "Upstream Results HHV"
    14. Worksheets("Sheet5").Name = "Lifecycle Results"
    15. Worksheets("Sheet4").Name = "LDV Summary"
    16. Worksheets("Sheet1").Name = "HDV Summary"
    17. Worksheets("Sheet2").Name = "Cost LDV"
    18. Worksheets("Sheet3").Name = "Cost HDV"
    19. Workbooks(ghgName).Activate
    20. Application.Goto Reference:=Worksheets("Upstream Results HHV").Range("A1:IV461")
    21. Selection.Copy
    22. Workbooks(ghgExport).Activate
    23. Application.Goto Reference:=Worksheets("Upstream Results HHV").Range("A1")
    24. Selection.PasteSpecial (xlPasteValues)
    25. Selection.PasteSpecial (xlPasteFormats)
    26. Selection.PasteSpecial (8)
    27. Application.Goto Reference:=Worksheets("Upstream Results HHV").Range("A1")


    Muss ich den Range in Worksheets("Sheet6").Name = "Upstream Results HHV" weiter einengen ?

    Viele Grüße

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „juliuscäsar“ ()

    Index außerhalb des gültigen Bereichs
    bedeutet in diesem Fall:
    Es gibt kein Worksheet mit dem Namen "Sheet6".
    Wenn du ein deutsches Excel hast, heißt es wahrscheinlich "Tabelle6".
    Darauf kannst du dich aber nicht verlassen.

    Deshalb:
    Ordne den Namen direkt nach dem Erzeugen des Sheets zu.

    Visual Basic-Quellcode

    1. WorkSheets.Add
    2. ActiveSheet.Name = "x1"
    3. WorkSheets.Add
    4. ActiveSheet.Name = "x2"
    5. ...



    Beim Rest lässt der Macro-Recorder grüßen:
    Workbooks(ghgName).Activate
    Application.Goto Reference:=Worksheets("Upstream Results HHV").Range("A1:IV461")
    Selection.Copy
    Workbooks(ghgExport).Activate
    Application.Goto Reference:=Worksheets("Upstream Results HHV").Range("A1")
    Selection.PasteSpecial (xlPasteValues)
    Selection.PasteSpecial (xlPasteFormats)
    Selection.PasteSpecial (8)
    Application.Goto Reference:=Worksheets("Upstream Results HHV").Range("A1")
    Da friert's mich.
    Besser:

    Visual Basic-Quellcode

    1. Workbooks(ghgName).Worksheets("Upstream Results HHV").UsedRange.Copy Workbooks(ghgExport).Worksheets("Upstream Results HHV").Range("A1")
    Und noch schöner wäre, wenn du die einzelnen Sheets und Workbooks in eine Objektvariable packen würdest; insbesondere, wenn du sie mehrfach benötigst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „petaod“ ()

    petaod schrieb:

    Zitat

    Index außerhalb des gültigen Bereichs
    bedeutet in diesem Fall:
    Es gibt kein Worksheet mit dem Namen "Sheet6".
    Wenn du ein deutsches Excel hast, heißt es wahrscheinlich "Tabelle6".
    Darauf kannst du dich aber nicht verlassen.
    Vielen Dank für deine Hilfe. Macro funktioniert einwandfrei, wenn ich "Sheet" durch "Tabelle" ersetze, da die Zielarbeitsmappe & -Blätter auf Deutsch sind.

    Grüße

    juliuscäsar schrieb:

    Macro funktioniert einwandfrei, wenn ich "Sheet" durch "Tabelle" ersetze
    Das ist aber Murks.
    Wenn du die Sprache umstellst oder dein Kollege das Macro ausführt, fliegt das Teil auf die Schnauze.

    Du hast lediglich meine Ausführung zur Fehlerursache gelesen und den sauberen Lösungsansatz in den Gulli gekickt.
    Na gut. Mir kann's ja egal sein, auf welche Art du deine Problemlösungen hackst.
    Sag aber nicht, du wärst nicht gewarnt worden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --