ne peut pas affecter à la matrice de vba
Je suis en train de mettre en œuvre le code suivant et obtenez l'erreur -
cant attribuer à la matrice
Où est l'erreur ? Notez que si je tape Dim arrf() As Variant
au lieu de Dim arrf(5) As Variant
j'obtiens l'erreur -
incompatibilité de type
Public Function calc(ByVal value As Integer, ByVal num As Integer) As Variant()
Dim arr(5) As Variant
Dim x As Double
If value >= num Then
x = value - Application.RoundDown(value / num, 0) * num
arr(0) = x
arr(1) = num - arr(0)
arr(2) = Application.RoundUp(value / num, 0)
arr(3) = 1
arr(4) = Application.RoundDown(value / num, 0)
arr(5) = 1
Else
x = num - Application.RoundDown(num / value, 0) * value
arr(0) = x
arr(1) = value - arr(0)
arr(2) = Application.RoundUp(num / value, 0)
arr(3) = 1
arr(4) = Application.RoundDown(num / value, 0)
arr(5) = 1
calc = arr
End If
End Function
Sub cellsfunc()
With Application
.DisplayAlerts = False
.EnableEvents = False
.ScreenUpdating = False
End With
Dim lastrow As Integer
Dim counter As Integer
Dim arrf(5) As Variant
lastrow = Cells(Rows.Count, 2).End(xlUp).Row
For counter = 2 To lastrow Step 2
arrf = calc(Cells(4, counter), Cells(4, counter + 1))
Next counter
With Application
.DisplayAlerts = True
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
merci d'avance à tous les assistants
- vous avez besoin d'ajouter une condition où
num
est égal à 0, sinon vous aurez une erreur dans la lignex = value - Application.RoundDown(value / num, 0) * num
depuis que vous essayez de diviser être zéro - pour voir où est l'erreur, sélectionnez Pause Dans le Module de Classe dans les Options Générales de cpearson.com/excel/BreakInClassModule.aspx
Vous devez vous connecter pour publier un commentaire.
Vous avez
arrf
déclaré comme un taille fixe tableau:Un tableau de renvoi de fonction ne peut pas retourner un tableau de taille fixe seulement un processus dynamique. Vous avez juste besoin de la déclarer un tableau dynamique:
Il y a un problème dans votre fonction
calc()
: il ne renvoie une valeur quand il passe par l'else
, et pas leif
Il devrait probablement être ceci:
Si vous utilisez un tableau typé dans le script VBA toujours utiliser
ReDim..
taille de l'initialisation. Vous pouvez utiliser un tableau typé dans un dictionnaire de la valeur ou partout comme un variable.Vous devez déclarer
aarf
comme une variante pas un tableau. Le VBA convertira pour vous.Dim arrf As Variant