VBA Arraygröße dynmaisch erweitern ReDim

Bild

Betrifft: VBA Arraygröße dynmaisch erweitern ReDim
von: Krycho89
Geschrieben am: 25.06.2015 08:05:28

Hallo Forumsmitglieder,
ich habe ein Problem mit der dynamischen Erweiterung von einem Array
Mein Code sieht dabei folgendermaßen aus:

  • Sub Search()
    Dim Suchbegriffe()
    Dim newDim as Long
    newDim = UBound(Suchbegriffe,1) + 1
    ReDim Suchbegriffe(1 To newDim)

    Suchbegriffe(1) = Array("*ausrund*", "*blend *", "*blending*")
    Suchbegriffe(2) = Array("*deviation*", "*abweichung*", "*gaps*", "*lücken*")
    Suchbegriffe(3) = Array("*weld*", "*verbindungselemente*", "*dxweld*")
    Suchbegriffe(4) = Array("*data quality*", "*analyse*", "*check tool*")
    Suchbegriffe(5) = Array("*usability*")
    Suchbegriffe(6) = Array("*law extension*")
    Suchbegriffe(7) = Array("*tailored blank*")
    Suchbegriffe(8) = Array("*sketch*")
    Suchbegriffe(9) = Array("*messen*", "*measurement*")

  • Ich bekomme dabei immer die Fehlermeldung "Index außerhalb des gültigen Bereichs"
    Kann mir da jemand weiterhelfen wie ich das machen müsste?
    Viele Grüße Chris

    Bild

    Betrifft: AW: VBA Arraygröße dynmaisch erweitern ReDim
    von: Mullit
    Geschrieben am: 25.06.2015 11:32:57
    Hallo,
    klare Sache: Du kannst nicht die Grenze eines Arrays abfragen, daß noch undimensioniert ist:

    Dim Suchbegriffe()
    Dim newDim As Long
    newDim = UBound(Suchbegriffe, 1) + 1

    Redim muß vorher gesetzt sein...
    Gruß, Mullit

    Bild

    Betrifft: AW: VBA Arraygröße dynmaisch erweitern ReDim
    von: Krycho89
    Geschrieben am: 25.06.2015 12:37:48
    Hallo Mullit,
    kann man das dann irgendiwe anders lösen, dass die Länge vom Array, von der Anzahl der Suchbegriffe abhängig ist?
    Viele Grüße Chris

    Bild

    Betrifft: Ja, ReDim, ...
    von: Luc:-?
    Geschrieben am: 25.06.2015 13:40:42
    …Chris:
    Dim Suchbegriffe, newDim() As Long

    ReDim Suchbegriffe(
    anzahlSuchbegriffe - 1), newDim(UBound(Suchbegriffe, 1) + 1)
    Gruß, Luc :-?

    Besser informiert mit …

    Bild

    Betrifft: AW: VBA Arraygröße dynmaisch erweitern ReDim
    von: Rudi Maintaire
    Geschrieben am: 25.06.2015 13:09:28
    Hallo,
    da empfiehlt sich die Verwendung eines Dictionary- oder Collection-Objekts anstatt des Arrays.
    Gruß
    Rudi

    Bild

    Betrifft: Dafür kann man auch einen anderen Array-Typ ...
    von: Luc:-?
    Geschrieben am: 25.06.2015 14:01:03
    …Chris;
    eine Möglichkeit hat Rudi genannt, die andere ist ein Variant mit einem (bzw mehreren) Array(s) → Stichwort: Arrays in Arrays

    Dim Suchbegriffe
    Suchbegriffe = Array(Array("*ausrund*", "*blend *", "*blending*"), _
                   Array("*deviation*", "*abweichung*", "*gaps*", "*lücken*"), _
                   Array("*weld*", "*verbindungselemente*", "*dxweld*"), _
                   Array("*data quality*", "*analyse*", "*check tool*"), _
                   Array("*usability*"), _
                   Array("*law extension*"), _
                   Array("*tailored blank*"), _
                   Array("*sketch*"), _
                   Array("*messen*", "*measurement*"))
    Mit Suchbegriffe(3) indizierst du das ganze 4.Teil-Array, also alle 3 Elemente, mit Suchbegriffe(3)(1) nur sein mittleres Element.
    Du hast es übrigens nicht für nötig gehalten, mir hier, trotz Benachrichtigungswahl(!), zu antworten. Falls das deine gängige Praxis wdn soll, du nur antwortest, wenn du noch was willst, kann ich dich nur warnen…!
    Luc :-?

    Bild

    Betrifft: AW: VBA Arraygröße dynmaisch erweitern ReDim
    von: Krycho89
    Geschrieben am: 25.06.2015 14:42:48
    Hallo zusammen,
    Danke für die zahlreichen Antworten. Ich werde die Lösungsvorschläge durcharbeiten und mich zurückmelden.
    Viele Grüße Chris

    Bild

    Betrifft: AW: Dafür kann man auch einen anderen Array-Typ
    von: Krycho89
    Geschrieben am: 29.06.2015 07:15:55
    Hallo Luc,
    ich habe eine Frage zu deiner Lösung.
    Wie kann man diesen Array dann auslesen?
    Mein Code dafür sieht so aus:

    
    With Sheets("Datenblatt")
            to_End = .Cells(.Rows.Count, 1).End(xlUp).Row
            
       For a = LBound(Suchbegriffe, 1) To UBound(Suchbegriffe, 1)
       For i = LBound(Suchbegriffe, 2) To UBound(Suchbegriffe, 2)
        Search = Suchbegriffe(a)(i)
            For j = 2 To to_End
                 For sb = 0 To UBound(Search)
                     If LCase(.Cells(j, 6).Value) Like Search(sb) Then Exit For
                 Next sb
                 If sb <= UBound(Search) Then lngAnzahl = lngAnzahl + 1
            Next j
            Worksheets("Auswertung").Range("B" & 4 + i).Value = lngAnzahl
            lngAnzahl = 0
       Next i
       Next a
            Worksheets("Auswertung").Range("B15").Value = to_End - 1
       End With
    
    Es wird die sechste Zeile mit den Suchbegriffen aus dem Worksheet Datenblatt, mit den Werten im Array verglichen.
    Vielen Dank und viele Grüße Chris

    Bild

    Betrifft: AW: Dafür kann man auch einen anderen Array-Typ
    von: Krycho89
    Geschrieben am: 29.06.2015 07:56:38
    Hallo,
    ich habe es hinbekommen

    
    With Sheets("Datenblatt")
            to_End = .Cells(.Rows.Count, 1).End(xlUp).Row
       For i = LBound(Suchbegriffe, 1) To UBound(Suchbegriffe, 1)
        Search = Suchbegriffe(i)
                    For j = 2 To to_End
                 For sb = 0 To UBound(Search)
                     If LCase(.Cells(j, 6).Value) Like Search(sb) Then Exit For
                 Next sb
                 If sb <= UBound(Search) Then lngAnzahl = lngAnzahl + 1
            Next j
            Worksheets("Auswertung").Range("B" & 5 + i).Value = lngAnzahl
            lngAnzahl = 0
       Next i
            
            
            Worksheets("Auswertung").Range("B15").Value = to_End - 1
       End With
    
    Danke für Alles!
    Gruß Chris

     Bild

    Beiträge aus den Excel-Beispielen zum Thema "VBA Arraygröße dynmaisch erweitern ReDim"