Aktuell kann es Probleme bei der Anmeldung mit dem Chrome oder Edge Browser geben. Ihr müsstet in die Einstellungen des Browsers gehen und Cache, Cookies und sofern vorhanden, gespeicherte Passwörter vom CEF löschen oder alternativ auf einen anderen Browser ausweichen. Ursache sind vermutlich kürzliche Browserupdates. x

Teilbereich einer ArrayList umkehren
#1
Hallo,

ich habe Probleme mit Anwendung der Reverse - Methode für ArrayList-Objekte.  Schaut euch meinen unteren Code an. Hier werden die Werte

mittels Reverse-Funktion in der ArrayList umgekehrt. So weit so gut. Was mir aber Probleme bereitet ist folgendes. Ich möchte nur

einen Teilbereich  aus den gegebenen ArrayList Elementen umkehren. Sagen wir mal beispielhaft die Elemente von "Die" bis "Fr".

Wie mache ich das?

Code:
Sub ArrayList_Reverse_Teilbereich()
Dim i%, f: f = Array("Mo", "Die", "Mi", "Do", "Fr", "Sa", "So")
Dim arrList As Object
Set arrList = CreateObject("System.Collections.ArrayList")
For i = 0 To UBound(f)::arrList.Add f(i)::Next
arrList.Reverse
Debug.Print Join(arrList.toarray(), Chr(10))
'Methoden vgl. hier :
'https://msdn.microsoft.com/de-de/library/system.collections.arraylist_methods(v=vs.110).aspx
End Sub
Top
#2
Schau mal hier:
http://www.snb-vba.eu/VBA_Arraylist_en.html

Code:
Sub M_snb()
    sn = Array("Mo", "Die", "Mi", "Do", "Fr", "Sa", "So")

    With CreateObject("System.Collections.ArrayList")
        For j = 2 To 5
           .Add sn(j)
           sn(j) = "~"
        Next
        .Reverse
        sn(j - 1) = Join(.toarray, vbLf)
    End With

    MsgBox Join(Filter(sn, "~", 0), vbLf)
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#3
@snb, danke für die Seitenempfehlung, habe ich aber schon auf dem Radar gehabt.
Zu Deiner Seite, absolut lesenswert und top. Fünf Sterne.

Zu der Lösung, nicht ganz das was ich suche. Die Lösung wird zwar richtig ausgegeben,
aber das ArrayList wird ja nicht verändert (s. Lokalfenster bei der Einzelschrittcompilierung).
Was ich brauche ist eben genau diese Manipulation der vorliegenden ArrayList.

Schaut man auf folgende Seite von MS
https://msdn.microsoft.com/de-de/library....110).aspx
findet man unter den Methoden bei reverse folgenden Eintrag:

Reverse(Int32, Int32) | Kehrt die Reihenfolge der Elemente im angegebenen Bereich um.

Doch wie geht das? Egal was ich mache, es haut bei mir einfach nicht hin.
Top
#4
Hallo,

kommt das deiner Idee nahe?


Code:
Sub T_1()
Ar = Array("a", "b", "c", "d", "e", "f", "g", "h")
With CreateObject("System.Collections.ArrayList")
   For Each it In Ar
       .Add it
   Next it
   Set st = .getrange(1, 2)
   st.Reverse
   i = 3
   Set st2 = .getrange(i, .Count - 1 - i)
   Debug.Print .Count, .Item(0), Join(st.toarray, ", "), Join(st2.toarray, ", ")
End With
End Sub


Die Ausgabe erfolgt ins Direktfenster des VBE.

mfg
Top
#5
Hi

Reverse(Int32, Int32) und diverse andere Methoden funktionieren in meiner Excelversion auch nicht.
Im Beispiel wird die ArrayList direkt geändert.
Code:
Sub Drehen()
With CreateObject("System.Collections.ArrayList")
Ar = Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So")
For Each it In Ar
  .Add it
Next it
'Drehen
k = .IndexOf("Di", 0)     'von "Di"
n = .IndexOf("Fr", 0)     'bis "Fr"
For i = k To n - 1
   it = .Item(n)
   .RemoveAt (n)
   .Insert i, it
Next
MsgBox Join(.toarray, vbLf)
End With
End Sub

Gruß Elex
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste