2016-08-11 62 views
0

我有一个约15个内容控件的表。内容控件具有不同的标题。VBA MS Word内容控件乱序

现在,我复制粘贴包含内容控件的表几次,然后从数据库中获取不同的值到每个内容控件中。由于来自不同的表内容控件共享相同的名字,我想用这样的

seqNo = 1 
For Each t in MyTables 
    ActiveDocument.SelectContentControlsByTitle("title1").Item(seqNo).Range.Text = "some value 1 from DB" 
    ActiveDocument.SelectContentControlsByTitle("title2").Item(seqNo).Range.Text = "some value 2 from DB" 
    ' and so on 
seqNo = seqNo + 1 
Next 

问题是,当我使用此代码通过表格的数量循环,我的内容控件没有得到填补顺序。我的意思是,例如,来自table1的标题为title1的内容控件没有填充其值,相反,来自table4的标题为title1的内容控件获取该值。而这个混乱真的很糟糕:表2中的值最终可能在表4,9,10等等。

我认为当我复制粘贴表格时,内容控件的顺序会以某种方式搞乱。

而线索如何得到它的权利?

回答

0

没有真正找到为什么出现这种情况,但给人唯一的名称到内容控件,比如title1title2,等等,然后通过所有这些循环来设置需要的值去。

0

哦,我的上帝是的......我也偶然发现了同样令人讨厌的问题。我的解决方法是在副本中更改代码中的标题,然后粘贴并更改该标题(请参见下文)。现在我的问题是,这需要太长时间才能运行,因为我在我的代码中填写了很多这些模板。目前我正在失去如何加速这个过程或我应该使用的不同方法。

objWord.ActiveDocument.Range(start:=objWord.ActiveDocument.Tables(3).Range.Rows(1).Range.start, End:=objWord.ActiveDocument.Tables(3).Range.Rows(5).Range.End).Copy 
    objWord.Selection.EndKey Unit:=wdStory 
    objDoc.SelectContentControlsByTitle("Date").Item(1).Title = "Date1" 
    objDoc.SelectContentControlsByTitle("StartTime").Item(1).Title = "StartTime1" 
    objDoc.SelectContentControlsByTitle("EndTime").Item(1).Title = "EndTime1" 
    objDoc.SelectContentControlsByTitle("Mins").Item(1).Title = "Mins1" 
    objDoc.SelectContentControlsByTitle("Note").Item(1).Title = "Note1" 
    objDoc.SelectContentControlsByTitle("Grp").Item(1).Title = "Grp1" 
    objDoc.SelectContentControlsByTitle("acc1").Item(1).Title = "acc1_1" 
    objDoc.SelectContentControlsByTitle("acc2").Item(1).Title = "acc2_1" 
    objDoc.SelectContentControlsByTitle("acc3").Item(1).Title = "acc3_1" 
    objDoc.SelectContentControlsByTitle("acc4").Item(1).Title = "acc4_1" 
    objDoc.SelectContentControlsByTitle("acc5").Item(1).Title = "acc5_1" 
    objDoc.SelectContentControlsByTitle("acc6").Item(1).Title = "acc6_1" 
    objDoc.SelectContentControlsByTitle("acc7").Item(1).Title = "acc7_1" 
    objDoc.SelectContentControlsByTitle("acc8").Item(1).Title = "acc8_1" 
    For j = 2 To UBound(Narray) 
     objWord.Selection.Paste 
     objDoc.SelectContentControlsByTitle("Date").Item(1).Title = "Date" & j 
     objDoc.SelectContentControlsByTitle("StartTime").Item(1).Title = "StartTime" & j 
     objDoc.SelectContentControlsByTitle("EndTime").Item(1).Title = "EndTime" & j 
     objDoc.SelectContentControlsByTitle("Mins").Item(1).Title = "Mins" & j 
     objDoc.SelectContentControlsByTitle("Note").Item(1).Title = "Note" & j 
     objDoc.SelectContentControlsByTitle("Grp").Item(1).Title = "Grp" & j 
     objDoc.SelectContentControlsByTitle("acc1").Item(1).Title = "acc1_" & j 
     objDoc.SelectContentControlsByTitle("acc2").Item(1).Title = "acc2_" & j 
     objDoc.SelectContentControlsByTitle("acc3").Item(1).Title = "acc3_" & j 
     objDoc.SelectContentControlsByTitle("acc4").Item(1).Title = "acc4_" & j 
     objDoc.SelectContentControlsByTitle("acc5").Item(1).Title = "acc5_" & j 
     objDoc.SelectContentControlsByTitle("acc6").Item(1).Title = "acc6_" & j 
     objDoc.SelectContentControlsByTitle("acc7").Item(1).Title = "acc7_" & j 
     objDoc.SelectContentControlsByTitle("acc8").Item(1).Title = "acc8_" & j 
    Next 
+0

是的,这与我所做的非常接近。代码的运行时间对我来说也是一个问题... –