Auswertung in xls automatisiert drucken

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von cry.baby.

    Auswertung in xls automatisiert drucken

    Hallo zusammen,
    sollte meine Problemstellung bereits in einem älteren Thread behandelt worden sein, bitte um eine kurze Info. Ich arbeite mit der Office-Version Home and Business 2013

    Folgende Aufgabenstellung beschäftigt mich seit längerem, ich komme da einfach nicht weiter.

    Ich habe eine Auswertung über ALLE offenen Bestellpositionen als xls - Tabelle, mitunter ist dort eine Spalte "Auftrag".

    Ich möchte nun folgendes machen:
    1. In einem eigenen Fenster aus der Liste über alle Aufträge entsprechende auswählen, die ich drucken möchte
    2. Spalten in diesem eigenen Fenster auswählen, die nicht gedruckt werden sollen
    3. Aus dieser Maske drucken

    Die Voreinstellung von "Seite einrichten" mit notwendiger Kopf- und Fußzeile habe ich bereits eingestellt.

    Was vielleicht als notwendige Zusatzinfo hilfreich wäre:
    - alle Spalten sind fix definiert, ändern sich also nicht
    - die Zeilenanzahl kann sich natürlich nach einem Abgleich mit unserem ERP - System ändern

    Wäre jemand so nett und würde mir da kurz helfen bei der Realisierung? Ich habe zwar VBA - Grundkenntnisse, aber leider keinen Plan, wie ich das anstellen könnte.

    Sollte ich was vergessen haben zu erwähnen, bitte um kurze Rückmeldung.
    Vielen herzlichen Dank für eure Bemühungen bereits im voraus :thumbup: .

    LG
    3DFreak77
    Hallo @cry.baby,
    danke für die Antwort.
    Ja, das stimmt ... ich war da bereits ein wenig "overdosed" und hab schneller geschrieben als gedacht .... :rolleyes:
    Im Anhang schicke ich eine Beispieldatei.
    Diese Liste ist ein Export aus unserem ERP - System, die Aktualisierung wird täglich durchgeführt.

    Die genauere Beschreibung meines Wunsches:
    1. Ich möchte (eher muss ;( ) diese Liste ausdrucken, jedoch nicht alle existierenden Spalten
    2. Jeder Ausdruck soll nur quasi das gefilterte Ergebnis der Spalte P (Auftrag) sein - alle gleichen Auftragsnr. kommen auf 1 Blatt (oder mehr)

    Ich habe das bereits mit Makros versucht, scheitere jedoch kläglich, wenn ein neuer Auftrag hinzukommt oder ein anderer wegfällt.

    Ganz fein wäre natürlich folgendes:
    In einer Maske oder einem Fenster (als VBA Objekt) wähle ich aus den vorhandenen Nr. (jene in Spalte P) eine oder mehrere aus (ähnlich wie beim Filter) und wähle auch die Spalten aus, die gedruckt werden sollen (zB Spalte G, I, J K sollen nicht gedruckt werden). In diesem Fenster oder Maske klicke ich dann auf die Drucken - Schaltfläche und gut is.

    Kann das irgendwie funktionieren?
    Ich hoffe, das war nun ein wenig verständlicher :thumbup:

    Vielen lieben Dank.
    3DFreak
    Dateien
    Hi 3D-Freak,

    das ließe sich mit ner Listbox für die Auftragsnummern und nem Optionsfeld für die Spalten in einer Userform umsetzen. Is halt schon etwas aufwendiger...

    Edit: Das Userform würde dann wie folgt aussehen:
    Bilder
    • 3DFreak_Userform.jpg

      223,1 kB, 1.155×546, 106 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „cry.baby“ ()

    Mit der Userform/Listboxes wird das nicht umzusetzen sein, da sich die Auftragsnummern in der Spalte P wiederholen. Ich beiß mir zumindest die Zähne daran aus. :cursing: Könnte ma alternativ die ZEICH_POS anstelle der Auftragsnummern verwenden, um den Druckbereich zu markieren? Die scheinen sich nicht zu wiederholen.

    Eine weitere Option wäre ein Worksheet_SelectionChange - du markierst die Kopfzeilen für die erforderlichen Spalten und anschließend die Auftragsnummern, um den Druckbereich festzulegen. Wäre halt ohne Userform.

    Edit: Das würde dann so aussehen: Bild1 = erst Kopfzeile + Auftragsnummern markiert. Bild2 = Zusammenfassung der markierten Elemente sowie festgelegter Druckbereich.
    ACHTUNG! Mir fällt gerade auf, dass Du noch ein zweites Arbeitsblatt öffnen musst - könnte man auch in den Code einbinden.

    Hier noch der Code für das Event sowie das Modul für den Druckbereich:

    Visual Basic-Quellcode

    1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    2. On Error GoTo Errhandler
    3. 'Ausgewählte Header in Sheet(2) kopieren
    4. If Not Intersect(Target, Range("A1:P1")) Is Nothing Then
    5. Target.Interior.Color = RGB(255, 255, 0)
    6. Sheets(2).Range(Target.Address) = Target.Value
    7. End If
    8. 'Ausgewählte Zeilen in Sheet(2) kopieren
    9. Dim lastRow As Integer
    10. If Not Intersect(Target, Range("A2:P" & Cells(Rows.Count, 1).End(xlUp).Row)) Is Nothing Then
    11. Target.Interior.Color = RGB(255, 255, 0)
    12. lastRow = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1
    13. Target.EntireRow.Copy Sheets(2).Cells(lastRow, 1)
    14. End If
    15. 'Interior.Color Sheet(2) auf Blank zurücksetzen
    16. Sheets(2).Range("A2:XFD1048576").Interior.Pattern = xlNone
    17. Exit Sub
    18. Errhandler:
    19. MsgBox "Error!", vbCritical, "Error"
    20. Sheets(1).Range("A1:XFD1048576").Interior.Pattern = xlNone
    21. With Sheets(2)
    22. .Range("A1:XFD1048576").Interior.Pattern = xlNone
    23. .UsedRange.Delete
    24. End With
    25. End Sub


    Druckbereich als zusätzliches Modul, das Du noch ausführen müsstest:

    Visual Basic-Quellcode

    1. Sub Druckbereich()
    2. Dim lastColumn, i As Integer
    3. 'nicht benötigte Spalten in Sheet(2) löschen
    4. lastColumn = Sheets(2).Cells(2, Columns.Count).End(xlToLeft).Column
    5. For i = lastColumn To 1 Step -1
    6. If IsEmpty(Sheets(2).Cells(1, i)) Then
    7. Sheets(2).Cells(1, i).EntireColumn.Delete
    8. End If
    9. Next i
    10. 'Druckbereich festelegen
    11. Sheets(2).PageSetup.PrintArea = Sheets(2).Range("A1").CurrentRegion.Address
    12. Sheets(2).Columns("A:XFD").EntireColumn.AutoFit
    13. End Sub


    Bilder
    • 3DFreak_SheetEvent.JPG

      143,7 kB, 1.129×389, 99 mal angesehen
    • 3DFreak_Druckbereich.JPG

      69,7 kB, 610×381, 108 mal angesehen

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „cry.baby“ ()