2011年1月29日土曜日

[EXCEL]Chart.Export makes 0byte File

こんちは。Azureの続きをやるやる詐欺続行中の部隊長です。
今回もAzureはちょっとおいといて、絶賛進行中のプロジェクトから1ネタ。


現在進行中のプロジェクトで、某社販促グッズとして提供している某Excelブック(以下ツール)の改修を行っております。なんのこっちゃですね。

このツールでは集計したデータでグラフを作成し、それをフォームで表示するために一旦gifにExportしているんですね。

こんな感じで。

'' グラフタイトル設定
        .ChartObjects(1).Chart.ChartTitle.Text = GRAPHTITLE_ALL & " n=" & .Range(VALUE_N).Value        
        '' 画像ファイルのExport
        .ChartObjects(1).Chart.Export ThisWorkbook.Path & GRAPHPICT_ALL

このコードはExcel2000から2007まで問題なく動作します(97以前も動くかもしれんけど)
で、基本的に2010でも動くはず。

と思ったら、フォーム側のImageにロードする時にエラーが・・・


何故だと思ったら、出力されたファイルが0kbなんですね。空っぽです。
ググっても殆ど情報は出てきません・・・

そこで試しに簡単なサンプルを書いたら問題なく動作します。なんで?




対象のグラフが載ってるシートは非表示・・・!サンプルは表示・・・!


というわけでVisibleにしてやったらちゃんと動いた、というわけでした。
しかし、このブックはパスワードでロックされていて、表示するにはUnLockしなければならない・・・


というわけでこうゆう事になりました

'' Visible Befor Export (for Excel2010)
     ThisWorkbook.UnProtect password:="XXXXXXXXX"
        .Visible = xlSheetVisible
        
        '' 画像ファイルのExport
        .ChartObjects(1).Chart.Export ThisWorkbook.Path & GRAPHPICT_ALL
        
        .Visible = xlSheetHidden
     ThisWorkbook.Protect password:="XXXXXXXXXX"
        '' --

これはちょっと行き当たりばったり過ぎだろJK・・・
つかこんなとこにパスワード書くなよ。書き直し。


教訓:非表示シートを弄る際はお気をつけ下さい。

0 件のコメント:

コメントを投稿

とある規格化されたコード

世の中こんなもんまで規格化されていますよ、というお話 https://ja.wikipedia.org/wiki/ISO_5218 この辺が大変良くできた、ためになる(?)解説記事です。(長い https://qiita.com/aoshirobo/items/32deb...