这是我第一次尝试为Word编写VBA脚本(我是一名前程序员,他有合理的,自学成才,使用Excel VBA成功)。我使用的是Word 2013(15.0.4641.1001 64位)和VBA 7.1 .142。
我试图执行一个简单的任务,即在当前光标位置创建一个双列表(它本身可以在另一个表中)。我希望表格是可用宽度的100%,然后我想修复第一列的宽度。从本质上讲,我的代码做了我想要的(并且第一次尝试,我对它感到相当满意),但它不稳定。
问题与宽度有关。如果我定位光标和" Step-into"宏,它通常(90%以上的时间)做我想要的。如果我"运行"它,它永远不会正常工作。
我的代码如下。它应该做的是: -
问题在于行动" 2",其他工作正常。
我注意到的一件事是,当它执行时,命令
.Columns(1).PreferredWidth = 15
似乎比其他命令长得多。
正如我所说,这是我的第一次努力,但我还不知道是否已经忽略了某些参数。
如果有人可以解释我出错的地方以及如何解决这个问题,我真的很感激。
干杯
巴兹
这是我的代码。
Sub CreateTable()
AddRows = 5
Set NewTable = ActiveDocument.Tables.Add(Selection.Range, AddRows, 2)
With NewTable
'Display cell borders
If .Style <> "Table Grid" Then
.Style = "Table Grid"
End If
'Make table 100% wide
.PreferredWidthType = wdPreferredWidthPercent
.PreferredWidth = 100
'Make column 1 narrow
.PreferredWidthType = wdPreferredWidthPoints
.Columns(1).PreferredWidth = 15
.AutoFitBehavior (wdAutoFitFixed)
'Number each row
For a = 1 To AddRows
.Cell(a, 1).Range.InsertAfter a & ")"
.Cell(a, 1).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
Next a
'Split column 2
For a = 1 To (AddRows * 2) - 1 Step 2
.Cell(a, 2).Split NumRows:=2, NumColumns:=1
Next a
End With
End Sub
答案 0 :(得分:1)
Option Explicit
位于每个模块的顶部,并且代码编译(您的经验已经引导您完成此操作)。 .AutoFitBehavior
是个问题。DoEvents
以帮助清除所有这些内部缓冲区。当您单步执行代码时,事件始终在进行;也许不是在运行时。 答案 1 :(得分:1)
由于我还在学习,我还不太了解Word VBA,以便完全理解为什么一种方法有效,而另一种方法没有,但这是一个有效的代码的简化版本。
Sub MakeTable()
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=5, NumColumns:=2, _
DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitWindow
Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
Selection.Tables(1).Columns(1).PreferredWidth = CentimetersToPoints(1)
'Number each row
For a = 1 To AddRows
Selection.Tables(1).Cell(a, 1).Range.InsertAfter a & ")"
Selection.Tables(1).Cell(a, 1).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
Next a
'Split column 2
For a = 1 To (AddRows * 2) - 1 Step 2
Selection.Tables(1).Cell(a, 2).Split NumRows:=2, NumColumns:=1
Next a
End Sub