Ich lese einige Zellen von Excel mit VBA.
Function getData(currentWorksheet as Worksheet, dataStartRow as Integer, _
dataEndRow as Integer, DataStartCol as Integer, dataEndCol as Integer)
Dim dataTable as Range
dataTable = currentWorksheet.Range(currentWorksheet.Cells(dataStartRow, _
dataStartCol), currentWorksheet.Cells(dataEndRow, dataEndCol))
getData = dataTable
EndFunction
Es gibt einen Fehler, eine Objektvariable oder eine nicht gesetzte Blockvariable. Wie nehmen Sie diesen Bereich in eine Variable ein? Bitte führen Sie mich.
Wenn Sie ein Range
-Objekt verwenden, können Sie nicht einfach die folgende Syntax verwenden:
Dim myRange as Range
myRange = Range("A1")
Sie müssen das Schlüsselwort set
verwenden, um Range-Objekte zuzuweisen:
Function getData(currentWorksheet As Worksheet, dataStartRow As Integer, dataEndRow As Integer, DataStartCol As Integer, dataEndCol As Integer)
Dim dataTable As Range
Set dataTable = currentWorksheet.Range(currentWorksheet.Cells(dataStartRow, DataStartCol), currentWorksheet.Cells(dataEndRow, dataEndCol))
Set getData = dataTable
End Function
Sub main()
Dim test As Range
Set test = getData(ActiveSheet, 1, 3, 2, 5)
test.select
End Sub
Beachten Sie, dass ich bei jeder Deklaration eines Bereichs das Schlüsselwort Set
verwende.
Sie können auch zulassen, dass Ihre getData
-Funktion anstelle einer Range
ein Variant
-Objekt zurückgibt, obwohl dies nicht mit dem Problem zusammenhängt, das Sie haben.
Deklarieren Sie Ihr Dim als Variante und ziehen Sie die Daten wie von einem Array ab. d.h.
Dim y As Variant
y = Range("A1:B2")
Ihr Excel-Bereich besteht jetzt aus 1 Variablen (Array), y
Um die Daten abzurufen, rufen Sie die Array-Position im Bereich "A1: B2" oder wie immer Sie möchten. z.B.:
Msgbox y(1, 1)
Das obere linke Feld wird im Bereich "A1: B2" angezeigt.
Definieren Sie, was GetData ist. Im Moment ist es nicht definiert.
Function getData(currentWorksheet as Worksheet, dataStartRow as Integer, dataEndRow as Integer, DataStartCol as Integer, dataEndCol as Integer) as variant
Was ist currentWorksheet
? Es funktioniert, wenn Sie die integrierte Variable ActiveSheet
verwenden.
dataStartRow=1
dataStartCol=1
dataEndRow=4
dataEndCol=4
Set currentWorksheet=ActiveSheet
dataTable = currentWorksheet.Range(currentWorksheet.Cells(dataStartRow, dataStartCol), currentWorksheet.Cells(dataEndRow, dataEndCol))