Hallo,
ich habe einen vba code geschrieben, um eine Liste nach einem Bestimmten String zu durchsuchen und dann 2 Teilstrings aus der gefundenen Zelle wieder getrennt zurückzugeben. Mein Suchalgorithmus ist leider ein wenig kompliziert, da ich in zwei Etappen suchen muss. Da sich meine eigentliche Frage jedoch nicht auf den Algorithmus an sich bezieht, sehe ich von weiteren Erklärungen ab.
Der Algorithmus läuft jetzt einwandfrei, da er jedoch seeeeeeehr seeeeehr lange braucht, wollte ich den Code umschreiben, in einen Array basierten Code. Ich habe jedoch noch nie mit Arrays gearbeitet und stoße echt an meine Grenzen. Ich weiß einfach nicht wie ich das umsetzten soll, bzw. ob das überhaupt so einfach geht wie gedacht.
Hier erstmal mein mein Basiscode:
____________________________________________________________________________________________________________________________
Sub SUCHE()
Dim Suchnummer, Ablaufdatum1, Ablaufdatum2, Land, Suchstring2, Suchstring3, Suchstring4, ZellenInhalt, LegalState As String
Dim Bereich, Gefunden1, Gefunden2, Suchbereich As Range
Dim Zeile, Spalte, TextPos1, TextPos2, TextPos3, Länge, Länge2, Länge3 As Integer
Dim k As Integer
Suchstring3 = "Actual or expected expiration date="
Suchstring4 = "Legal state="
For k = 2 To 3
Suchnummer = Sheets("Report").Cells(k, 7).Value
Land = Sheets("Report").Cells(k, 2).Value
Suchstring2 = "LEGAL DETAILS FOR " & Land
If Sheets("Report").Cells(k, 7).Value <> "" Then
Set Gefunden1 = Sheets("Orbit").Cells.Find(What:=Suchnummer, After:=Cells(1, 1), LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Gefunden1 Is Nothing Then GoTo Überspringen
Zeile = Gefunden1.Row
With Sheets("Orbit")
Set Gefunden2 = .Range(.Cells(Zeile, 1), .Cells(Zeile, 34)).Find(What:=Suchstring2, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
End With
If Gefunden2 Is Nothing Then GoTo Überspringen
Spalte = Gefunden2.Column
ZellenInhalt = Sheets("Orbit").Cells(Zeile, Spalte).Value
TextPos1 = InStr(ZellenInhalt, Suchstring2)
Länge = Len(ZellenInhalt)
Ablaufdatum1 = Right(ZellenInhalt, (Länge - TextPos1))
TextPos2 = InStr(Ablaufdatum1, Suchstring3) + 34
Länge2 = Len(Ablaufdatum1)
Ablaufdatum2 = Right(Ablaufdatum1, (Länge2 - TextPos2))
TextPos3 = InStr(Ablaufdatum2, Suchstring4) + 11
Länge3 = Len(Ablaufdatum2)
LegalState = Right(Ablaufdatum2, Länge3 - TextPos3)
LegalState = Left(LegalState, 5)
Ablaufdatum2 = Left(Ablaufdatum2, 10)
Sheets("Report").Cells(k, 19).Value = Ablaufdatum2
Sheets("Report").Cells(k, 20).Value = LegalState
Überspringen:
End If
Next
End Sub
______________________________________________________________________________________________________________________
Mein Plan war jetzt die Excel Tabelle von Sheet "Report" und Sheet "Orbit" jeweils in einen Array zu packen. Das bekomme ich glaube ich auch noch hin...
Dim arrOrbit
Dim arrReport
arrOrbit = Range("A1:K1763").Value
arrReport = Range ("E1:G5055").Value
Die Forschleife möchte ich dann über:
For z= 2 to UBound(arrReport,1)
durch alle Zeilen des arrReport laufen lassen
Dann stoße ich aber auch schon an meine Grenzen... ich bekomme es einfach nicht gebacken einen Wert aus einem Arrayfeld auszulesen und in eine Variable zu packen. Ich wolle das wie folgt machen... Suchnummer= arrReport(z,7).Value... das funktioniert aber leider nicht! Kann mir hier jemand weiterhelfen??? Wie kann ich bestimmte Felder in einem Array ansprechen? Order war der Fehler dass ich den Array oben nicht dimensioniert habe?
Dann habe ich noch eine Weitere Frage:
Kann ich in einem Array auch einfach mit der Funktion "find" arbeiten? Oder müsste ich hier eine andere Funktion verwenden?
Ich hatte mir das so vorgestellt:
Set Gefunden1 = arrOrbit.Find(What:=Suchnummer, LookIn .... usw.)
Über sonstige Anregungen freue ich mich auch sehr, ich bin für alles offen :)
Vielen Dank
Beste Grüße
Perry
|