2014-06-05 56 views
2

我有一個word文檔,我通過自動生成。我需要在此文檔中放置一個圖表(由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); 

所以我這是怎麼添加到Word Excel中生成的圖表。 唯一的問題是,圖表太大,我需要使它更小,所以它會適合更好的文字文檔,而無需用戶交互

我試圖記錄在word中完成的大小調整,宏說:

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); 

但是,顯然,德爾福:"Shapes" is not a method 所以也沒有任何以這種方式工作。

如果我改變

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

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

然後我得到:"Item" is not a property

請幫助。

謝謝

+2

你可能會發現早期綁定COM用武之地了。您至少有一個接口聲明,其中列出了所有可用的道具和方法。 –

+0

你的意思是使用Excel_TLB和Word_TLB? – user1137313

+0

是的。它至少可以清楚地說明用什麼語法來深入挖掘對象模型。 –

回答

2

您可以訪問的形狀是這樣的:

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

如果你閱讀我的問題上面,你會看到我已經試過,調試器說:「形狀」不是一種方法 – user1137313

+0

我看過我的答案上面你會看到我的代碼與你嘗試的不同。 –

+0

我的歉意。你是對的。而你剛剛救了我的一天。謝謝 – user1137313