Excel 2010 VBAはチャートを削除します

私は余裕時間にExcel VBAアプリケーションをサポートしています。私はプロの開発者ではなく、プロセスエンジニアを製造しています。

アプリケーションのチャート部分はExcel 2007で問題なく動作しています。私の会社はExcel 2010にアップグレードしており、同じアプリケーションでワークシート上のチャートとのやり取りに問題が発生しています。

Thieの問題は棒グラフです。アプリケーションは、リセット時に、以下のコードを使用してグラフから系列を削除します。私はこれを行って、新しいデータをインポート/処理している最中に、最新のデータで最新でないチャートがユーザに提示されることはありません。

        'select the histogram chart
        Sheets(sChartSheet).Select
        ActiveSheet.ChartObjects("Chart 15").Activate

        Call PBarCaption("Delete Existing Histogram Series")
        'remove any existing series
        For i = 1 To ActiveChart.SeriesCollection.Count
            ActiveChart.SeriesCollection(1).Delete
        Next i

グラフ化される新しいデータが外部データファイルからインポートされるときに新しい系列を作成します。

    'add series for histogram
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).Values = "=HistogramData!$B$5:$B$29"
    ActiveChart.SeriesCollection(1).XValues = "=HistogramData!$A$5:$A$29"
    ActiveChart.SeriesCollection(1).charttype = xlColumnClustered

2010年の問題は、VBAコードが実行されるときに、定義されていない系列がなくてもチャートが存在するのではなく、棒グラフ全体が「紛失」(削除)されていることがあります。

「失われた」グラフは、一連のチャートを自動的に作成してPowerPointにコピーするVBAコードの別のセクションを介して、基本コードの連続実行が実行されたときに発生します。

チャートのシーケンスを手動で実行すると、問題なく動作します。自動的に実行されると、第2チャーターシーケンスの生成時に、チャートが削除されています。

私は誰かがExcel 2007から2010バージョンへのチャートの変更に精通しており、助けてくれることを願っています。

ありがとう、

レン

3
グラフが実際に削除されていることを確認できますか、またはグラフが目に見えなくなっている可能性はありますか?現在のシートのChartObjectsコレクションの長さは実際に減少しますか? Excel 2003からExcel 2007へのチャート操作コードを持つ既存のワークブックをアップグレードしたとき、私たちのコードでは時々グラフが消えてしまいましたが、それらはバックグラウンドに残っていました。それらがまだ残っている場合、これは奇妙に聞こえるかもしれませんが、コントロールパネルに行き、「印刷スプーラ」と呼ばれるサービスを停止してから開始すると、再び表示されることがあります。
追加された 著者 Michael Kingsmill,
この問題に対する最善の解決策は、Excel 2003バージョンから潜在的な "破損"を取り除くために、すべてのチャートをゼロから新しい2010年のチャートとして削除し再作成したコードを書くことでした。
追加された 著者 Michael Kingsmill,
マイケル、ありがとう。私は、これを元に戻すために来週、ある時間を持つことを願っています。 2010年のマクロレコーディング中にグラフ作成オブジェクトが公開されているので、完全なコントロールが可能になるたびに、チャート全体を削除し、最初から作成し直すことができます。私は最初に2007バージョンに移行するときにそれをやりたいと思っていましたが、チャーティングオブジェクトが変更され、オブジェクトモデルがマクロレコーディングで公開されていないため、少し苦労しました。私はこれでどこかになると更新を投稿します。
追加された 著者 NitroLen,

2 答え

それはあなたのコードを再作成して、あなたがアクティブでない/選択していない、そして変更していない "アクティブな"オブジェクトに依存するかもしれません:あなたがそれを期待していないときに、

Dim cht As Chart

Set cht = ActiveWorkbook.Sheets(sChartSheet).ChartObjects("Chart 15").Chart
Do While cht.SeriesCollection.Count > 0
    cht.SeriesCollection(1).Delete
Loop

With cht.SeriesCollection
    .NewSeries
    With .Item(1)
        .Values = "=HistogramData!$B$5:$B$29"
        .XValues = "=HistogramData!$A$5:$A$29"
        .ChartType = xlColumnClustered
    End With
End With
2
追加された
これは確かに優れたデザインです。例えば、隠しシートのチャートを選択するとランタイム例外が発生するため、ワークシートオブジェクトを決して選択しない方がよいでしょう。また、画面の更新をオフにすることなく、画面のちらつきを防ぎます。しかし、これはあなたの問題を解決するためにはあまり効果がありません。
追加された 著者 Michael Kingsmill,
良いベストプラクティス。私はそれをします。選択したオブジェクトを使って直接作業を最小限に抑えようとしていますが、それは機能していました。画面の更新は他のタスクに移動していました。
追加された 著者 NitroLen,

私はチャートとのすべてのやりとりを、選択するのではなく「使う」ように改めました。より良いプログラミング。

残念ながら、それは問題を解決しませんでした。

Print Spoolerに関するコメントは有用であり、スクリーンとプリンタにチャートがどのように表示されるかの相互作用に関連しているように見えます。

リファレンス

私の組織内の他の多くのユーザーが異なるプリンタを使用しているため、MS Officeの印刷ドライバをデフォルトで試してみると、解決策が改善されませんでした。

この問題は、VBAコードを使用してワークシートの要素をPowerPointにコピーするときに発生しました。プリンタ、bitmatを使用してコピーしていた:

rSlideArea.CopyPicture (2)  

スクリーンビットマップとしてコピーするよう変更されました:

rSlideArea.CopyPicture Appearance:=xlScreen, Format:=xlBitmap

興味深いことに、ビットマップ形式のPowerPointファイルは、作業が簡単で、サイズも小さかった。

その結果、PowerPointの画像はスクリーンフォーマットでは「きれい」ではありませんが、アプリケーションはすぐに優先されるExcel v2010で動作します。

助けてくれたすべての人に感謝します。

0
追加された