VBAにグラフィックスメソッドはありますか_?



◇-?VBAにグラフィックスメソッドはありますか_?-なな-03/13-00:30(88)-No.333563
 ┗?!Re:VBAにグラフィックスメソッド...-通りすがりの者-03/13-01:33(87)-No.333576
  ┗?!!Re:VBAにグラフィックスメソッ...-なな-03/13-02:08(87)-No.333582
   ┗?!!!Re:VBAにグラフィックスメソッ...-通りすがりの者-03/13-03:51(85)-No.333589
    ┗?!!!【多分解決】Re:VBAにグラフィ...-なな-03/14-01:12(64)-No.333784

▲このページのトップに戻る
333563VBAにグラフィックスメソッドはありますか_?なな 2006/03/13-00:30

メーカー名:自作PC 自分で製作
OS名:WindowsXp Professional
パソコン名:(自作なので型番はありません?)
ソフト名:Microsoft EXCEL2000
ソフト関連:ソフトの詳細を記入 実装の仕様について
--
お久しぶりにお世話になります☆

質問は、VBAにグラフィックスメソッドはあるか?です。

Excel2000のVBAでユーザーフォームを作りまして、
そのフォーム上にグラフィックを描写させたいと思ってます。
これは画像データを表示したいわけではなく、
ラインやサークルなどのオーソドックスなグラフィック描写です。

ということで、あたしの記憶が確かならば、
フォームとピクチャコントロールには
LineメソッドやCircleメソッドがあり、
フォーム上に直接円を描いたり線を引いたり出来たように思うのですが、
やってみるとさっぱりで"そんなものはないよ"とエラーを返されてしまいました。

具体的にはLineメソッド、Circleメソッド、あとはコントロールのプロパティに
Penなどの設定があったように記憶しているのですが、
もしかしたらこれはVB6での記憶かもしれません…。

ネット上でも検索して回ってみましたが、VB6に関してはいろいろ見つかるものの、
VBAとなると有用な情報を見つけることが出来ませんでした…。

EXCEL2000のVBAには、このグラフィック描写のメソッドは存在しないのでしょうか?
また、存在しないとしたら、なにか代替手段がありますでしょうか?


お手数ですが、どなたかVB6とVBAにお詳しい方がいらっしゃいましたら
どうかご教授頂けたらと思います。ななでした♪

▲このページのトップに戻る
333576Re:VBAにグラフィックスメソッドはありますか_?通りすがりの者 2006/03/13-01:33

記事番号333563へのコメント
ななさんは No.333563「VBAにグラフィックスメソッドはありますか_?」で書きました。

 直接の回答ではないが・・・
 (コントロールは詳しくないもので)

 EXCELにはマクロの記録という機能があるよね。
 その機能を使って、図形描画のアイコンを使って線を引いたり
 円を描いたりしてみよう。
 その操作によってマクロに図形描画のVBAが記録されると思う
 ので、それを参考にすればいいじゃないかと思うのだが。

▲このページのトップに戻る
333582Re:VBAにグラフィックスメソッドはありますか_?なな 2006/03/13-02:08

記事番号333576へのコメント
アドバイスありがとうです☆

あたしもそういう方法を良く使っています。
ただ、その方法ではオリジナルのフォーム(ウインドウ)上に描写することは出来ません。
ワークシート上で試すと、Shapeオブジェクトによって描写がなされるようでした。
このオブジェクトはユーザーフォームにはないんだろうと思いますので、
やっぱりこの方法以外のものを探さなくちゃいけません…。

ぅぅん…簡単な描写メソッドがあったら
ポチッと使いたかったのだけどなぁ…




▲このページのトップに戻る
333589Re:VBAにグラフィックスメソッドはありますか_?通りすがりの者 2006/03/13-03:51

記事番号333582へのコメント
ななさんは No.333582「Re:VBAにグラフィックスメソッドはありますか_?」で書きました。

 VBにあるようなラインコントロールを使ってお手軽に・・・
 という意味なら残念ながら無いようですが。

  http://www.keep-on.com/excelyou/2003lng4/200308/03080049.txt

 自前でAPIを使った関数(?)を使うとか、イメージコントロールのデバイン
 コンテキストを取得して線を描くという方法になるみたいですよ。
 (検索して出てきた情報を見る限り)

 【参考URL】
  http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200511/05110073.txt
  http://www.neo-tech-lab.com/VBA_Draw.htm#◆グラフィックスを描画するには..

