Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Arraygröße dynmaisch erweitern ReDim

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

      

    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


      

    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


      

    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 …


      

    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


      

    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 :-?


      

    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


      

    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


      

    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


     

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