2015-08-12 2 views
0

J'essaie d'inclure des barres d'écart-type personnalisées dans un graphique en utilisant VBA, mais j'obtiens toujours une erreur d'exécution 13 "incompatibilité de type" dans la ligne qui ajoute réellement les barres. Je crois qu'il a un problème avec mon objet range (rngStD), mais je ne sais pas pourquoi. J'utilise ce VBA dans Access, mais j'ai créé une application Excel (xlApp), qui est où les données sont maintenant et où les graphiques sont créés.Création de barres d'écart-type personnalisées dans VBA à partir d'Access

'Start of relevant code 
xlApp.Sheets("Monday").Select 
Set rngAv = Range(Cells(numRows + 2, 3), Cells(numRows + 2, 26)) 
Set rngStD = Range(Cells(numRows + 3, 3), Cells(numRows + 3, 25)) 
xlApp.Sheets("Graphs").Select 
'Creates graph for average usage with standard deviation at each point 
Set oChart = xlApp.Worksheets("Graphs").ChartObjects.Add(600, 10, 500, 250).Chart 
    oChart.SetSourceData Source:=rngAv 'xlApp.Selection 
    oChart.Type = xlLine 
    oChart.HasTitle = True 
    oChart.ChartTitle.Text = "Average Usage for Mondays" 

'At this point the code works and correctly creates the above graph 

With oChart.FullSeriesCollection(1) 
    .HasErrorBars = True 
    .ErrorBars.Select 
    'Error is on the next line, I believe it doesn't like the "Amount:=rngStD" 
    .ErrorBar Direction:=xlY, Include:= _ 
     xlBoth, Type:=xlCustom, Amount:=rngStD.Value 
    .ErrorBars.Select 

End With 

EDIT: ajouté .Value à la fin de rngStD.Value dans la dernière ligne. Maintenant, le montant est fixé à 50 au lieu des valeurs individuelles pour chaque point dans la gamme. Je ne sais pas pourquoi ou comment le réparer.

Répondre

0

Si rngStD a été déclaré en tant que plage, vous devez lui ajouter .Value. Cela transmettra la valeur stockée par la plage et non l'objet plage lui-même.

+0

Belle prise. Cependant, maintenant avec le code mis à jour il n'y a pas d'erreur mais toutes mes barres d'erreur standard sont définies à 50, au lieu des valeurs dans l'objet range. Une idée de comment réparer ça/pourquoi ça fait ça? – andruemily

0

Vous devez transmettre l'adresse de la plage en notation R1C1, précédée d'un signe égal. Essayez cette syntaxe:

.ErrorBar Direction:=xlY, Include:=xlBoth, _ 
    Type:=xlCustom, Amount:="=" & rngStD.Address(, , xlR1C1, True), _ 
    MinusValues:="=" & rngStD.Address(, , xlR1C1, True)