2016-11-24 1 views
0

Cher communauté Overflowformule avec VBA pour une plage de cellules

`d aiment ajouter une formule certaines cellules (4, x), pour chaque feuille (sh). Je cours le sub dans une boucle for-up dans le code principal, qui traverse chaque colonne (a). J'ai essayé beaucoup de choses, mais malheureusement, mon code juste ne courrai pas:

Sub InsertFormula(ByVal sh As Worksheet, ByVal a As Long) 

Formel = "=TEXT(" & a & "$1;'TTT')" 
sh.Cells(4, a).Formula = Formel 

End Sub 

EDIT:

Sub InsertFormula(ByVal sh As Worksheet, ByVal a As Long) 

Formel = "=TEXT(R1C" & a & ",""TTT"")" 
sh.Cells(4, a).FormulaR1C1 = Formel 

End Sub 

Merci beaucoup, fonctionne parfaitement

+0

Pourquoi "ne fonctionnera pas"? Quel message d'erreur obtenez-vous? –

+1

vous avez défini 'a' comme votre colonne, mais vous l'envoyez à votre' Sub' ici comme 'Long' (comme un nombre). dans votre 'Formel =" = TEXT ("& a & "$1; 'TTT')" 'vous en avez réellement besoin comme une lettre de votre colonne, donc vous devez convertir votre colonne du nombre à une lettre –

+0

comment puis-je faire cela? –

Répondre

1

En VBA vous avez besoin des virgules pour fonction séparée arguments dans les formules indépendamment de vos paramètres locaux. (Vous pouvez le contourner en utilisant .FormulaLocal mais je ne le recommande pas car il pourrait ne pas fonctionner sur d'autres machines)

En outre, comme l'a noté Shai Rado, vous utilisez un nombre comme nom de colonne. Dans ce cas, j'utiliser le format R1C1 de sorte que vous n'avez pas à convertir le nombre dans une lettre, à savoir

Formel = "=TEXT(R1C" & a & ",""TTT"")" 
sh.Cells(4, a).FormulaR1C1 = Formel 
1

Cela prend la lettre de la colonne par opposition au numéro de colonne. Aussi j'ai changé la formule à utiliser " au lieu de ' et de corriger la formule TEXT que ces deux font partie de la raison pour laquelle la formule ne parvenait pas

Sub InsertFormula(ByVal sh As Worksheet, ByVal Col As String) 
    Dim Formel As String 

    Formel = "=TEXT(" & Col & "$1,""TTT"")" 
    sh.Range(Col & "4").Formula = Formel 

End Sub 
Sub test() 
    Call InsertFormula(ActiveSheet, "A") 
End Sub 
+0

Allait mettre à jour cela avec la notation 'R1C1' ainsi que' A1' cependant @arcadeprecinct l'a déjà posté.Choisissez celui que vous préférez – Tom

0

Juste essayer de surmonter votre problème: mettre Formel directement sans utiliser mot-clé .formule

Sub InsertFormula(ByVal sh As Worksheet, ByVal a As Long) 

Formel = "=TEXT(R1C" & a & ",""TTT"")" 
sh.Cells(4, a) = Formel 

End Sub