2012-12-16 4 views
1

J'ai donc une feuille appelée "Dashboard" sur laquelle j'ai plusieurs graphiques, mais chaque semaine j'ajoute des données aux tables sur lesquelles ces graphiques sont basés. La deuxième feuille qui contient les données de cette table est "Totaux historiques" et les données que je souhaite figurer dans les colonnes A à E (cela inclut les étiquettes et les en-têtes). J'essaie d'automatiser la mise à jour des graphiques, et je ne sais pas très bien pourquoi cela ne fonctionne pas. Voici le code que j'ai jusqu'à présent:Erreur définie par l'application ou définie par l'objet

Sheets("Dashboard").Select
ActiveSheet.ChartObjects("Chart 4").Activate
ActiveChart.SetSourceData Source:=Sheets("Historical Totals").Range("A1", Range("E1").End(xlDown))

J'ai essayé notre seperating la gamme, et il sélectionne les données appropriées, donc je ne sais pas vraiment où je fais l'erreur.

+1

Appelez 'Sheets (" Dashboard "). Activez aussi bien avant de commencer. –

+0

J'ai donc ajouté ce commentaire, et il a toujours donné la même erreur. Je n'appellerais pas 'Sheets (" Dashboard "). Select' fait la même chose que ça? – JakeMWP

+0

quelle version de XL utilisez-vous? – whytheq

Répondre

2

essayez les opérations suivantes. Vous devez faire référence à la feuille de données chaque fois que vous utilisez Range:

Sheets("Dashboard").ChartObjects("Chart 4").Activate 
ActiveChart.SetSourceData _ 
     Source:=Sheets("Historical Totals").Range(Sheets("Historical Totals").Range("A1"), _ 
       Sheets("Historical Totals").Range("E1").End(xlDown)) 
+0

Merci! Cela ne l'a pas vraiment fait pour moi - m'a donné l'erreur "l'objet ne supporte pas cette propriété ou méthode", mais j'ai juste appelé le graphique pour l'activer, et ensuite fait 'SetSourceData' avec' ActiveChart'. Travaillé comme un charme avec ça. Merci! – JakeMWP

+0

réponse mise à jour. – InContext

0

En supposant que vous avez seulement la table dans les worksheet « totaux historiques » Je habituellement aller xlUp plutôt que xlDown mais ce qui suit est effectivement la même que Philip Une réponse de Barnes:

Sub setArea() 

With Excel.ActiveWorkbook 
     '.Sheets("Dashboard").Select '<==no need to select for the code to execute 
     .Sheets("Dashboard").ChartObjects("Chart 1").Activate 
End With 

With Excel.ActiveWorkbook.Sheets("Historical Totals") 
    Excel.ActiveChart.SetSourceData _ 
         Source:=.Range(_ 
            .Cells(1, 1), _ 
            .Cells(.Cells(.Rows.Count, 5).End(Excel.xlUp).Row, 5) _ 
            ) 
End With 

End Sub 
+0

Le problème avec 'xlUp' est que je ne connais pas la taille de la table à un moment donné. Il grandit chaque semaine, alors j'essaie de le rendre dynamique en déterminant la taille des données en vérifiant quelles informations sont réellement là. – JakeMWP

+0

... hmmm ne semble pas avoir testé mon code: ou comprendre ce qu'il fait. Il va effectivement de la dernière rangée de la feuille (ligne 1,048,576 dans ma version de XL) et ensuite jusqu'à la rangée suivante avec des données dedans !! Donc pas de problème si vos données passent de 50 lignes à 70 lignes, il trouvera toujours la dernière rangée de données !! L'avantage d'utiliser 'xlUp' est que si vous avez 50 lignes de données mais que 'E30' est vide et que vous essayez d'utiliser' xldown' depuis 'E1', alors il ne trouvera certainement pas' E50' – whytheq

Questions connexes