Erreur lors de la définition PlotArea.Largeur dans Excel, VBA (Excel 2010)

Je suis en train de vivre une erreur dans une sous-routine en essayant de définir les plotarea.la largeur de la propriété d'un graphique.

Erreur lors de la définition PlotArea.Largeur dans Excel, VBA (Excel 2010)

Les autres dimensions également provoquer cette erreur si je commente la ligne précédente(s).
Il n'y a pas de ActiveChart, pas de sélection, etc. Le message d'erreur spécifique est ceci: "-2147467259 (80004005) la Méthode 'Width' de l'objet 'PlotArea" a échoué"

C'est estompe moi pour plusieurs raisons:

  • En mode debug, F8 pour parcourir le code, l'erreur ne se produit PAS.
  • Autant que je sache, "largeur" n'est pas une "méthode", mais une "propriété" de l'organigramme plotarea, de sorte que même le message d'erreur est assez ambiguë.

Toute pensée? Voici autant de code que je peux partager, le ChartSizeMedium sous-programme dans son intégralité, et un mannequin extrait pour vous montrer comment je suis en train de créer le tableau et en le passant à sous qui définit la taille & certaines autres propriétés avant de passer à une autre fonction qui ajoute à la série de données pour le graphique.

    Option Explicit
Private Sub EstablishChartObject()
Dim cObj as ChartObject
Set cObj = ActiveSheet.ChartObjects.Add(Left:=30, Top:30, Width:=740, Height:=300)
ChartSizeMedium cObj.Chart, "Integer", "Example Chart Title"
End Sub
Private Sub ChartSizeMedium(cht As Chart, NumType As String, Optional chtTitle As String)
'Subroutine to make a consistent size chart
Dim s As Long
With cht
'Add a chart title if one exists.
If Len(chtTitle) > 0 Then
.HasTitle = True
.chartTitle.Characters.Text = chtTitle
End If
'Create the default chart Legend
.HasLegend = True
With .Legend
.Position = xlTop
.Font.Size = 11
.Font.Bold = True
End With
'Format the axes
.Axes(xlValue).MajorGridlines.Format.Line.Visible = msoFalse
.Axes(xlValue).MinorGridlines.Format.Line.Visible = msoFalse
'Format the size of the chart
With .Parent
.Width = 740
.Height = 396
End With
With .PlotArea
.Width = 640    '<---- THIS LINE TRIGGERS THE ERROR
.Height = 280
.Left = 30
.Top = 30
End With
End With
'Some charts start with more than one series container, so make sure they're gone:
With cht
Do Until .SeriesCollection.Count = 0
s = .SeriesCollection.Count
.SeriesCollection(s).Delete
Loop
End With
End Sub

Mise à JOUR le 12 Décembre 2012

- Je supprimer tous les non-problématique de code et d'utiliser seulement les PlotArea avec bloc, dans la même routine, j'ai également essayé le réglage du type de graphique (plusieurs valeurs) et comme indiqué dans cet exemple, l'ajout manuel d'une série de données avant de tenter de définir la PlotArea dimensions, mais l'erreur persiste:

Option Explicit
Private Sub EstablishChartObject2()
Dim cObj As ChartObject
Dim sh As Worksheet
Set sh = ActiveSheet
Dim srs As Series
Set cObj = sh.ChartObjects.Add(Left:=30, Top:=30, Width:=740, Height:=300)
Set srs = cObj.Chart.SeriesCollection.NewSeries
srs.Values = "={1,3,5,7,4}"
cObj.Chart.ChartType = 57
With cObj.Chart.PlotArea
.Width = 100   '<---- THIS LINE TRIGGERS THE ERROR
.Height = 280
.Left = 30
.Top = 30
End With
End Sub
juste jeter ce passe-t-il pour certains types de graphique? peut-être le 1 qui n'a pas une parcelle de la zone (si ça existe encore... )
merci pour la suggestion, mais par défaut, ChartType est de 57 (xlBarClustered), qui certainement n'ont PlotArea 🙂 Debug.Print cObj.Chart.PlotArea.Width renvoie une plotarea.largeur de 718.
Ce fil traite d'un problème similaire et un délai d'actualisation question: excelforum.com/excel-programming-vba-macros/.... Vous devez vous connecter pour voir Andy Pape de la solution, donc je ne sais pas ce que c'est, mais comme il Andy, je suis sûr qu'il fonctionne. Ce fil dit qu'ils l'ont résolu en tournant ScreenUpdating sur: vbaexpress.com/forum/archive/index.php/t-17251.html. Ne sais pas si cela s'applique à vous.
pouvez-vous commenter cette width ligne pour voir si l'erreur saute n'importe quelle autre ligne?
ScreenUpdating=True dans la présente sous déjà, il n'est donc pas un problème de le rallumer (temporairement) bien que j'avais vu cette suggestion lors de la tentative de google de l'erreur, et essayé de jouer avec ScreenUpdating en vain.

OriginalL'auteur David Zemens | 2012-12-11