2009-02-12 10 views
1

J'ai créé un ensemble de tableaux 2D dans Excel, et j'ai écrit une fonction pour mettre les mêmes données dans une copie de chacun. Je ne suis pas tout à fait sûr que je vais corriger les parties fastidieuses de la syntaxe.Passer et recevoir un tableau à partir de la fonction

La fonction s'appelle 'Fill', l'ancien tableau 'Old' et le nouveau 'New'. J'utilise le nom 'Block' pour le nom de la variable de passage.

Ainsi, la ligne dans mon code est:

New = Fill(Block:=Old()) 

Et la première ligne de ma fonction est:

Function Fill(Block() As Variant) As Variant 

Cela me donne une erreur d'incompatibilité de type du tableau 'vieux', disant qu'il attend un tableau. Me conduit à penser que la fonction est OK, et en attendant le type correct, mais ne pas le recevoir.

Qu'est-ce qui me manque?

Répondre

1

Il a été un moment que je l'ai fait la programmation VBA, mais je pense ce qui suit est plus susceptible d'être correcte:

NewArray = Fill(OldArray) 

Function Fill(Block As Variant) As Variant 

    Fill = Block 

End Function 
+0

Votre modification fonctionne! Merci beaucoup! –

0

Voici quelques notes sur la raison pour laquelle vous avez obtenu l'erreur que vous avez fait. Si une fonction attend un type particulier, vous devez déclarer la variable en tant que type.

Sub FillThis() 
'Declare OldArray as Variant ' 
'because that is what the function ' 
'requires. ' 
Dim OldArray As Variant 
'Similarly ...' 
Dim StringPart As String 

    'ByRef, so the variable will be ' 
    'changed by the function. ' 
    'Note that ByRef is the default. ' 
    Fill OldArray 

    For i = 0 To 4 
     Debug.Print OldArray(i) 
    Next 

    StringPart = "Part 1" 
    GetString StringPart 
    Debug.Print StringPart 
End Sub 

'In this example, Fill is not being returned, ' 
'so there is no need to declare it as anything ' 
Function Fill(ByRef OldArray As Variant) 
'The Array must be dimensioned ' 
ReDim OldArray(4) 

    For i = 0 To 4 
     OldArray(i) = i + 1 
    Next 

End Function 

Function GetString(ByRef StringPart As String) 
    StringPart = StringPart & " Add a Bit" 
End Function