2013-05-14 118 views
0

我期望讓我的MS Word VBA宏與Word 2007,2010和2013兼容,而無需下載MS Office對象所有機器上的庫12,14和15。任何類型,我可以做到這一點?我的代碼是下面的,似乎需要對象庫12 & 14或15。它不只有12,14或15如何重寫下面的MS Word VBA宏以與Word 2007/2010/2013兼容

data1 = InputBox("What was the Moving Water damage value (enter as 0.0 - 1.0).") 
' Validiate data 

Do 
If data1 > 1 Or data1 < 0 Then 
data1 = InputBox("Invalid input. What was the Moving Water damage value (enter as 0.0 - 1.0).") 
End If 
Loop Until (data1 <= 1 And data1 >= 0) 

data2 = InputBox("What was the Settlement damage value (enter as 0.0 - 1.0).") 

Do 
If data2 > 1 Or data2 < 0 Then 
data2 = InputBox("Invalid input. What was the Settlement damage value (enter as 0.0 - 1.0).") 
End If 
Loop Until (data2 <= 1 And data2 >= 0) 

data3 = InputBox("What was the Pre-Exisiting damage value (enter as 0.0 - 1.0).") 

Do 
If data3 > 1 Or data3 < 0 Then 
data3 = InputBox("Invalid input. What was the Pre-Exisiting damage value (enter as 0.0 - 1.0).") 
End If 
Loop Until (data3 <= 1 And data3 >= 0) 

Dim i As Integer 

i = ActiveDocument.Tables.Count 
i = i + 1 

' Create table 
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=5, NumColumns:=2 
ActiveDocument.Tables(i).Cell(1, 2).Split NumColumns:=3 
ActiveDocument.Tables(i).Cell(1, 1).Range.Text = "Location:" 
ActiveDocument.Tables(i).Cell(1, 3).Range.Text = "Quantity (Measurable Area):" 
ActiveDocument.Tables(i).Cell(2, 1).Range.Text = "Description:" 
ActiveDocument.Tables(i).Cell(3, 1).Range.Text = "Analysis:" 
ActiveDocument.Tables(i).Cell(4, 1).Range.Text = "Cause(s) of Damage:" 
ActiveDocument.Tables(i).Cell(5, 1).Range.Text = "Recommended Repairs:" 

With ActiveDocument.Tables(i) 
.Borders(wdBorderTop).LineStyle = wdLineStyleSingle 
.Borders(wdBorderLeft).LineStyle = wdLineStyleSingle 
.Borders(wdBorderBottom).LineStyle = wdLineStyleSingle 
.Borders(wdBorderRight).LineStyle = wdLineStyleSingle 
.Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle 
.Borders(wdBorderVertical).LineStyle = wdLineStyleSingle 
End With 

Dim small As Boolean 
small = False 
Dim twoSeries As Boolean 
twoSeries = False 
Dim pieChart As Boolean 
pieChart = True 

Dim salesChart As Chart 
Dim chartWorkSheet As Excel.Worksheet 


With ActiveDocument.Tables(i) 
.Borders(wdBorderTop).LineStyle = wdLineStyleSingle 
.Borders(wdBorderLeft).LineStyle = wdLineStyleSingle 
.Borders(wdBorderBottom).LineStyle = wdLineStyleSingle 
.Borders(wdBorderRight).LineStyle = wdLineStyleSingle 
.Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle 
.Borders(wdBorderVertical).LineStyle = wdLineStyleSingle 
End With 

With ActiveDocument.Tables(i).Cell(4, 2).Range 
ActiveDocument.Range(.Start, .Start).Select 
End With 

' Add in a new chart 
Set salesChart = ActiveDocument.InlineShapes.AddChart.Chart 
Set chartWorkSheet = salesChart.ChartData.Workbook.WorkSheets(1) 

' Resize the chart area 
chartWorkSheet.ListObjects("Table1").Resize chartWorkSheet.Range("A1:B4") 

' Rename Series 1 as Sales 
chartWorkSheet.Range("Table1[[#Headers],[Series 1]]").FormulaR1C1 = "Damage" 

' Add data to the chart 
chartWorkSheet.Range("A2").FormulaR1C1 = "Moving Water" 
chartWorkSheet.Range("A3").FormulaR1C1 = "Settlement" 
chartWorkSheet.Range("A4").FormulaR1C1 = "Pre-Exisiting" 
chartWorkSheet.Range("B2").FormulaR1C1 = data1 
chartWorkSheet.Range("B3").FormulaR1C1 = data2 
chartWorkSheet.Range("B4").FormulaR1C1 = data3 


' Quit Excel, since we no longer need it 
salesChart.ChartData.Workbook.Application.Quit 

' Put a box around the legend 
salesChart.Legend.Format.Line.Visible = msoCTrue 

' Fill the background with theme color accent 1 
With salesChart.ChartArea.Format.Fill 
.Visible = msoTrue 
.Solid 
.ForeColor.ObjectThemeColor = wdThemeColorAccent1 
End With 

' Add a title and format it 
salesChart.HasTitle = True 
With salesChart.ChartTitle 
.Characters.Font.Italic = True 
.Characters.Font.Size = 18 
.Characters.Font.Color = RGB(0, 0, 100) 
.Text = "Damage" 
End With 


If small Then 
' Size and move the chart 
With salesChart.Parent 
.Left = 100 
.Width = 300 
.Height = 150 
End With 
End If 

If pieChart Then 
' Set chart type 
salesChart.ChartType = xl3DPie 
End If 

ActiveDocument.Bookmarks("\Endofdoc").Select 
Selection.TypeParagraph 
+0

你要爲從其他應用程序到MS Word中的內容?哪一個應用程序?並請顯示你設置的引用的代碼...你有什麼樣的問題,你期望你需要下載'Office Object Libraries 12,14和15' –

回答

0

工作,我已經得到了在Office 2010中運行代碼,只有它引用版本14庫。看起來代碼已經存在了一段時間,並且舊的引用可以被刪除。

要讓它在不同的版本上工作,您必須將引用從早期綁定更改爲後期綁定。這樣,您無需爲每個新版本添加來自VB編輯器的引用。

我可以使用此代碼示例作爲學生的Word宏的示例嗎?

此外,如果你需要幫助後期綁定(這是一個老問題)讓我知道。

參考早期綁定:http://word.mvps.org/faqs/interdev/earlyvslatebinding.htm