▲このページのトップに戻る
333784Re:VBAにグラフィックスメソッドはありますか_?なな 2006/03/14-01:12

記事番号333589へのコメント
うーん、うーん。
やっぱり、それしかなさそうデスネ…(苦笑

結論は、「グラフィックメソッドはナイ」ですね…。
でそれに代替するものも、ナイと(^^;
ラインコントロールも、ナイと…(T^T;


APIでやれば"一応出来る"だろうなぁとは思ってました。
ただ、APIを使うのはやはり処理が面倒で…w
というより、避けて通れないウインドウやデバイスコンテキストのハンドルの取得で、
ともすれば編集中のEXCELがダウンする危険を伴う点があたしとしては気に入りませんで…。


と、いうことで。
では以下、結果のご報告です。

さくさくとAPIの方法を試してみましたっ♪(ぉぃ
「GDI32.dllのLineToとMoveToでフォームに直接描写する」という方法です。
ちょうどその参考URLで話されているような感じで作りました。

結論を言うととりあえず「線の描写」は成功しました!
ただし、その直線状にある(上にあるはずの)コントロールにまで"線"がベタぁーっ?!w
うぅ、こ…これは思いもよらなかったわっ…(汗

これは全コントロールの再描写を行わせる(具体的にはVisibleプロパティの
瞬間的オンオフしか手段が無いんですけどぉ…)ことで回避して…と思ったら、
今度は線をすべてクリアする術がない…うぅ、とにかく手間のかかる子だこと…。

これは空白文字列のラベルをフォームいっぱいに配置しておいて、
クリアしたいときにスペース文字を代入するか、一瞬サイズを変えてやることで
解決できそうでした。

他にも、VBAでは単位がすべて「ポイント」の固定という厭らしさだったり、
APIはすべてピクセルなのでそれを毎度ピクセル変換する手間があったり、
Screenオブジェクトがないので当然dpiが取得できず仕方なく96dpiで決め打ちさせられたり、
ハンドルの取得・開放あたりでやっぱり何度もEXCELを落っことしちゃったりと
散々な目に会いつつ…何とかテストプログラムは動きました。


いちおー、代替はAPIでなんとかなりそう…かな?
でもやっぱり手間がすごいヨ…

今作ったのは1つの線描写と1つのコントロールだけですが
これが大量の線と大量のコントロールとなると、コーディングもですが
マシンへの負担も相当な高負荷になってしまいそうです…。

お手軽なグラフィックメソッドがあればイチバンで
AutoRedrawやclsが出来るのってやっぱ便利なのね……
これを全部手動で制御しなきゃと思うと…あぁ眩暈が…(TーT;

あ、ほんとのイチバンはね、ラインコントロールがあればちょーラクだったの…w
別のコントロールにも被ったりしないしぃ…
でもそれも無さそうですし。

無いものを嘆いてても始まらないですね。APIで頑張ってみマス!w


通りすがりの者さん、ありがとうございましたー!

この質問はAPIの方法で解決とさせて頂いておきます。
でもラクな方法があったなら、皆様ぜひお書き添え下さいな〜
しばらくは見ておりますゆぇ♪

では、感謝のななでしたっ☆

A1.本ページは参考になりましたか? 又はアドバイスがありますか?
解決 参考になった 参考にならなかった アドバイスする

A2.何度目の訪問ですか?
初めて来た   数度目(2〜4) 5回以上来ている   管理人:

A3.何か一言どうぞ(アドレスは書くことができません)

A4.アドレスがあればどうぞ(1つまで)


↑↑↑↑よろしければ押してください↑↑↑↑

何か一言(本ページで参考になったならないを含めて残してあります)
◎:解決 ○:参考になった ×:参考にならなかった !:アドバイスあり

参考回数投稿日時何か一言
×初めて2007/10/27/(土) 22:18:17質問者の「そんなことは最初から知っていた、もっと凄いやり方で解決したぞ」風な回答が不快ですMSIE6/Win2000