web-dev-qa-db-de.com

Wie kann ein Bereich aus Excel in einer Range-Variablen gespeichert werden?

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.

5
Priyank Thakkar

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.

20
enderland

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.

0
Josh

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
0
The_Barman

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))
0
Andrew Leach