Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Fehler UBound - Datenfeld erwartet

Fehler UBound - Datenfeld erwartet
13.09.2017 11:18:43
japes36
Hallo zusammen,
ich möchte in mehreren Ordnern alle enthaltene Dateien öffnen, die Verknüpfungen aktualisieren, speichern und dann schließen lassen. Funktioniert auch.
Lediglich die Ordner E10, E30 und E50 wollte ich über SPLIT dem Link dynamisch zuordnen. UBound bringt aber nen Fehler "erwartet Datenfeld".
Sicher nur Kleinigkeit...Warum geht's nicht?
Option Explicit
Sub Test()
Application.ScreenUpdating = False
Dim cDir As String
Dim sPath As String
Dim Ebene As String
Dim i As Integer
Ebene = Split("E10,E30,E50", ",")
For i = 0 To UBound(Ebene)
sPath = "T:\~Urlaubsplanung\" & Ebene & "\Test\"
cDir = Dir(sPath & "*.*")
Do While cDir  ""
Application.DisplayAlerts = False
Workbooks.Open (sPath & cDir), UpdateLinks:=3
ActiveWorkbook.Save
ActiveWorkbook.Close False
'nächste Datei lesen
cDir = Dir
Loop
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Danke für die Unterstützung
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler UBound - Datenfeld erwartet
13.09.2017 11:25:36
mmat
Versuche
dim ebene as variant
AW: Fehler UBound - Datenfeld erwartet
13.09.2017 11:30:33
Daniel
hi
du darfst ebene nicht als einfachen String deklarieren.
Ebene muss als Datenfeld "Dim Ebene() as String" oder als Variant "Dim Ebene" deklariert werden.
der nächste Fehler dann hier, hier fehlt der Index von Ebene, da das komplette Array an dieser Stelle nicht verarbeitet werden kann (und wahrscheinlich auch nicht soll):
sPath = "T:\~Urlaubsplanung\" & Ebene(i) & "\Test\"
Gruß Daniel
Anzeige
AW: Fehler UBound - Datenfeld erwartet
13.09.2017 12:04:32
japes36
Danke Daniel. Funktioniert :)
Option Explicit
Sub Test()
Application.ScreenUpdating = False
Dim cDir As String
Dim sPath As String
Dim Ebene() As String
Dim i As Integer
Ebene = Split("E10,E30,E50", ",")
For i = 0 To UBound(Ebene)
sPath = "T:\~Urlaubsplanung\" & Ebene(i) & "\Test\"
cDir = Dir(sPath & "*.*")
Do While cDir  ""
Application.DisplayAlerts = False
Workbooks.Open (sPath & cDir), UpdateLinks:=3
ActiveWorkbook.Save
ActiveWorkbook.Close False
'nächste Datei lesen
cDir = Dir
Loop
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Fehler UBound in VBA: Datenfeld erwartet


Schritt-für-Schritt-Anleitung

Um den Fehler "UBound erwartet Datenfeld" in VBA zu beheben, folge diesen Schritten:

  1. Variablen deklarieren: Stelle sicher, dass die Variable Ebene als Datenfeld deklariert ist. Verwende dazu die folgende Zeile:

    Dim Ebene() As String
  2. SPLIT-Funktion verwenden: Teile den String mit den Ordnernamen in ein Array:

    Ebene = Split("E10,E30,E50", ",")
  3. Schleife durch das Array: Iteriere über das Array mit einer Schleife und verwende UBound, um die Obergrenze des Arrays zu ermitteln:

    For i = 0 To UBound(Ebene)
       sPath = "T:\~Urlaubsplanung\" & Ebene(i) & "\Test\"
  4. Dateien öffnen und speichern: Verwende die Dir-Funktion, um die Dateien in den jeweiligen Ordnern zu öffnen, zu speichern und zu schließen.


Häufige Fehler und Lösungen

  • Fehler: "UBound erwartet Datenfeld"
    Lösung: Stelle sicher, dass Ebene als Array deklariert ist, und verwende die korrekte Syntax für den Zugriff auf die Elemente im Array (z.B. Ebene(i)).

  • Fehler: "Typen unverträglich"
    Lösung: Überprüfe, ob die Variablen korrekt deklariert sind. Verwende Dim Ebene As Variant, wenn du die Flexibilität eines Variants benötigst.


Alternative Methoden

Wenn du den Fehler "UBound erwartet Datenfeld" nicht beheben kannst, gibt es alternative Ansätze:

  • Direkte Verwendung von Variant: Anstelle eines Arrays kannst du Ebene als Variant deklarieren:

    Dim Ebene As Variant
  • Verwendung von Collection: Du kannst auch eine Collection verwenden, um die Ordnernamen zu speichern, was mehr Flexibilität bietet.


Praktische Beispiele

Hier ist ein funktionierendes Beispiel, das zeigt, wie du den Fehler vermeiden kannst:

Option Explicit
Sub Test()
    Application.ScreenUpdating = False
    Dim cDir As String
    Dim sPath As String
    Dim Ebene() As String
    Dim i As Integer
    Ebene = Split("E10,E30,E50", ",")

    For i = 0 To UBound(Ebene)
        sPath = "T:\~Urlaubsplanung\" & Ebene(i) & "\Test\"
        cDir = Dir(sPath & "*.*")

        Do While cDir <> ""
            Application.DisplayAlerts = False
            Workbooks.Open (sPath & cDir), UpdateLinks:=3
            ActiveWorkbook.Save
            ActiveWorkbook.Close False
            cDir = Dir
        Loop
    Next
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Tipps für Profis

  • Verwende Option Explicit: Das zwingt dich dazu, alle Variablen zu deklarieren, was hilft, Fehler zu vermeiden.
  • Fehlerbehandlung implementieren: Füge eine Fehlerbehandlungsroutine hinzu, um unerwartete Fehler abzufangen.
  • Arbeite mit benannten Bereichen: Wenn du große Datenmengen verarbeitest, können benannte Bereiche die Lesbarkeit und Wartbarkeit deines Codes erhöhen.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen einem Array und einem Variant in VBA?
Ein Array ist eine strukturierte Sammlung von Elementen eines bestimmten Datentyps, während ein Variant eine flexible Datentyp-Option ist, die verschiedene Datentypen speichern kann.

2. Wie kann ich sicherstellen, dass mein Code effizient läuft?
Nutze die ScreenUpdating-Eigenschaft, um die Bildschirmaktualisierung während der Ausführung des Codes zu deaktivieren. Dies verbessert die Leistung erheblich.

3. Was mache ich, wenn ich weiterhin Fehler erhalte?
Überprüfe die Syntax deines Codes sorgfältig, und stelle sicher, dass alle Variablen korrekt deklariert und verwendet werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige