2016-05-19 152 views
1

我想從Word公式粘貼到Excel 2007中下面的Excel VBA代碼實現這一點:麻煩粘貼Word公式到Excel

Sub ExpandEqn(MyText As String) 

Dim appWd As Word.Application 
Dim docWd As Word.Document 
Dim objRange As Word.Range 
Dim objEq As OMath 

Set FindActiveCell = Application.ActiveCell 
GetRange = CStr(FindActiveCell.Address()) 
ActiveCell.Offset(1, 0).Activate 
NextActiveCell = CStr(FindActiveCell.Address()) 

Set appWd = CreateObject("Word.Application") 
appWd.Visible = False 
Set docWd = appWd.Documents.Add 
Set objRange = docWd.Application.Selection.Range 
objRange.Text = MyText 
docWd.Application.Selection.OMaths.Add objRange 
docWd.Application.Selection.OMaths.BuildUp 
docWd.Application.Selection.WholeStory 
docWd.Application.Selection.Copy 

Range(NextActiveCell).Select 
ActiveSheet.PasteSpecial Format:="Picture (Enhanced Metafile)",Link:=False,DisplayAsIcon:=False 

appWd.Quit (False) 
Set docWd = Nothing 
Set appWd = Nothing 

End Sub 

不幸的是,粘貼式是有很多的Word文檔的寬度空的空間例如

enter image description here

有沒有辦法在短短的公式,粘貼,而沒有空間?如果圖像作爲位圖粘貼,它工作正常,但我需要它是一個增強型圖元文件。

非常感謝和最良好的祝願。

+2

由於您的代碼已經正常工作,只需調整Excel應用程序中的圖片大小。 –

+1

爲什麼不直接在Excel中創建公式?它具有與Word相同的插入方程式功能和對象模型... –

+0

感謝那位加里的學生。不幸的是,它不能很好地調整大小。整個畫面,包括空間,都在調整。無論如何,如果可能的話,我需要以編程方式正確粘貼它。 – Geddes

回答

2

好的,在我與你討論後,我更好地理解了你想要的東西。我相信這應該可以解決問題。謝謝你的耐心。

Sub ExpandEqn(MyText As String) 
    Dim appWd As Word.Application 
    Dim docWd As Word.Document 
    Dim objRange As Word.Range 
    Dim objEq As OMath 
    Dim FindActiveCell As Range 
    Dim intColumnWidth As Integer 
    Dim intRowHeight As Integer 

    Set FindActiveCell = Application.ActiveCell 
    GetRange = CStr(FindActiveCell.Address()) 
    ActiveCell.Offset(1, 0).Activate 
    NextActiveCell = CStr(FindActiveCell.Address()) 

    Set appWd = CreateObject("Word.Application") 
    appWd.Visible = False 
    Set docWd = appWd.Documents.Add 
    Set objRange = docWd.Application.Selection.Range 
    objRange.Text = MyText 
    docWd.Application.Selection.OMaths.Add objRange 
    docWd.Application.Selection.OMaths.BuildUp 
    docWd.Application.Selection.WholeStory 
    docWd.Application.Selection.Copy 

    ActiveCell.Offset(1, 0).Activate 
    NextActiveCell = CStr(FindActiveCell.Address()) 
    Range(NextActiveCell).Select 
    intColumnWidth = Range(NextActiveCell).ColumnWidth 
    intRowHeight = Range(NextActiveCell).RowHeight 
    docWd.Application.Selection.Columns.Width = intColumnWidth 
    docWd.Application.Selection.Rows.Height = intRowHeight 

    ActiveSheet.PasteSpecial Format:="Picture (Enhanced Metafile)", Link:=False, DisplayAsIcon:=False 

End Sub 

基本上我在這裏做的是粘貼項目然後執行粘貼之前的單元格的當前寬度和高度。然後該對象將以與您粘貼到其中的單元相同的尺寸進行粘貼。

+0

謝謝你。不幸的是,這段代碼不會粘貼爲方程式,例如文本「3x^2 + 5」。我真的需要它是一個格式正確的方程,包括分數線,平方根等。 – Geddes

+1

如果您使用允許的字符集,這應該不是問題。你嘗試過xlPasteFormula嗎? – Karlomanio

+0

再次感謝@Karlomanio。我真的需要這個方程作爲一個圖像。此外,某些方程式將非常難或不可能僅顯示爲文本 - 例如:[link](https://labs.vmware.com/wp-content/uploads/2013/06/VMW-SS-MARVASTI-EQUATION- 2。JPG) – Geddes

0

我有一個解決辦法 - 但它是相當可怕:

  • 在Word中創建的公式,並將其複製到剪貼板。
  • 將它作爲位圖粘貼到Excel中,它工作正常 - 沒有額外的空間。
  • 獲取位圖的寬度,然後將其刪除。
  • 回到Word,調整邊界的寬度並重新複製公式。
  • 返回到Excel,粘貼爲增強型圖元

這些都可以通過編程完成,但必須有一個更好的辦法!

+1

我以爲你想要它作爲一個位圖。爲什麼使用增強型圖元文件?你可以在插入之前使用列的寬度嗎?這可以爲你節省一個額外的步驟...對不起,我遲到了回到你身邊。 – Karlomanio

+0

謝謝@Karlomanio - 我確實說過我需要一個增強型圖元文件。這是因爲圖像可能需要調整大小和/或打印到高質量。我不確定'使用列的寬度'是什麼意思,請注意,所有這些都需要以編程方式完成。再次感謝您的持續幫助和建議。 – Geddes