tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルExcel.Shape グループ化について
記事No1787
投稿日: 2005/06/03(Fri) 15:21
投稿者ぐる
[OSのVer]:WindowsXP SP2  [VBのVer]:VB.NET  

いつも参考にさせてもらってます。

ここのExcelTipsを参考に.netから要素等をExcelに投げグラフを作り、
PictureBoxに取得させるまではできたのですが、
望む結果としてはグラフとあるオブジェクトを同じPictureBoxに表示させたいのです。
別々にShapeとChartを宣言し作成後PictureBoxに貼り付けても当然どちらかが上書きされます。
そこでグループ化をさせようとしているのですが、以下のポイントでエラーが発生します。

            Dim xlShapes As Excel.Shapes
            Dim xlShape1 As Excel.Shape
            Dim xlShape2 As Excel.Shape
            Dim xlShape3 As Excel.Shape
            Dim xlShapeRange As Excel.ShapeRange
            Dim xlShapeAL As New ArrayList
            xlShapes = xlSheet.Shapes
            xlShapes.AddShape(Office.MsoAutoShapeType.msoShapeOval, 103, 190, 6.75, 6.75)
            xlShape1 = xlShapes.Item(1) 'ここより上の場所でグラフを宣言していてそのIndexは1
            xlShapeRange = xlShapes.Range(2)
            xlShapeRange.Fill.ForeColor.SchemeColor = 8
            xlShape2 = xlShapes.Item(2)
''''''''''''''''''''''↓
            xlShapeAL.Add(xlShape1)'xlShapeAL.Add(1)'obj指定もindex指定もだめでした
            xlShapeAL.Add(xlShape2)'xlShapeAL.Add(2)'
            xlShapeRange = xlShapes.Range(xlShapeAL)'エラーポイント
''''''''''''''''''''''↑
            xlShape3 = xlShapeRange.Group()
''''''''''''''''''''''↓
            xlShape3.CopyPicture(Appearance:=Excel.XlPictureAppearance.xlScreen, _
                     Format:=Excel.XlCopyPictureFormat.xlBitmap)
      '以下PictureBox貼り付け 省略
''''''''''''''''''''''↑
開放は省略

テストでマクロ記録されたVBA文を見て
(省略)shapes.range(array(obj名1,obj2名)).select
で複数選択になっているようでしたので
ArrayListではなくArrayも使用してみたのですがよくわかりませんでした。

どなたかグループ化に関してご教授願います。
また、グループ化しないでいけるやり方もありましたらよろしくおねがいします。

[ツリー表示へ]
タイトルRe: Excel.Shape グループ化について
記事No1802
投稿日: 2005/06/08(Wed) 17:42
投稿者ぐる
グループ化に成功しました

とりあえずお察しの通り完全イメージに見せるにはメタファイルでなければならないので
Picには貼れず無駄骨 と
ここにもあるとおり無理       とのことですがしばらく足掻いてみようと思います

お騒がせしました
| λ.....

[ツリー表示へ]
タイトル貼れました
記事No1804
投稿日: 2005/06/08(Wed) 18:53
投稿者ぐる
しつこいようですがPictureBoxに貼れましたので今までの含めて報告

まずグループ化については

Dim xlShapes As Excel.Shapes
Dim xlShape As Excel.Shape
Dim xlShapeRange As Excel.ShapeRange
Dim ShapeString(グループにしたいShape数意) 'as 以降の指定はなし
xlShapes = xlSheet.Shapes

ShapeString(0) = "Shapeの固有名 Index(1から)" '固有名はグラフならChart 楕円ならOval
など
ShapeString(Shape数) = "固有名 Shape数+1"

xlShapeRange = xlShapes.Range(ShapeString)
xlShape = xlShapeRange.Group

xlShape3.CopyPicture(Appearance:=Excel.XlPictureAppearance.xlScreen, _
                     Format:=Excel.XlCopyPictureFormat.xlPicture) 'クリップボード投げ
'開放省略

にて成功しました。
上ではクリップボードにビットマップで投げずメタファイルを投げてます。
ご存知の通り、PictrueBoxでは使用できません。
よって当方が検索したところ
hhttp://dobon.net/さん(TOPページ)の
hhttp://dobon.net/vb/dotnet/graphics/getclipboardmetafile.html
というずばりなページが見つかりました。
下のほうのDllImportあたりのVB.NETコード参考

似たような症状で困ってる人なんてまずいないと思われますが参考にどうぞ
無理やりで複雑にしてる気がしますが

以上失礼しました

[ツリー表示へ]
タイトルRe^2: Excel.Shape グループ化について
記事No1806
投稿日: 2005/06/08(Wed) 22:05
投稿者花ちゃん
> ここにもあるとおり無理       とのことですがしばらく足掻いてみようと思います

すみません。どこに書いてあったでしょうか?
hhttp://www.bcap.co.jp/hanafusa/dotnet/Excel04.htm  の部分の事でしたら
VB6.0 と同じようにコードを書いてもと言う事です。

最後に、補足として 別途、クリップボード関係のAPI を使用すればメタファイル形式で
取得することもできます。 と書いてはいるのですが。

Win32 API 関数を使ってメタファイルを取得しても、メタファイルの特徴を活かした
使い方が、.NET の場合思い浮かばなかったので、サンプルは載せてはいないのですが、
(というか、メタファイルとしての拡大・縮小の方法が解らなかったので)

[ツリー表示へ]
タイトルRe^3: Excel.Shape グループ化について
記事No1807
投稿日: 2005/06/09(Thu) 04:05
投稿者ぐる
とりあえず ですが、ですがとこられましてもとても返しづらいです。
下のほうに気付かなかった私が悪いのですけど。>API云々
無理、の話でしたら「6.0のようなコードで無理」なのはあえて書くようなことじゃないかなと思い、
勝手に.netの話のことと解釈してしまってました。申し訳ない。

一つのPictureBoxで複数のオブジェクト(グラフ・楕円・線)を
同時に(imageとして)出力したかっただけで、
説明不足で非常にややこしく見えてたのかもしれませんが・・

人様のページで他人のリンクを張って「参考に」など、
運営者にとっては非常に不愉快極まりないものですね・・
思慮不足でした。お騒がせして申し訳ない。

[ツリー表示へ]
タイトルRe^4: Excel.Shape グループ化について
記事No1814
投稿日: 2005/06/10(Fri) 00:16
投稿者花ちゃん
誤解しないで下さいね。私がどこかに変な事を書いていたのかとお聞きしただけですから、
以前、掲示板で質問があってそれを答える形で書いたもので誤解を招いたようですね。
(VB6.0 でAPI関数を使って実現していた事は、.NET でもほぼ同様にできるので)

尚、ここに無いサンプルの紹介のリンクならかまいませんので、ご自由にリンクして
下さい。

ここに掲載しているサンプルと同じサンプルを他のサイトへリンク貼って紹介されると
悲しくはなりますが、今回は私の所では掲載していないサンプルなので。

[ツリー表示へ]
タイトルRe^5: Excel.Shape グループ化について
記事No1815
投稿日: 2005/06/10(Fri) 00:58
投稿者ぐる
リンクの件了解しました。

VBからのAPIについて全く無知で.netからかなとか思ってましたので
6.0でも実現してたすら思い浮かびませんでした。

要はもっと調べろってことですね。
しかしまた助けを請いに来るかもしれないのでそのときはまた・・

[ツリー表示へ]