web-dev-qa-db-fra.com

Comment stocker une plage d'Excel dans une variable Plage?

Je lis des cellules d'Excel en utilisant 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

Il génère une erreur, une variable d'objet ou une variable de bloc non définie. Comment prendre cette plage dans une variable? Guidez-moi s'il-vous-plaît.

5
Priyank Thakkar

Lorsque vous utilisez un objet Range, vous ne pouvez pas simplement utiliser la syntaxe suivante:

Dim myRange as Range
myRange = Range("A1")  

Vous devez utiliser le mot clé set pour affecter des objets Range:

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

Notez que chaque fois qu'une plage est déclarée, j'utilise le mot clé Set


Vous pouvez également autoriser votre fonction getData à renvoyer un objet Range à la place de Variant, bien que cela ne soit pas lié au problème que vous rencontrez.

20
enderland

Déclarez votre dim en tant que variante et extrayez les données comme vous le feriez d'un tableau. c'est à dire. 

Dim y As Variant
y = Range("A1:B2")

Maintenant, votre plage Excel est 1 variable (tableau), y

Pour extraire les données, appelez la position du tableau dans la plage "A1: B2" ou faites votre choix. par exemple.:

Msgbox y(1, 1)

Cela retournera la case en haut à gauche dans la plage "A1: B2".

0
Josh

Définir ce que GetData est. Pour le moment ce n'est pas défini.

Function getData(currentWorksheet as Worksheet, dataStartRow as Integer, dataEndRow as Integer, DataStartCol as Integer, dataEndCol as Integer) as variant
0
The_Barman

Qu'est-ce que currentWorksheet? Cela fonctionne si vous utilisez la variable ActiveSheet intégrée.

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