Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1672to1676
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA, Generieren einer Bestellliste und Word-Export

VBA, Generieren einer Bestellliste und Word-Export
04.02.2019 14:50:18
CG
Hallo zusammen,
ich habe auf Arbeit eine Excel Datei entworfen, die einen Katalog eines Lieferanten enthält. Aus dem Katalog soll eine Bestellliste generiert werden und die Bestellliste soll über einen Doppelklick in eine Word Datei exportiert werden.
Anbei ist eine Beispieldatei für mein Problem.
Userbild
Meine Idee war es, dass ein Mitarbeiter in den Katalog die Menge von den verschiedenen Produkten einträgt, die er benötigt. Sobald er alle Teile zusammen hat, sollen über ein Doppelklick in der Zelle "Bestellliste erstellen" alle Zeilen die einen Wert in der Spalte "Menge" haben in die Bestellliste eingefügt werden. Die Zeilenanzahl in der Tabelle Bestellliste ergibt sich aus den Zeilen aus dem Katalog die einen Wert in der Spalte "Menge" haben.
Nach dem Kopieren in Tabelle Bestellliste soll die Gesamtsumme der Bestellung unterhalb der Auflistung aus den Teilsummen berechnet werden.
Zum Schluss wäre es wünschenswert, wenn aus der Bestellliste ein Word Dokument automatisch erstellt werden könnte. Als Auslöser wäre auch hier ein Doppelklick in das Feld "In Word exportieren" geschickt.
Durch die Zelle "Katalog zurücksetzen" sollen die Werte in der Spalte "Menge" im Katalog wieder geleert werden nachdem die Bestellliste in Word exportiert wurde.
Falls es geschickter wäre die beiden Tabellen in verschiedene Arbeitsblätter zu legen, ist das kein Problem.
Über jegliche Code-Vorschläge wäre ich sehr dankbar!!
Viele Grüße
CG

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA, Generieren einer Bestellliste und Word-Export
04.02.2019 15:04:38
UweD
Hallo
Da brauchen wir eine (abgespeckte) Musterdatei


Warum zusätzlich nochmal Word?
Könnte doch auch ein Excelblatt, was entsprechend aufgebaut wäre, sein. Oder?
AW: VBA, Generieren einer Bestellliste und Word-Export
04.02.2019 15:23:36
CG
Vielen Dank für die Rückmeldung.
Ja das stimmt. Ein weiteres Excel Blatt wäre auch eine gute Möglichkeit. Dann sollten ab Zeile 3 in dem neuen Blatt die Bestellpositionen aufgelistet werden, damit der Layout-Kopf noch individuell mit aktuellem Datum usw. angepasst werden kann und der Nutzer die Tabelle als PDF exportieren kann.
Anbei eine Beispieldatei. Wenn diese nicht genügt einfach rückmelden.
https://www.herber.de/bbs/user/127406.xls
Anzeige
AW: VBA, Generieren einer Bestellliste und Word-Export
04.02.2019 16:58:25
UweD
Hallo
so mal als Start.
https://www.herber.de/bbs/user/127408.xlsm
Microsoft Excel Objekt Tabelle1
Option Explicit 
 
