Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

VBA: Index außerhalb des gültigen Bereichs

Empfohlene Antworten

Veröffentlicht

Laufzeitfehler 9:

Index außerhalb des gültigen Bereichs

Hallo Leute,

ich weiß normalerweise, was zu tun ist, wenn dieser Fehler auftritt. Meistens habe ich dann ein Array falsch dimensioniert oder versuche auf Dimensionen des Arrays zuzugreifen, die gar nicht existieren. Nur diesmal ist es anders. Eigentlich funktioniert folgende Funktion:

Function Daten_einlesen()


    Dim Zeile As Integer

    Dim datenfeld()

    Dim wert As Variant

    Dim AnzahlDatensaetze As Integer


    Zeile = 6 ' unsere Startzeile im Arbeitsblatt Telefonverhalten

    AnzahlDatensaetze = Rechnungsimport.Gib_Zeile_zurück - Zeile + 1 ' = Anzahl Datensätze minus 1

    ReDim datenfeld(AnzahlDatensaetze, 7)


    Worksheets("Telefonverhalten").Activate

    wert = Range("A" & Zeile).Value ' für die erste Bedingunsprüfung in der Do While ...-Schleife


    Do While Not wert = ""

        ' Zeile-6 weil wir das Array bei 0 starten lassen

        datenfeld(Zeile - 6, 0) = Range("A" & Zeile).Value ' Wochentag

        datenfeld(Zeile - 6, 1) = Range("B" & Zeile).Value ' Datum

        datenfeld(Zeile - 6, 2) = Range("C" & Zeile).Value ' Uhrzeit

        datenfeld(Zeile - 6, 3) = Range("D" & Zeile).Value ' Telefonnummer

        datenfeld(Zeile - 6, 4) = Range("E" & Zeile).Value ' Netzinfo

        datenfeld(Zeile - 6, 5) = Range("F" & Zeile).Value ' Gesprächsdauer

        datenfeld(Zeile - 6, 6) = Range("G" & Zeile).Value ' Gesprächsdauer gerundet

        datenfeld(Zeile - 6, 7) = Range("H" & Zeile).Value ' Einheit


        Zeile = Zeile + 1

        ' wert ist der Parameter für die Abbruchbedingung

        wert = Range("A" & Zeile).Value

    Loop


    Daten_einlesen = datenfeld 'Daten_einlesen: Array als Rückgabewert


End Function

Die Funktion gibt mir halt Daten einer Excel-Tabelle als Array zurück.

Das Komische ist, dass sie bei jedem zweiten aufruf aus einer anderen Funktion die oben genannte Fehlermeldung bringt. Ruft man die funktion für sich allein auf, kommt nie eine Fehlermeldung.

Bin etwas perplex und weiß auch nicht genau, wie ich das genauer beschreiben kann. Kennt jemand das Problem, dass ein Fehler ohne Änderung des Quelltextes einmal auftritt und einmal nich (immer abwechselnd).

Danke

ReDim datenfeld(AnzahlDatensaetze, 7)

...

datenfeld(Zeile - 6, 7) = Range("H" & Zeile).Value ' Einheit

Spontan und ohne gross drauf zu schauen würde ich sagen, es liegt daran das du "datrenfeld" mit AnzahlDatensaetze, 7 definierst, aber bis index 7 gehst (welches das 8. ist)

Spontan und ohne gross drauf zu schauen würde ich sagen, es liegt daran das du "datrenfeld" mit AnzahlDatensaetze, 7 definierst, aber bis index 7 gehst (welches das 8. ist)

Grundsätzlich stimmt das. Komisch, dass es trotzdem geht. Es geht auch nicht anders. Der fängt wohl auch bei Dimension 0 an. Trotzdem dank.

War ein ganz anderer Fehler, den ich gemacht habe. Es lag daran, dass ich noch das richtige Worksheet aktivieren musste. Und durch einen Zufall war das Worksheet jedes zweite mal nicht aktiv.:floet:

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.