2017-05-14 5 views
1

Ich möchte ein eindimensionales Array redigieren, indem ich die ersten fünf Einträge "abschneide", da sie für eine spätere Logik entfernt werden müssen.ReDim des eindimensionalen Arrays wirft 'Index außerhalb des Bereichs'

  1. habe ich einen Datensatz aus einer Abfrage
  2. I As Variant ein Array-Cord() gefüllt (Größe 147). Jetzt: Größe von recordSet = Größe von daoRst3
  3. Ich versuche, die ersten fünf Elemente des Array recordSet zu entfernen.

Code:

Set daoRst3 = gDB.OpenRecordset("SELECT * FROM TEST") 

For i = 0 To daoRst3.Fields.Count - 1 
ReDim Preserve recordSet(0 To i) 
If daoRst3.Fields(i).Value = Empty Then 
    recordSet(i) = 0 
Else: recordSet(i) = daoRst3.Fields(i).Value 
End If 
Next 

'First five values in record set are not needed anymore. 
ReDim Preserve recordSet(5 To i - 1) 

Die letzte Zeile

ReDim Preserve recordSet(5 To i - 1) 

"Subscript out of range" wirft. Ich habe bereits überprüft, dass ich in diesem Moment 148 bin.

Was könnte das Problem sein?

Vielen Dank im Voraus!

+0

Sie mißdeuten Redim sowieso. Selbst wenn es erfolgreich ist, wird Redim (5 bis 10) die ersten fünf Einträge nicht ausschneiden, sondern vom Ende aus schneiden und die Indizierungsbasis ändern. –

Antwort

0

Ordnung dieses Mal habe ich es ...

Private Sub this() 

    Dim rs As DAO.Recordset 

    Set rs = CurrentDb.OpenRecordset("SELECT * FROM tmpCardList") 

    Dim msg As String 
    Dim myArray() As String 
    Dim array2() As String 
    ReDim array2(0 To rs.Fields.Count - 1) 
    Dim i As Long 

    For i = 0 To rs.Fields.Count - 1 
     Debug.Print ; rs.Fields(i).Name 
     array2(UBound(array2, 1) - i) = rs.Fields(i).Name 
    Next i 

    ReDim Preserve array2(UBound(array2) - 5) 
    ReDim myArray(0 To UBound(array2, 1)) 

    For i = 0 To UBound(array2, 1) 
     myArray(UBound(array2, 1) - i) = array2(i) 
    Next i 

    rs.Close 
    Set rs = Nothing 

End Sub 

Stellt sich heraus, Ihnen zu schreiben, haben Sie benutzerdefinierte Sache besitzen das Array zu sortieren. Ein bisschen extra Reifen. Nur realisiert, dass die endgültige Ausgabe umgekehrt ist, aber Sie könnten dies leicht rückgängig machen, indem Sie meine ursprüngliche Umkehrlogik replizieren.

Final Edit - diesmal mit weniger Tippen - WOOHOO

+0

Danke! Aber jetzt ist recordSet Variant (0 bis 142), was gut ist, aber es scheint, dass die letzten fünf Elemente aus dem Array entfernt wurden, nicht die ersten (beginnend mit recordSet (0), recordSet (1) und so) auf – mffm

+0

Das ist seltsam Ich kann nicht erklären, warum es tut, dass b/c mein Test Sub Ich schrieb, um herauszufinden, dies funktioniert richtig.Ill meine Antwort zu bearbeiten, um Ihnen zu zeigen, was ich –

+0

tatsächlich geöffnet öffne Zugriff und verwenden Sie Ihren Code zu versuchen und Finden Sie eine Lösung für Sie BRB –

Verwandte Themen