EXCELで選択した複数の図形を取得するには?

解決


kita  2008-04-03 08:43:31  No: 30401

ExcelのSheetに作成した図形や画像の位置調整を行なうソフトをつくりたいのですが、選択した複数の図形を取得する方法がわかりません。
[Sever]コンポーネントを用いてExcelを操作しています。
VBのSelection.ShapeRangeのようなものが使えれば良いと思うのですが。
選択図形が1つの場合は、以下の方法で取得できました。
ExcelApplication.Selection[0];

Wordに対し複数選択した図形の取得方法として、以下のようにすることでできましたがExcelでは同様な方法はできないのでしょうか。

選択図形数の取得
  WordDocument.Application.Selection.ShapeRange.Count;
選択図形名の取得
  WordDocument.Application.Selection.ShapeRange.Item(index).Name;

環境
D6Pro+Excel2000    Windows2000


Ru  2008-04-04 18:15:56  No: 30402

Serverコンポーネント使うとこんな感じですかね?

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;

begin

  ExcelApplication1.Connect;
  ExcelApplication1.Visible[0] := False;
  ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open(
                             ファイル名,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             0) as _Workbook);
  ExcelWorksheet1.ConnectTo(ExcelWorkbook1.activesheet as _Worksheet);

  ShowMessage('件数 ' + IntToStr(ExcelWorksheet1.Shapes.Count));
  for i := 1 to ExcelWorksheet1.Shapes.Count do
  begin
    ShowMessage(ExcelWorksheet1.Shapes.Item(i).Name);
  end;

  ExcelWorksheet1.Disconnect;
  ExcelWorkbook1.Disconnect;
  ExcelApplication1.Disconnect;
  ExcelApplication1.Quit;

end;


Ru  2008-04-05 03:16:28  No: 30403

すいません。勘違いしてました。選択図形の取得なんですね。
VBAのヘルプ見て探しましたがそれらしいのがないですね。
無理なのかな?


kita  2008-04-05 13:27:46  No: 30404

Ruさん、ありがとうございます.
VBAでは、Selection.ShapeRangeをつかえば選択図形を取得できそうな感じがするのですが。無理なのでしょうか?


親の親はダレ?  2008-04-05 19:16:13  No: 30405

スマイリィフェイス? そないなモンあるんかい。
var
  i, cnt: Integer;
begin
  ..........
  with ExcelWorksheet1 do begin
   Shapes.AddLine(0, 0, 200, 200);
   Shapes.AddShape(Office_TLB.msoShapeOval, 100, 100, 150, 150);
   Shapes.AddShape(Office_TLB.msoShapeDiamond, 250, 0, 50, 50);
   Shapes.AddShape(Office_TLB.msoShapeDonut, 250, 50, 50, 50);
   Shapes.AddShape(Office_TLB.msoShapeSmileyFace, 250, 100, 50, 50);
   Shapes.AddShape(Office_TLB.msoShapeHeart, 250, 150, 50, 50);
   Shapes.AddShape(Office_TLB.msoShapeSun, 250, 200, 50, 50);
   Shapes.AddShape(Office_TLB.msoShapeMoon, 250, 250, 50, 50);
   Shapes.SelectAll;
   cnt := Variant(Parent).Parent.Selection.ShapeRange.Count;
// ShowMessage(IntToStr(cnt));
   for i:=1 to cnt do begin
    ShowMessage(Shapes.Item(i).Name);
   end;
  end;
end;


大差ない?  2008-04-05 19:48:05  No: 30406

あるある、大蟻。

× ShowMessage(Shapes.Item(i).Name);

○ ShowMessage(Variant(Parent).Parent.Selection.ShapeRange.Item(i).Name);


kita  2008-04-05 21:36:25  No: 30407

親の親はダレ?さん、大差ない?さん
選択した図形を取得することができました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加