Private Sub CommandButton1_Click() 'Bestellung erzeugen 
    Dim TB1, TB1Z1 As Integer, LR1 As Integer, SP As Integer, RNG As Range 
    Dim TB2, TB2Z1 As Integer, LR2 As Integer 
     
    Set TB1 = Sheets("Lieferant A") 
    Set TB2 = Sheets("Bestellung A") 
     
    Set RNG = TB1.Columns("B:H") 
     
    TB1Z1 = 3 'erste Zeile mit Daten 
    TB2Z1 = 3 'erste Zielzeile 
     
    SP = 6 'Spalte mit Mengenangaben 
     
    LR1 = TB1.Cells(TB1.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte 
     
    With TB1.Cells(TB1Z1, SP).Resize(LR1 - TB1Z1 + 1, 1) 
        'Prüfen ob Mengen eingetragen wurden 
        If WorksheetFunction.Sum(.Cells) > 0 Then 
            LR2 = TB2.Cells(TB2.Rows.Count, "B").End(xlUp).Row + 1 'erste Freie Zeile 
     
            Intersect(RNG, .SpecialCells(xlCellTypeConstants, 3).EntireRow).Copy _
                TB2.Cells(LR2, 2) 
        End If 
    End With 
End Sub 
 
Private Sub CommandButton2_Click() 'Bestellung erzeugen 
    Dim TB1, TB1Z1 As Integer, LR1 As Integer, RNG As Range 
     
    Set TB1 = Sheets("Lieferant A") 
     
    Set RNG = TB1.Columns("B:G") 
     
    TB1Z1 = 3 'erste Datenzeile 
     
    LR1 = TB1.Cells(TB1.Rows.Count, "B").End(xlUp).Row 
     
    'Bereich leeren 
    Intersect(RNG, TB1.Cells(TB1Z1, 2).Resize(LR1 - TB1Z1 + 1, 1).EntireRow).ClearContents 
End Sub 
 
 

Microsoft Excel Objekt Tabelle2
Option Explicit 
 
Private Sub CommandButton1_Click() 'PDF erstellen 
    Dim Pfad As String, Datei As String 
     
    Pfad = "X:\Temp\test\" 'mit \ am Ende 
    Datei = " " & Format(Date, "YYYY-MM-DD") 
     
     
    Me.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Pfad & Me.Name & Datei 
End Sub 
Der Code befindet sich im CodeBereich der Tabellenblätter selbst
LG UweD
Anzeige
AW: VBA, Generieren einer Bestellliste und Word-Export
04.02.2019 18:25:07
CG
Hallo Uwe,
vielen vielen Dank! Funktioniert super!
Wenn ich über den Button nur die Einträge in Spalte F und H löschen will und nicht den gesamten Inhalt des Katalogs, wie muss ich den Code verändern?
Und kann das Makro auch erkennen, dass die Tabelle in Blatt 2 nur so viele Zeilen besitzt wie Angaben in der Spalte Menge sind in Tabelle 1. Sodass dann die Gesamtsumme in Blatt 2 direkt unter den übertragenen Zeilen steht?
Besten Dank und Grüße
Chris
AW: VBA, Generieren einer Bestellliste und Word-Export
05.02.2019 09:32:20
UweD
Hallo
dann änder den Code im Blatt Lieferant wie folgt
Microsoft Excel Objekt Tabelle1
Option Explicit 
 
Private Sub CommandButton1_Click() 'Bestellung erzeugen 
    Dim TB1, TB1Z1 As Integer, LR1 As Integer, SP As Integer, RNG As Range 
    Dim TB2, TB2Z1 As Integer, LR2 As Integer 
     
    Set TB1 = Sheets("Lieferant A") 
    Set TB2 = Sheets("Bestellung A") 
     
    Set RNG = TB1.Columns("B:H") 'Bereich, der übertragen werden soll 
     
    TB1Z1 = 3 'erste Zeile mit Daten 
    TB2Z1 = 3 'erste Zielzeile 
     
    SP = 6 'Spalte mit Mengenangaben "F" 
     
    LR1 = TB1.Cells(TB1.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte 
     
    With TB1.Cells(TB1Z1, SP).Resize(LR1 - TB1Z1 + 1, 1) 
        'Prüfen ob Mengen eingetragen wurden 
        If WorksheetFunction.Sum(.Cells) > 0 Then 
             
            'Reset Zieltabelle 
            LR2 = TB2.Cells(TB2.Rows.Count, "H").End(xlUp).Row  'Letzte Zeile 
             
            TB2.Cells(TB2Z1, 1).EntireRow.ClearContents 'erste zeile leeren 
            TB2.Cells(TB2Z1 + 1, 1).Resize(LR2, 1).EntireRow.Delete xlUp 'Rest löschen 
             
            'Nur Zeilen mit Menge übertragen 
            Intersect(RNG, .SpecialCells(xlCellTypeConstants, 3).EntireRow).Copy TB2.Cells(TB2Z1, 2) 
             
            'Positionen setzen 
            LR2 = TB2.Cells(TB2.Rows.Count, "H").End(xlUp).Row  'Letzte Zeile 
            With TB2.Cells(TB2Z1, 1).Resize(LR2 - TB2Z1 + 1, 1) 
                .FormulaR1C1 = "=ROW(R[-2]C)" 
                .Value = .Value 
            End With 
                         
            'Formatierung Summen Zeile 
            With TB2.Cells(LR2 + 1, 1).Resize(1, 8) 'Rahmen 
                .Borders(xlEdgeTop).Weight = xlMedium 
                .Borders(xlEdgeBottom).Weight = xlMedium 
                .Borders(xlEdgeRight).Weight = xlMedium 
                .Borders(xlEdgeLeft).Weight = xlMedium 
            End With 
     
            'Format aus Zeile 3 übertragen 
            TB2.Cells(TB2Z1, 1).EntireRow.Copy 
            TB2.Cells(TB2Z1, 1).Resize(LR2 - TB2Z1 + 1, 1).EntireRow.PasteSpecial Paste:=xlPasteFormats 
            Application.CutCopyMode = False 
             
 
            'Summe ergänzen 
            With TB2.Cells(LR2 + 1, "G") 
                .Value = "Gesamtsumme:" 
                .HorizontalAlignment = xlRight 
                .Font.Size = 26 
            End With 
            With TB2.Cells(LR2 + 1, "H") 
                .FormulaR1C1 = "=SUM(R" & TB2Z1 & "C:R[-1]C)" 
                .Font.Size = 26 
            End With 
             
        Else 
            MsgBox "Keine Daten gefunden !" 
        End If 
    End With 
End Sub 
 
Private Sub CommandButton2_Click() 'Katalog leeren 
    Dim TB1, TB1Z1 As Integer, LR1 As Integer, RNG As Range 
     
    Set TB1 = Sheets("Lieferant A") 
     
    Set RNG = TB1.Range("F:F", "G:G") 'Menge und Preis/Stk 
     
    TB1Z1 = 3 'erste Datenzeile 
     
    LR1 = TB1.Cells(TB1.Rows.Count, "B").End(xlUp).Row 
     
    'Bereich leeren 
    Intersect(RNG, TB1.Cells(TB1Z1, 2).Resize(LR1 - TB1Z1 + 1, 1).EntireRow).ClearContents 
End Sub 
 
 

LG UweD
Anzeige
AW: VBA, Generieren einer Bestellliste und Word-Export
05.02.2019 11:50:00
CG
Danke!
Wenn ich die PDF erstelle, wird keine neue Datei erzeugt, sondern die alte Datei überschrieben. Lässt sich das ändern?
Wie kann ich das Format der erzeugten Positionen Spalte in Tabelle 2 ändern. Ich würde gerne die Zahl mittig stehen haben und außen einen dünnen Rahmen realisieren wollen.
Wie immer vielen Dank für die exzellente Hilfe!!!
Grüße
CG
AW: VBA, Generieren einer Bestellliste und Word-Export
05.02.2019 13:01:22
Thomas
Ändere einfach beim PDF erstellen, folgende Zeile
Format(Now, "YYYY-MM-DD_hh-mm-ss")
Dann heist deine Datei immer wie das aktuelle Datum und Uhrzeit. (die Sekunden schließen aus, dass falls du innerhalb einer Minute 2x drückst es wieder eine gleich Datei gibt!)
Gruß Thomas
Anzeige
AW: VBA, Generieren einer Bestellliste und Word-Export
05.02.2019 16:54:54
UweD
Hallo
&GT&GT PFD:
z.B. so
Private Sub CommandButton1_Click() 'PDF erstellen 
    Dim Pfad As String, Datei As String
    
    Pfad = "X:\Temp\test\" 'mit \ am Ende 
    Datei = " " & Format(Date, "YYYY-MM-DD HHMMSS")
    
    
    Me.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Pfad & Me.Name & Datei
End Sub


&GT&GT Zahl mittig
Ändere das Format in Zeile 4.
Die leere ich nämlich nur
und Kopiere die Formatierung nach unten
LG UweD
Anzeige
Now anstelle von Date
05.02.2019 16:57:54
Date
Wie Thomas das schon vorgestellt hat
LG UweD

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige