No.9ベストアンサー
- 回答日時:
ピクチャボックスに表示されてるのですね?
もう保存するだけなのですね?
でしたら・・・参考URLをどうぞ。
SavePictureで保存できます。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=168028
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=168028
No.8
- 回答日時:
クリップボード経由だとかなりしんどい思いをすると思います。
たしかAPIのCreateBitmapを使用するとできたと思ったのですが、その関数を使用するまでの手続きが面倒だった気がします。
ところでクリップボードを使用してるということは、グラフが描画されるまでを画面に表示してるのですか?チラチラした画面でやってるのですか?
それとも、画面を制御してますか?
もし画面に表示をしながらデータの更新&グラフの反映を行っているのであれば、それをクリップボードにコピーするのではなく、それをキャプチャしてピクチャボックスに描画&保存と言う手もありますが、それではだめですか?
個人的な意見かも知れませんが、クリップボード経由の処理はお勧めしません。
この回答への補足
んー、あまり良く意味が分からなかったんですが私の説明下手が影響しているのは分かった気がする、、。スミマセン、もう1度説明させて下さい。まず、細かい設定がされているグラフが保存されているExcelのファイルがあります。そこの決まった部分にデータをVBで送り込みます。データが反映されたグラフをコピーしてきてImage(Picture Box)などに貼り付けて表示しているのが今の状態なんですが、反映されたグラフを保存したいんです。JPEGかGIFかBITMAPで保存したいんです。何度も何度も本当にありがとうございます。
補足日時:2001/11/28 09:43No.7
- 回答日時:
サンプルです。
方法としてはOLEを使用します。
ツールボックスに「OLE」と書いたアイコンがありますよね。
あれを使用してOLEをフォームの中に作成してください。マウスでOLEを作成しようとすると、オブジェクトの種類をたずねてきますが、キャンセルしてしていいです。
それでオブジェクト種類が定まってないOLEが作成されました。その領域にEXCELが埋め込まれます。
※※注意※※
エクセルにデータを落としてますよね?
xlApp.Workbooks(1).Sheets(1).Cells(1,1).Value = "データ"
って感じですよね?それで、そのエクセルブックを保存する前に
xlApp.Charts(1).Activate
という感じで、グラフのシートを選択した状態にしてから保存してください。
creBitMap関数は、以前の書き込みを参考にしてください。
Option Explicit
'ブック名を宣言してますが、任意に変更してください
Private Const EX_BOOK_NAME = "C:\Test.xls"
'これはエクセル2000であることを示します。「8」という数字の部分はバージョンによって違います。
'EXCELのバージョンがわからないので、そちらで変更してください。わからなかったらレスください。
Private Const EX_CLASS_NAME = "Excel.Sheet.8"
'OLEに埋め込む
Private Sub Command1_Click()
With Me.OLE1
'ファイルを埋め込みます
.CreateEmbed EX_BOOK_NAME, EX_CLASS_NAME
'OLE更新
.Refresh
End With
End Sub
'ファイルとして保存
Private Sub Command2_Click()
Call creBitMap(Me.OLE1, "c:\test.bmp")
End Sub
Private Sub Form_Load()
With Me
'スケールをピクセルにする
.ScaleMode = vbPixels
'埋め込まれるEXCELは、OELのサイズによって自動調整を行う
.OLE1.SizeMode = vbOLESizeStretch
End With
End Sub
この回答への補足
大変大変大変お世話になっています。教えていただいたものを悪戦苦闘して自分なりに解釈して試していたのですが、クリップボードにコピーするところまで出来上がったんですけど、ソレをJPEG、GIF、BMPかなにかに保存したいんです。未だに実現できないんです。いつまでかかってるんだーなんてことまで言われちゃうし、、。単純にOLEなどを通さずに実現ってできるものですか??お忙しいところ申し訳ないんですけど宜しくお願いします。
補足日時:2001/11/27 18:59No.6
- 回答日時:
ごめんなさい。
勘違いしてました。さっきのサンプルは、グラフを書いた後、あるいはチャートコントロールやOLEオブジェクトとしてエクセルを使用した後にビットマップファイルにするサンプルです。
グラフにする部分も必要なのですね。
ちょっと今日は用事(麻雀)があるので、また明日以降。。。
グラフ描画のお奨めは
1番:市販のコントロール(マニュアルが付いていて便利。出費がかさむ)
2番:フォームやピクチャボックスに直描画(座標取りがめんどい)
3番:チャートコントロール(わりと使いやすいが、グラフがしょぼい)
4番:エクセルの差込(わかり易くて、メンテしやすい。エクセルまかせの部分が多いので、グラフサイズがなかなか定まらない。)
でもEXCELが入ってる事を限定してもよいのなら、バリエーション豊かなエクセル差込がいいかも?それができたら、2番以外は全てできるようになりそうな気がします。。。
グラフにしたいデータの項目名(仮名称でもいいです)
サンプルデータ
を教えてもらえたら、わかりやすいサンプルができるかも?
この回答への補足
えっと、なにから説明していいのか分かりませんが、、説明下手を許して下さいね。まず、VBフォームでなんかボタンを押すとテキストボックスに入っているデータをExcelを開き渡します。あ、その前にグラフっていろいろプロパティがあるじゃないですか。だから既にExcelファイルが存在している状態です。だからデータをExcelに渡すと既存のファイルが勝手にグラフにデータを反映してくれますよね、、。ココまではできたんですよ。こっからが問題でそしたら、そのできあがったグラフをVBに表示したいんですよ。宜しくお願いしますー。ところで昨日の麻雀はどうでしたか??
補足日時:2001/11/21 09:53No.5
- 回答日時:
VBを使って全自動(?)で、というのでなくてよいのでしたら、餅は餅屋、ということで、グラフソフトに書かせる、というのはどうでしょうか?
VBで出てきた計算結果をデータファイル(csvファイル的な形式がいいでしょう)としてセーブして、例えばSma4Winに読み込ませれば体裁もいろいろ調整できます。sma4winはメタファイルでの書き出しもできたはずです。
hukahireさんの用途には合わないかもしれませんが、以前やったことがあるので、ご参考までに。
No.4
- 回答日時:
OLEオブジェクトなら以下のソースで大丈夫だと思います。
あらかじめデザイン時に、フォームのScaleModeをピクセルにしてください。
あとはcreBitMap関数を呼ぶだけで可能なはずです。
欠点としては、実行時にオブジェクトの上に何らかのフォームやウィンドウが前面にあったりすると、それもファイルイメージに取り込まれます。
それを回避する方法もありますが、以前に作成したサンプルがどこかに消えちゃいました。。。
結構大変な処理だった記憶がありますので勘弁してください。。。
Option Explicit
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Sub Command1_Click()
'ファイルにしたいオブジェクトと、ファイルパスを指定
Call creBitMap(Me.OLE1, "c:\test.bmp")
End Sub
Private Sub creBitMap(inObj As Object, inFilePath As String)
Dim picWork As PictureBox
Dim lngL As Long, lngT As Long, lngW As Long, lngH As Long
'オブジェクトの左位置/上位置/幅/高さ を取得
With inObj
lngL = .Left: lngT = .Top: lngW = .Width: lngH = .Height
End With
'ピクチャボックスを作成
Set picWork = Controls.Add("VB.PictureBox", "picDmy")
'ピクチャボックスの初期設定
With picWork
.Appearance = 0
.AutoRedraw = True
.AutoSize = False
.BorderStyle = 0
.ScaleMode = vbPixels
.Width = lngW
.Height = lngH
End With
With picWork
'描画実行
Call StretchBlt(.hdc, 0, 0, lngW, lngH, Me.hdc, lngL, lngT, lngW, lngH, vbSrcCopy)
'画像の保存
Call SavePicture(.Image, inFilePath)
End With
'ピクチャボックスの破棄
Controls.Remove picWork
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelを閉じるときVBAプロジェ...
-
【VBA】ワークシート上に画像フ...
-
VBA エンターキーでイベントに...
-
カッコ付けのオブジェクト名を...
-
VBAでフォームのコントロールの...
-
文字列で小数点以下の0を削除し...
-
C#で画像をクリップボードへの...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
「PC Helpsoft Driver Updated...
-
uwscの画像認識に失敗します。
-
エクセルVBAで、MsgBox やInput...
-
Excelシート上のマクロを登録し...
-
iD
-
Accessでサブフォームの合計を...
-
お家デートをしててハグを長い...
-
Access 日付/時間型を検...
-
【Excel】特定の文字を含むセル...
-
excel スクロールしても常にボ...
-
IQテストの数列
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
【エクセルのマクロ】クリップ...
-
Accessのフォーム上にエクセル...
-
Excel VBAでマウスの左クリック...
-
文字列で小数点以下の0を削除し...
-
現在アクティブになっているオ...
-
日本語の文字化けを直す方法
-
エクセルVBAでセル番地を指定し...
-
【エクセル】複数のTextBoxに共...
-
ユーザーフォームのインポート...
-
VBAでフォームのコントロールの...
-
コードでオブジェクトを最前面に
-
ExcelのシートをAccessで表示し...
-
Access からオブジェクトとして...
-
PowerpointVBAで指定のShapeオ...
-
「SHDocVw」の意味
-
Excel2007 でのチェックボック...
-
サブルーチンにオブジェクト名...
-
txtNo,txtDate等の意味
おすすめ情報