ich versuche im Programmbeispiel das for each... zu umgehen,
es also schneller zu machen!
Aber etwas funktionert nicht. "Laufzeitfehler 458, Variable ..nicht unterstützen Typ der Automatisierung".
Kopiere ich eigentlich in den Variant die Range-Werte, also erzeuge ich einen
Variant Array oder erzeuge ich eine Reihe von Range-Objekten und VBA konvertiert es...? Ich glaub ich habe einen Knoten im Hirn?
Was muss ich beachten oder kann ich nicht die "for each loop" durch z.B.: CopyMemory ersetzen?
Option Explicit
Dim Arr As Variant
Private Function CreateRangeArray(ByVal WorksheetName As String, _
ByVal WhichColumn As Long) As Variant
Dim CurrentRange As Range
Select Case WhichColumn
Case Is <= 0
GoTo ExitFunction
End Select
With Application.Worksheets(WorksheetName)
CreateRangeArray = .Range(.Columns(WhichColumn).Rows(2), _
.Columns(WhichColumn).EntireColumn.Find(What:=vbNullString))
End With
ExitFunction:
End Function
Private Sub RunMe()
Dim Element As Variant
Dim a() As Variant
Dim i As Long
Arr = CreateRangeArray("Tabelle1", 3)
ReDim a(UBound(Arr))
Call kernel32.CopyMemory(a(0), VarPtr(Arr), UBound(Arr) + 1)
MsgBox a(1)
Exit Sub
ReDim a(UBound(Arr))
For Each Element In Arr
a(i) = Element
i = i + 1
Next
MsgBox a(3)
End Sub