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.
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.
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".
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
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))