2017-06-27 1 views
0

Je travaille sur un Add-in pour Excel qui doit remplir une ou plusieurs cellules de la feuille de calcul avec les données du serveur. Je ne suivant:Remplissage de plusieurs cellules Excel avec des données de la fonction définie par l'utilisateur du complément (UDF)

  1. Création d'un Add-in (xlam) et créé la fonction définie par l'utilisateur: GetMyData()
  2. J'appelle cette fonction à partir d'une simple feuille de calcul Excel. Dans la cellule A1, j'ai entré la formule = GetMyData()
  3. Mon serveur renvoie le tableau JSON. Je suis capable d'analyser le JSON et essaie maintenant de remplir les lignes A1 et ci-dessous avec les valeurs que j'ai reçues du serveur. (dans ce cas, j'ai 20 valeurs, donc je veux remplir les cellules A1: A20).

Le problème est que selon Microsoft KB, une fonction définie par l'utilisateur est en mesure de modifier la valeur de la cellule active uniquement. https://support.microsoft.com/en-us/help/170787/description-of-limitations-of-custom-functions-in-excel J'ai essayé aussi d'exécuter le code ci-dessous qui change une seule cellule à une valeur hardcoded:

ActiveWorkbook.Sheets("DataSheet").Cells(1, 1).Value = '12312' 

Still - exception obtenir.

Quelqu'un peut-il aider à résoudre ce problème?

+0

le changement à un sous et d'appeler à partir d'un bouton. –

+0

Avoir la fonction retourner un tableau vertical, mettre en évidence toutes les cellules et le tableau entrer la formule dans toutes les cellules à la fois. –

+0

Vous pouvez utiliser une formule matricielle comme indiqué dans les réponses ci-dessous, mais vous devez connaître le nombre maximal d'éléments renvoyés, afin de pouvoir remplir la formule dans le nombre de cellules approprié. Si cela ne fonctionne pas dans votre cas, vous devrez trouver une approche différente. –

Répondre

2

Voici un exemple simple:

Public Function cerial(d As Date) 
    Dim bry(1 To 20, 1 To 1) As String 
    For i = 1 To 20 
     bry(i, 1) = CStr(d) & "_" & i 
    Next i 
    cerial = bry 
End Function 

Il crée un tableau de 20 articles.

Il y a un petit truc pour l'utiliser dans la feuille de calcul.

Sélectionnez par exemple E1 à E20. Cliquez ensuite dans la barre de formule et entrez la formule de tableau:

=cerial(TODAY()) 

enter image description here

formules Array doivent être saisies avec Ctrl + Maj + Entrez plutôt que juste le Entrez clé. Si cela est fait correctement, la formule apparaîtra entre parenthèses dans la barre de formule.

REMARQUE:

Dans cet exemple, le tableau interne bry() est en deux dimensions.

2

Avoir la fonction retourner un tableau vertical.

Par exemple:

Function GetMyData() As Variant() 
Dim test() As Variant 
test = Array(1, 2, 3, 4) 
GetMyData = Application.Transpose(test) 

End Function 

Mettez ensuite en surbrillance toutes les cellules que vous avez besoin avec le haut comme la cellule active.

![enter image description here

ensuite mettre cette formule dans la barre de formule:

=GetMyData() 

et appuyez sur Ctrl-Maj-Entrée au lieu de Enter pour entrer dans la formule tableau.

enter image description here

Si vous choisissez plus que le tableau renvoie vous obtiendrez des erreurs.


Ou vous pouvez, en utilisant le retour Array, utiliser pour traiter avec l'erreur et entrer normalement, mais il exécute la fonction pour chaque fois qu'il est mis dans une cellule.

Mettre cela dans la première cellule:

=IFERROR(INDEX(GetMyData(),ROW(1:1)),"") 

ensuite copier/glisser vers le bas jusqu'à ce que vous obtenez des blancs

enter image description here