ein mehrdimensionales Array zu schneiden versuchen, habe ich eine Reihe bekommt, die in einem Wörterbuch gespeichert ist, es Grenzen sind ist von (0 bis 29 und 0 bis 7) und speichert eine Mischung aus Streichern und Zahlen.Typenkonflikt, wenn
Ich versuche jedoch eine Spalte, um es jedes Mal, wenn ich mir einen Typenkonfliktfehler ohne Looping bekommen.
Ich habe gesehen, dass es eine Grenze für die Größe eines Arrays ist, dass Sie mit application.index verwenden können, aber es gibt keine Möglichkeit, in der Nähe dieser Grenze.
Dim tmp As Variant
' Get Array from Public Dictionary
tmp = FBList(214)
' Output a string of values from one column of array
Debug.Print Join(Application.WorksheetFunction.Index(tmp, 19, 0), ",")
ich Typenkonflikt immer in der letzten Zeile. Ich habe das erfolgreich mit anderen Arrays verwendet, aber diesmal nicht.
Update: Bestücken FBList
Dim i As Integer, j As Integer, NoCol As Integer, si As Integer, sKey As Integer Set cn = Nothing With FBList .RemoveAll .CompareMode = TextCompare End With With FBMap .RemoveAll .CompareMode = TextCompare End With If UserList.Count = 0 Or ThisUser = "" Then Call UserDL Call ConnecttoDB Set cmd = New ADODB.Command: Set rs = New ADODB.Recordset With cmd .CommandTimeout = 120 .ActiveConnection = cn .CommandText = "CSLL.Reports" .CommandType = adCmdStoredProc .Parameters.refresh .Parameters("@Alias").value = ThisUser On Error GoTo NoConnection Set rs = .Execute On Error GoTo 0 End With With rs For i = 0 To .Fields.Count - 1 If i = 0 Then FBMap.Add .Fields.Item(0).Name, "Key" Else FBMap.Add .Fields.Item(i).Name, i - 1 End If Next i NoCol = .Fields.Count - 2 If Not .BOF And Not .EOF Then .MoveLast .MoveFirst While (Not .EOF) With FBList ReDim UStemp(0 To NoCol, 0) As Variant sKey = rs("ID") If Not .Exists(sKey) Then For i = 1 To NoCol + 1 UStemp(i - 1, 0) = rs(i) Next i .Add sKey, UStemp ElseIf .Exists(sKey) = True Then si = UBound(FBList(sKey), 2) ReDim UStemp(0 To NoCol, 0 To si + 1) For j = 0 To si + 1 If j <= si Then For i = 0 To NoCol UStemp(i, j) = .Item(sKey)(i, j) Next i ElseIf j > si Then For i = 0 To NoCol UStemp(i, j) = rs(i + 1) Next i End If Next j .Remove sKey .Add sKey, UStemp End If End With .MoveNext Wend .MoveFirst End If End With Set cmd = Nothing: Set rs = Nothing: Set cn = Nothing
-------- @Vityata Betrachten Sie bitte dieses:
Option Explicit Public Sub ProofOfSlicingWithArray() Dim tmp(1 To 10, 1 To 10) As Variant Dim i As Long, j As Long ' Populate multi-dimensional array For i = 1 To 10 For j = 1 To 10 tmp(i, j) = Int((999 - 100 + 1) * Rnd + 100) Next j Next i Debug.Print Join(Application.Index(tmp, 5, 0), ",") End Sub
zeigen, wie Sie füllen 'FBList' – user3598756
Einfach nur neugierig - haben Sie Index mit Arrays verwendet? Ich dachte, es nur mit Bereichen arbeitet - https://support.office.com/en-us/article/INDEX-function-a5dcf0dd-996d-40a4-a822-b56b061328bd – Vityata
@Vityata [Haben Sie einen Blick auf diese] (https: //usefulgyaan.wordpress.com/2013/06/12/vba-trick-of-the-week-slicing-an-array-without-loop-application-index/) – Tom