简体   繁体   English

我如何重写以下MS Word VBA宏以与Word 2007/2010/2013兼容

[英]How can I rewrite the following MS Word VBA macro to be compatible with Word 2007/2010/2013

I am looking to make my MS Word VBA macro compatible with Word 2007,2010, and 2013 without having to download the MS Office Object Libraries 12,14, and 15 on all my machines. 我希望使我的MS Word VBA宏与Word 2007、2010和2013兼容,而不必在所有计算机上下载MS Office对象库12、14和15。 Any types how I can accomplish this? 任何类型的我怎么能做到这一点? My code is the following and seems to require Object Library 12 & 14 or 15. It doesn't work with just 12,14 or 15. 我的代码如下,并且似乎需要对象库12和14或15。它仅适用于12,14或15。

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  

I've got the code running in Office 2010 and it only references the version 14 libraries. 我已经在Office 2010中运行了该代码,它仅引用了版本14库。 It appears the code has been around for a while, and older references can be removed. 似乎代码已经存在了一段时间,可以删除较旧的引用。

To have it work across different versions, you'd have to change the references from early binding to late binding. 为了使其能够在不同版本上工作,您必须将引用从早期绑定更改为后期绑定。 That way, you don't need to add the references from the VB Editor for each new version. 这样,您无需为每个新版本从VB编辑器中添加引用。

Can I use this code sample as an example of Word macros for my students? 我可以使用此代码示例作为学生的Word宏示例吗?

Also, if you need help with the late binding (this is an old question) let me know. 另外,如果您需要后期装订方面的帮助(这是一个老问题),请告诉我。

Reference for Early Binding: http://word.mvps.org/faqs/interdev/earlyvslatebinding.htm 早期绑定参考: http : //word.mvps.org/faqs/interdev/earlyvslatebinding.htm

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM