Ich versuche, eine Reihe von 78 Werten aus einem Excel-Blatt in ein Word-Dokument einzufügen. Dies ermöglicht eine einfache Erzeugung von Word-Dokumenten. Der folgende Code ist mir erlaubt, einfügen:Word VBA Einfügen von Lesezeichen und Formatierung
Option Explicit
Sub WriteExtension()
'
' WriteExtension Macro
'
'
copyFile
Dim nWord As New Document
word.Application.ScreenUpdating = False
Set nWord = Documents.Open("C:\target\file\here\targetfile", Visible:=False)
'initialize excel variables
Dim oExcel As Excel.Application
Dim oWorkbook As workbook
Dim oWorksheet As worksheet
'initialize excel object
Set oExcel = New Excel.Application
oExcel.ScreenUpdating = False
Set oWorkbook = oExcel.Workbooks.Open("source\spreadsheet\here\sourcespreadsheet.xlsx")
Set oWorksheet = oWorkbook.Worksheets(Sheets("Extensions").Index)
'setup loop variables
Dim tempString As String
Dim i As Long
Dim bkMark As Bookmark
'insert items from spreadsheet onto word document
Dim insertText As String
For i = 1 To 78
nWord.Bookmarks("BM" & i).Select
nWord.Bookmarks.Item("BM" & i).Range.InsertAfter (Cells(4, i + 6))
Next i
Dim filePath As String
Dim fileName As String
Dim newName As String
'save the file as a PDF and close the PDF
filePath = "C:\target\path\here"
fileName = Cells(4, 13) & Cells(4, 12) & Cells(4, 79) & ".pdf"
newName = filePath & fileName
nWord.SaveAs2 fileName:=newName, FileFormat:=wdFormatPDF
'close things
nWord.Close False
' oWorksheet.
oWorkbook.Close False
oExcel.Quit
End Sub
'function takes the current extension template which has this macro in it, and copies it to a new blank word document
Function copyFile()
Dim fso As Object
Set fso = VBA.CreateObject("Scripting.FileSystemObject")
Dim sourceFile As String
Dim targetFile As String
sourceFile = "c:\source\file\here\sourcedocument.docx"
targetFile = "c:\target\file\here\targetfile"
fso.copyFile sourceFile, targetFile
End Function
Auf den Punkt gebracht, was dieses Programm tut, ist es Informationen aus einer Tabelle nimmt und versucht, Informationen in einer bestimmten Zelle einzufügen (oder werden bestimmte Berechnungen) auf ein bestimmter Ort auf dem Dokument. Dazu nimmt es zunächst ein Beispieldokument (Quelldatei), erstellt eine neue Datei (Zieldatei) und kopiert dann die Quelldatei in die Zieldatei. Das bedeutet, dass die Platzierung von Text, Formatierung und Lesezeichen genau kopiert wird.
Dann initialisiert es ein neues Excel-Objekt, wo ich meine Daten aufbewahre, die ich in das Dokument einspeisen möchte. Es öffnet es und führt eine Schleife 78 Einheiten lang für jede der 78 Lesezeichen. Es speichert das neue Dokument (zuvor als Zieldatei bezeichnet) und benennt es basierend auf den Werten in der Excel-Tabelle. Es speichert das neue Dokument als PDF. Dann schließt es das Dokument, schließt Excel und schließt das Wort.
Das Problem, das ich habe, ist eines der Formatierung. Im Grunde suche ich nach dem Einschub, der oberhalb einer Art Unterstrich oder Grenze stattfindet, statt dass er die Linie verschiebt. Stellen Sie sich vor, Sie füllen eine Anwendung aus - Sie schreiben über die Zeile und nicht daneben. Es scheint nicht so, als ob font.underline funktioniert, da es nur den Text umarmt, anstatt eine Unterstreichung zu machen. Vielleicht hatte ich es noch nicht ganz ausgearbeitet, aber ich hatte gehofft, dass die Genies von Stackoverflow mir dabei helfen könnten.
Also lautet die Frage: Wie füge ich Dinge neben Lesezeichen ein, damit ich sie über die Zeile einfügen kann und nicht neben? Mit anderen Worten, wie verwende ich Lesezeichen/Seitenformatierung, um den Text als # 3 und nicht als # 1 oder # 2 erscheinen zu lassen. Die meiste Zeit erscheint es als # 1.
Dieser Code funktioniert
Dim i As Long
Dim bkMark As Bookmark
'insert items from spreadsheet onto word document
Dim insertText As String
Dim startX As Long
Dim startY As Long
For i = 1 To 2
startX = ActiveDocument.Bookmarks.Item("BM" & i).Range.Information(wdHorizontalPositionRelativeToPage)
startY = ActiveDocument.Bookmarks.Item("BM" & i).Range.Information(wdVerticalPositionRelativeToPage) + 13
'Dim shp As Shape
With ActiveDocument.Shapes.AddLine(startX, startY, startX + 200, startY).Line
.ForeColor.RGB = RGB(0, 0, 0)
End With
Next i
'
In Ihrem Beispiel-Screenshot gehe ich davon aus, dass die "Unterstreichung" eine simulierte Unterstreichung ist, die durch Shift & '-' Tasten erzeugt wird? Ich denke, Sie müssten diese aus Ihrer Vorlage entfernen und stattdessen ein Zeichenobjekt (Linie) einfügen, das sich unterhalb des Textes befindet. –
Ja, Sie stimmen mit Ihrer Annahme überein. OK. Ich werde in Zeichnungslinien schauen. – bdpolinsky
Ja, sonst glaube ich nicht, dass es funktionieren kann, weil diese "Unterstreichungen" tatsächlich Zeichen sind, die in das Dokument eingegeben werden, und Sie können diese nicht in Verbindung mit Text selbst verwenden. Es ist das eine oder das andere, Sie werden mit # 1 oder # 2 enden, je nachdem, wo Sie einfügen, aber niemals # 3, weil das "Hallo Welt" 'überschreibt/ersetzt nur das' "______________" '. –