質問

私は自動化により生成する単語文書を持っています。私はこの文書の中にチャート(Excelで生成された)を置き、文書の余白を超えないようにチャートのサイズを変更する必要があります。どうやってやるの?Visual Basicはマクロを録音するときにこのアクティビティを記録しませんので、進む方法についてはわかりません。

あらゆる考え?

私のアプローチは次のとおりです。

var
MsWord,E:OleVariant;
name:Variant;
...
try
    MsWord := GetActiveOleObject('Word.Application');
  except
    try
      MsWord := CreateOleObject('Word.Application');
      MsWord.Visible := False;
    except
      Exception.Create('Error');
    end;
  end;
MSWord.Documents.Add;
MSWord.Selection.TypeText('some text');
...
E:=CreateOleObject('Excel.Application');
E.Workbooks.Add;
E.ActiveWorkbook.Sheets.Item[1].Select;
name:=E.Charts.Add.Name;
E.Charts.Item[name].ChartType:=1;
E.ActiveWorkbook.Charts.Item[name].SetSourceData(Source:=E.ActiveWorkbook.Sheets.Item[1].Range['A1:B6'],PlotBy:=2);

E.ActiveWorkbook.Charts.Item['Chart1'].Select;
E.Selection.Copy;
MSWord.Selection.PasteSpecial(,,,,wdPasteOleObject);
.

だからExcelで生成されたチャートの単語に追加する方法です。 唯一の問題は、チャートが大きすぎることです、私はそれを小さくする必要があるので、それはユーザーの操作なしで単語文書に適しているでしょう

私は単語で行われたサイズ変更を録音しようとしました、そしてマクロは次のように言いました:

ActiveDocument.Shapes("Object 2").Select
Selection.ShapeRange.ScaleWidth 0.81, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 0.81, msoFalse, msoScaleFromTopLeft
.

だから私は試してみました:

  MSWord.ActiveDocument.Shapes('Object 2').Select;
  MSWord.Selection.ShapeRange.ScaleWidth(0.51, 0, 0);
  MSWord.Selection.ShapeRange.ScaleHeight(0.51, 0, 0);
.

しかし、明らかに、Delphiのために:"Shapes" is not a method だからそれはこのようには機能しません。

変更した場合

 MSWord.ActiveDocument.Shapes('Object 2').Select;
.

 MSWord.ActiveDocument.Shapes['Object2'].Select;
.

それから私はGET:"Item" is not a property

助けてください。

ありがとう

役に立ちましたか?

解決

このような形状にアクセスすることができます。

MsWord.ActiveDocument.Shapes.Item('Object 2').Select;
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top