2016-08-11 92 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

是的,這與我所做的非常接近。代碼的運行時間對我來說也是一個問題... –