2016-12-21 2 views
0

Merci pour votre aide !!Baies multidimensionnelles ReDim dans Type défini par l'utilisateur dans EXCEL vba

Ma question est la suivante. J'ai une section de code qui a l'intention d'obtenir des données d'une table et de les stocker dans un type défini par l'utilisateur. Puisque la table peut changer de taille, l'idée est de donner dynamiquement la taille aux éléments du type. Le type a deux tableaux unidimensionnels et un tableau bidimensionnel. J'ai des problèmes avec le tableau à deux dimensions. Excel VBA peut-il prendre en charge cette fonctionnalité?

Private Type testing_thermo_data 
'one dimesional arrays 
temperature() As Double 
pressure() As Double 
'two dimensional array 
composition() As Double 
End Type 

sub read_from_sheet_to_type() 

Dim data as testing_thermo_data 
Dim a,b,i as integer 
'a and b are determined with some other function (it works), so to simplify I will set them to a number 
a=20 
b=10 
'Now I will reDim the elements of the UDT to the proper size 
'One dimension array with a=10 elements 
ReDim data.temperature (a) as double 
'One dimension array with a=10 elements 
ReDim data.pressure (a) as double 
'Two dimensional array. Matriz of a=10 by b=20 
ReDim data.composition (1 To a, 1 To b) as double 

For i = 0 To (a- 1) 
data.temperature(i) = Application.ActiveSheet.Cells(i + 3, 1).Value 
data.pressure(i) = Application.ActiveSheet.Cells(i + 3, 2).Value 
    For j = 0 To (b-1) 
    'This is the line where my code crashes 
    data.composition(i, j) = Application.ActiveSheet.Cells(i, j + 3).Value 
    Next j 
Next i 
end sub 

$ Une fois que j'exécute le code, j'obtiens l'erreur suivante comme indiqué dans l'image. Erreur d'exécution '1004': erreur définie par l'application ou objet défini- enter image description here

+1

data.composition n'a pas d'article (0,0); le début commence à (1,1). –

+0

Salut Scott Craner, merci pour votre réponse. J'ai essayé ce que vous avez mentionné et le code fait toujours la même chose. Ne fonctionne pas encore –

+0

Même chose avec Cells() il n'y a pas de cellule à la ligne 0 ça commence par 1 –

Répondre

0

je compris. Le problème était que le c où je lisais les données de ont été formatés comme général plutôt que le numéro. C'est pourquoi il ne lisait pas les données de la feuille de calcul Excel. J'ai testé cela en affectant une valeur constante "500" à l'élément data.composition (i, j) et cela a fonctionné. Voici ce que j'ai fait pour tester cette hypothèse.

for i=1 To a 
For j = 1 To b 
'This is the line where my code crashes 
data.composition(i, j) = 500 
Next j 
Next i 

Une fois le problème identifié, j'ai corrigé le code. Voici à quoi ressemble le code final. Cela fonctionne parfaitement. Merci de votre aide!

Option Base 1 
Private Type testing_thermo_data 
'one dimesional arrays 
temperature() As Double 
pressure() As Double 
'two dimensional array 
composition() As Double 
End Type 

sub read_from_sheet_to_type() 

Dim data as testing_thermo_data 
Dim a,b,i as integer 
'a and b are determined with some other function (it works), 
'to simplif I will set them to a number 
a=20 
b=10 
'Now I will reDim the elements of the UDT to the proper size 
'One dimension array with a=10 elements 
ReDim data.temperature (a) as double 
'One dimension array with a=10 elements 
ReDim data.pressure (a) as double 
'Two dimensional array. Matriz of a=10 by b=20 
ReDim data.composition (1 To a, 1 To b) as double 

For i = 1 To (a) 
data.temperature(i) = Application.ActiveSheet.Cells(i + 3, 1).Value 
data.pressure(i) = Application.ActiveSheet.Cells(i + 3, 2).Value 
    For j = 1 To (b) 
    'This is the line where my code crashes 
    data.composition(i, j) = Application.ActiveSheet.Cells(i, j + 3).Value 
    Next j 
Next i 
end sub