私の職場のビジュアルマネジメントボードは、テレビにVMBを取り込むためのスプレッドシートを多数使用しています。これらのシートには多くのチャートがあります。私はVBで一生懸命働いているわけではないので、私に同行してください。VBObjectのExcelシートからChartObjectをエクスポートするときに空のbmpファイル
私の問題は、プログラムがアクセスしようとしているチャートが文字通りポップアップするExcelシートに表示されないためです。私は私が何を言っているのか分からないかもしれませんが、これはデータを取得して表示するためのひどい方法のようです。しかし、私はそれを修正する必要があります。
ここでは、Excelで表示されないグラフをエクスポートしようとしたときに作成されるbmpの例を示します(プライバシー上の理由からいくつかの情報が消去されています)ウィンドウ: 私の研究から、多くの人がグラフオブジェクトをエクスポートする前に、この問題を解決したことがわかりました。ここでやろうとしましたが、例外がスローされます。ここではドキュメントフォルダに存在することになっているチャートやBMPのを作るために輸出を扱うコードのセクション全体です:
Dim xlApp As Excel.Application
Dim xlWorkBooks As Excel.Workbooks
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheets As Excel.Sheets
Dim xlWorkSheet As Excel.Worksheet
xlApp = New Excel.Application
xlApp.Visible = True
xlWorkBooks = xlApp.Workbooks
xlWorkBook = xlWorkBooks.Open(ScoreCard)
xlWorkSheets = xlWorkBook.Sheets
For x As Integer = 1 To xlWorkSheets.Count
xlWorkSheet = CType(xlWorkSheets(x), Excel.Worksheet)
If xlWorkSheet.Name = My.Settings.Org Then
xlWorkSheet.ChartObjects(2).chart.Export(Filename:=path + "\Documents\OnTimeDelivery.bmp", FilterName:="BMP")
picOnTimeDelivery.Image = New System.Drawing.Bitmap(path + "\Documents\OnTimeDelivery.bmp")
xlWorkSheet.ChartObjects(3).chart.Export(Filename:=path + "\Documents\Quality.bmp", FilterName:="BMP")
picQuality.Image = New System.Drawing.Bitmap(path + "\Documents\Quality.bmp")
xlWorkSheet.ChartObjects(1).chart.Export(Filename:=path + "\Documents\NoDemandInventory.bmp", FilterName:="BMP")
picNoDemandInventory.Image = New System.Drawing.Bitmap(path + "\Documents\NoDemandInventory.bmp")
xlWorkSheet.ChartObjects(7).chart.Export(Filename:=path + "\Documents\ExcessInventory.bmp", FilterName:="BMP")
picExcessInventory.Image = New System.Drawing.Bitmap(path + "\Documents\ExcessInventory.bmp")
xlWorkSheet.ChartObjects(4).chart.Export(Filename:=path + "\Documents\Freight.bmp", FilterName:="BMP")
picFreight.Image = New System.Drawing.Bitmap(path + "\Documents\Freight.bmp")
xlWorkSheet.ChartObjects(5).chart.Export(Filename:=path + "\Documents\ShortagesByStart.bmp", FilterName:="BMP")
picShortagesByStart.Image = New System.Drawing.Bitmap(path + "\Documents\ShortagesByStart.bmp")
xlWorkSheet.ChartObjects(6).chart.Export(Filename:=path + "\Documents\ShortagesRootCause.bmp", FilterName:="BMP")
picShortagesRootCause.Image = New System.Drawing.Bitmap(path + "\Documents\ShortagesRootCause.bmp")
End If
Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkSheet)
Next
xlWorkBook.Close()
xlApp.UserControl = True
xlApp.Quit()
'Close connection to excel sheet
MyConnection.Close()
プログラムがクラッシュは、
picFreight.Image = New System.Drawing.Bitmap(path + "\Documents\Freight.bmp")
を設定しようとすると、無効なパラメータ例外を投げます
マイドキュメントフォルダ内のFreight.bmpが0kbファイルであるためです。次の画像がロードされている画像を変更すると(コメントアウトしてShortagesByStart.bmpをロードしようとすると)、同じ理由でクラッシュします。この点を過ぎたチャートはすべて共通のものが1つあり、画面には表示されません。それでも私は愚かな理由のようです。確かにそれは問題を引き起こさないようなもの!
まず私はxlWorkSheet
xlWorkSheet.Activate()
をアクティブ化しようとしたが、これは何も変わっていません。
だから私は、エクスポート文の前に
xlWorkSheet.ChartObjects(2).chart.Activate()
xlWorkSheet.ChartObjects(3).chart.Activate()
xlWorkSheet.ChartObjects(1).chart.Activate()
xlWorkSheet.ChartObjects(7).chart.Activate()
xlWorkSheet.ChartObjects(4).chart.Activate()
を追加することで、個々のChartObjectsをアクティブにしようとしました。これは実際に例外を投げた:
だから、私は立ち往生している。ワークシート内のチャートオブジェクトを適切にアクティブ化するにはどうすればよいですか?おそらく、これを引き起こす別の問題があります。
chartobjectsをアクティブ化しようとすると、ワークシートがアクティブでない可能性がありますか?そうすればVBAでもエラーが発生します。管理しているコードでは、まるであなたが得ているものと同じように 'COMException'です。 –
私はスレッドを5秒間スリープさせてから、chartobjectsのアクティベーションを試みましたが、例外はスローしました。それがあなたがアクティブであることを意味するなら、Excelウィンドウがアップしてロードを完了しました。スレッドをスリープする前にxlWorkSheet.Activate()を呼び出した後でも。コメントありがとう! –
スレッドをスリープする必要はありません。*何も変更されません。あなたがそのワークシートオブジェクトの何かを '.Activate()'しようとする前に 'xlWorkSheet.Activate()' *を呼び出す必要があることを意味します( 'ChartObject'または' Range ' - 通常は' Range'を有効にしたくないかもしれませんが)。 –