Ich bin neu in VBA und ich habe seit Ewigkeiten im Internet eine Lösung für mein Problem gesucht. Das Projekt ist, dass ich auf einem Excel-Arbeitsblatt eine Liste der Rezepte mit verschiedenen Schritten, die wie folgt aussieht:Kopieren von verschiedenen ausgewählten Excel-Bereich in verschiedene Word-Dateien
RecipeName RecipeDescription Time Step StepDescription Results
Burger Bread + Meat Short Step1 Open Bread Bread open
Burger Bread + Meat Short Step2 Cook Meat Meat cooked
Soup Veggie Short Step1 Instant soup Soup done
ich leicht in der Lage bin, einen Bereich zu definieren und in ein Word-Dokument einfügen, aber der schwierige Teil ist, hier:
Ich möchte 1 Wortdokument pro Rezept haben, das zuerst den Rezeptnamen, die Beschreibung und den Zeitheader mit dem tatsächlichen Rezeptnamen, Beschreibung und Zeit gerade unten enthält. Dann folgt jede Schrittnummer, Beschreibung und Ergebnisse. So würde es so aussehen:
Burger
------
RecipeName RecipeDescription Time
Burger Bread + Meat Short
Step1 Open Bread Bread open
Step2 Cook Meat Meat cooked
Soup
----
RecipeName RecipeDescription Time
Soup Veggie Short
Step1 Instant soup Soup done
Wie gesagt, bevor ich den Header kopieren und in einem Wort einfügen, aber die Schwierigkeit ist, die Schritte der einzelnen Rezepte auswählen und sie in Wort setzt dann das Wort Speicher Datei in ein vordefiniertes Verzeichnis (der Speicherbereich ist bereits fertig und funktioniert).
Die Idee, die ich hatte, war, den Namen des Rezepts zu nehmen, um zu sortieren, ob wir noch im selben Rezept sind oder ob wir zu einem anderen gesprungen sind.
Funktionell, würde es so aussehen:
For i = 2 to lastRow
Open and activate a new word file
For j = 2 to lastRow
If Cells(j,1) = Cells(j+1; 1) Then
Copy Step, Step Description and Results of row(j)
Paste into word file
Next j
Else
Copy Step, Step Description and Results of row(i)
Paste into word file
Save the word file
i = j 'So i takes the value of j
Next i
Aber ich habe Probleme zwischen i und j ...
Im Moment mein Code wie folgt aussieht, aber bitte entschuldigen Sie mich für die Amateur wie es aussieht:
Sub ExceltoWord()
' 'This part of the code will paste the information into word
Dim descriptionHeader As Range
Dim stepHeader As Range
Dim step As Range
Dim descriptionTest As Range
Dim lastRow As Integer
Dim WordApp As Word.Application
Dim myDoc As Word.Document
Dim WordTable As Word.Table
' this part of the code will call the rootfolder creation part
'Call NewFolder
' Will Set the title and descrption header
ThisWorkbook.Sheets("ToWord").Activate
Set descriptionHeader = Range("A1:C1")
Set stepHeader = Range("D1:F1")
'Have the last row stored for later
lastRow = WorksheetFunction.CountA(Range("A:A"))
'Optimize Code
Application.ScreenUpdating = False
Application.EnableEvents = False
'Create an Instance of MS Word
On Error Resume Next
'Is MS Word already opened?
Set WordApp = GetObject(class:="Word.Application")
'Clear the error between errors
Err.Clear
'If MS Word is not already open then open MS Word
If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")
'Handle if the Word Application is not found
If Err.Number = 429 Then
MsgBox "Microsoft Word could not be found, aborting."
GoTo EndRoutine
End If
On Error GoTo 0
'Make MS Word Visible and Active
WordApp.Visible = True
WordApp.Activate
'Copy Excel Table Range Paste Table into MS Word
For i = 2 To lastRow
Set myDoc = WordApp.Documents.Add
descriptionHeader.Paste
'Need a part here to paste the actual recipe name, description and time
For j = 2 To lastRow
If Cells(i, 1).Content = Cells(i + 1, 1).Content Then
Cells(i, 6).Activate
ActiveCell.Offset(0, -2).Range("A1:C1").Select
With WordApp.Selection
.TypeText Text:=Cell.Text
.TypeParagraph
End With
Next j
Else
Cells(i, 6).Activate
ActiveCell.Offset(0, -2).Range("A1:C1").Select
With WordApp.Selection
.TypeText Text:=Cell.Text
.TypeParagraph
End With
Next i
EndRoutine:
'Optimize Code
Application.ScreenUpdating = True
Application.EnableEvents = True
'Clear The Clipboard
Application.CutCopyMode = False
End Sub
es wurde nun Wochen, dass ich auf dem Excel stecke Teil zu Wort, wie ich gigantische schwier haben tilies, wie man in die Rezepte einleitet und eine Wortdatei für jeden von ihnen speichert.
Vielen Dank im Voraus für Ihre Hilfe,
Jonathan
hilft Vielen Dank für Ihre Antwort. Ich werde es versuchen und ein Update über die Ergebnisse geben. –
Jochen, vielen Dank. Es wirkt wie ein Zauber. Ich musste die Tabellierung und VbCrLf ändern, um dem Word-Dokument ein besseres Layout zu geben, aber ansonsten ist es perfekt. Als ich versuchte, meinen Zustand als .Cells (i, 1) = .Cells (i + 1,1) zu bezeichnen, bestand die einfache Lösung darin, einen Zustand zu haben, der verschieden ist, und den zu vergleichenden Wert zu speichern. Sehr einfach, aber meiner Meinung nach ein reines Genie. –