Ich arbeite an einem bestehenden Skript-Makro in MSword 2007 (Ich habe es nicht selbst gemacht, tadeln Sie mich nicht für ein nicht so gut gemacht Code-Design!) .VBA - Makro msword - Einfügen Tabellenkopf nach csv Konvertierung
Dieses Skript verwendet SQL-Ergebnisse aus einer ADODB-Verbindung und füllt (löscht und ersetzt, um genau zu sein) eine Reihe von Tabellen an einem bestimmten Lesezeichen unter Verwendung der CSV-Konvertierung.
Die Aufgabe besteht darin, den vorhandenen Header beizubehalten und alle Ergebnisse dynamisch in die nächsten Zeilen zu schreiben. Catch ist ... der Header kann aus verbundenen Zellen gemacht werden
Ich werde nicht viel Code ändern, und ich bin kein Experte in VBA, aber das ist, was ich denke, sollte der Workflow sein:
- speichern die Kopfzeile (die „erste“ Zeile der Basistabelle ist)
- löschen gesamte Tabelle
- Tabelle aus den
- Insert-Header in die neue erzeugte Tabellenergebnisse CSV gewandelten Insert
Kopieren eines Zeilenwurffehlers, wenn einige verbundene Zellen vorhanden sind. Und es scheint, dass VBA kann nur leere Zeilen hinzufügen ... so wahrscheinlich kann ich nicht den Header "wie einfügen". Wie kann ich diesen Header auf den Tisch legen?
Hilfe !!!
Private Sub setRangeTable(bookmark As String, sqlCmd As String)
Dim rs As ADODB.Recordset
Dim r As Range
Dim t As table
Dim c As Column
Dim row As row
Dim i As Integer
'this variable should copy header
Dim oldHeader As Range
Set r = ActiveDocument.Bookmarks(bookmark).Range
With r.Tables(1)
' try to memorize the header (?)
oldHeader = .Range(Start:=.Rows(1).Range.Start, _
End:=.Rows(1).Range.End)
End With
r.Tables(1).Delete
r.InsertAfter (getTableData(sqlCmd))
r.Select
r.ConvertToTable Separator:=wdSeparateByTabs, AutoFitBehavior:=wdAutoFitContent
r.Tables(1).Rows(1).Select
Selection.InsertRowsAbove
End Sub
Beispiel für vorhandene Tabelle
----------------------
| | | .... | << cell of real row 1 \
| .... | .... |-------------| | << header
| | | .... | .... | << cell of real row 2/
-----------------------------
| | | | | << all results...
-----------------------------
| | | | | << all results...
-----------------------------
| | | | | << all results...
-----------------------------
Magischer Code! Vielen Dank. Da Sie in VBA ziemlich gut zu sein scheinen, gibt es eine Methode, um zu wissen, ob in den ersten beiden Zeilen verbundene Zellen vorhanden sind. Traurigerweise wird 'setRangeTable()' blind auf Tabellen aufgerufen, die einen 1-Zeilen-Header oder 2-Zeilen-Header haben können. Übrigens, wenn Sie nicht die Zeit haben, kein Problem zu beantworten, ist dieses eine gut genug für mich. Ich werde einen Test machen. –
@NereoCostacurta: Sie könnten zum Beispiel nach .Cell (2,1) suchen und den Fehler 5941 auffangen. –
@NereoCostacurta Dies würde eine neue Frage verdienen, und bitte denken Sie daran, das Problem im Detail zu beschreiben, einschließlich Code, den Sie ausprobiert haben. Ich habe nichts, was ich "aus meinem Ärmel schütteln kann" und es ist schon eine Weile her, dass ich über das Problem nachgedacht habe ... –