2016-08-11 9 views
0

Ich habe eine Tabelle mit etwa 15 Inhaltskontrollen. Die Inhaltssteuerelemente haben unterschiedliche Titel.VBA MS Word Inhalt steuert vermischte Reihenfolge

Jetzt kopiere ich die Tabelle mit Content-Steuerelementen ein paar Mal und später, erhalten Sie unterschiedliche Werte in jedem einzelnen Inhaltssteuerelement aus der Datenbank. Da die Inhalte Kontrollen aus verschiedenen Tabellen die gleichen Namen, dachte ich durch Anzahl der Tabellen von looping etwas mit wie diese

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 

Das Problem ist, wenn ich diesen Code verwenden, meine Inhalte Kontrollen nicht in der Reihe gefüllt werden . Ich meine, zum Beispiel, Inhalt Kontrolle mit Titel title1 von Tabelle1 ist nicht mit seinem Wert gefüllt, stattdessen erhält Content Control mit TitelI-aus Tabelle4 diesen Wert. Und dieses Chaos geht wirklich schlecht um: Werte aus Tabelle 2 können in Tabelle 4, 9, 10 und so weiter enden.

Ich denke, die Reihenfolge der Inhaltssteuerelemente wird irgendwie durcheinander gebracht, wenn ich die Tabellen kopiere.

Und Anhaltspunkt, wie man es richtig macht?

Antwort

0

Wurde nicht wirklich gefunden, warum dies passiert, aber mit eindeutigen Namen zu den Inhaltskontrollen, wie title1, title2, und dann weiter, und dann durchschleifen alle von ihnen, um die benötigten Werte zu setzen.

0

Oh mein Gott ja ... Ich bin auf das gleiche nervige Problem gestoßen. Meine Problemumgehung hat nach der Kopie den Titel im Code geändert, dann den Code eingefügt und auch geändert (siehe unten). Jetzt ist mein Problem, dass dies viel zu lange dauert, da ich viele dieser Vorlagen in meinem Code ausfülle. Ich bin momentan auf der Lauer, wie ich diesen Prozess beschleunigen oder einen anderen Ansatz, den ich verwenden sollte.

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

ja, das ist sehr nah an dem, was ich getan habe. Die Laufzeit des Codes ist auch ein Thema für mich ... –