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
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;
すいません。勘違いしてました。選択図形の取得なんですね。
VBAのヘルプ見て探しましたがそれらしいのがないですね。
無理なのかな?
Ruさん、ありがとうございます.
VBAでは、Selection.ShapeRangeをつかえば選択図形を取得できそうな感じがするのですが。無理なのでしょうか?
スマイリィフェイス? そないなモンあるんかい。
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;
あるある、大蟻。
× ShowMessage(Shapes.Item(i).Name);
○ ShowMessage(Variant(Parent).Parent.Selection.ShapeRange.Item(i).Name);
親の親はダレ?さん、大差ない?さん
選択した図形を取得することができました。
ありがとうございました。
ツイート | ![]() |