VBA Drucken
#1
Hallo zusammen,
ich bin hier neu angemeldet, weil ich durch meine Recherche bisher noch keine Lösung gefunden habe.
Ich hoffe, dass mir hier jemand weiterhelfen kann.

Ich habe eine große Excel-Tabelle, in der Artikel mit einem Verfallsdatum verknüpft sind.
Diese Artikel lasse ich per VBA aufsteigend sortieren, sodass ich in der Liste dann ganz oben als erstes sehe, welche Artikel als nächstes verfallen und ggf. ausgetauscht werden müssen.
Nun möchte ich gern einen weiteres VBA-Makro verwenden, mit dem:
- Excel aus einem ersten Tabellenblatt den Zeitpunkt entnimmt, bis zu welchem Termin der Druckbereich ausgewählt werden soll (z.B. wird manuell in Feld C23 "2021-06" für Juni 2021 eingegeben)
- Dann automatisch im Tabellenblatt "Verfall" alle Artikel bis zu diesem Zeitpunkt auswählt (Angabe ebenfalls in bspw. "2021-03", alles in Spalte G)
- und dann den zu dem Zeitpunkt Bereich (also für Zeile 3 ist das A bis N) als PDF-Dokument druckt

Kann mir jemand weiterhelfen?
Ich bin mit meinem Latein am Ende (oder muss leider in Kauf nehmen, dass das technisch nicht umsetzbar ist)...

Danke im Voraus!
Top
#2
Hallo,

du filterst die Liste einfach nach deinen Kriterien und druckst sie. Excel druckt nur das, was man auch sieht.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#3
Hallo,
mir ist leider noch nicht ganz klar wie ich die Liste nach meinen Kriterien filtere.
Kannst du das genauer beschreiben?
Top
#4
Hi Alex,

ich denke, wenn du uns eine Beispieldatei (original Aufbau; anonymisierte Daten) hochlädtst, kann dir bestimmt jemand weiterhelfen. Lies mal bitte: https://www.clever-excel-forum.de/Thread...ng-stellen
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top
#5
Hallöchen,

Autofilter gehört eigentlich zu den Grundkenntnissen von Excel, bevor man sich an Makros heranwagt.
Schaue dazu mal bei google vorbei Smile

Selbigen kannst Du dann per Makro steuern, den Code dazu aufzeichnen.
Siehe dazu Excel-Word-Makrorekorder
VBA ist ja nix neues für Dich. Das aufgezeichnete Filterkriterium müsstest Du dann durch ein eingegebenes ersetzen. Dazu könntest Du eine INPUTBOX nutzen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#6
Hallo,
vielen Dank für die Antworten!
@schauan: Die Autofilter-Funktion hatte ich auch schon im Kopf, jedoch lässt sich als Filterkriterium leider keine Zelle einer Tabelle auswählen. Ich kann also nicht sagen "Such nach O4" oder so.

Ich habe die Liste mal kurzerhand anonymisiert.
Im Tabellenblatt "Verfall aktuell" ist nach der Spalte "Haltbarkeit" sortiert worden. Nun möchte ich sozusagen einen automatisierten Ausdruck von ganz oben bis "2021-06" machen, wobei diese Angabe eben regelmäßig händisch im Tabellenblatt "How To" geändert wird.

Ideen?


.xlsm   Materialliste.xlsm (Größe: 203,45 KB / Downloads: 3)
Top
#7
Hallo Alex,

das ist so natürlich ein Problem, weil es sich in der Spalte "Haltbarkeit" um Texte handelt, wird das Filtern zumindest erschwert. Diese Darstellung hättest du auch mit dem benutzerdefinierten Format JJJJ-MM bekommen. Danach kann man auch Filtern.

Hallo,

habe die Spalte Haltbarkeit mal umformatiert und danach gefiltert. 

Wo ich schon gerade am meckern bin, wozu werden hunderte Zeilen im voraus mit Rahmenlinien gefüllt? Die kann man über die Druckfunktionen direkt beim Drucken für die aktuelle Listengröße virtuell erzeugen.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#8
Hallöchen,

Zitat:jedoch lässt sich als Filterkriterium leider keine Zelle einer Tabelle auswählen.

stimmt in Deinem Fall nicht. Du wolltest ja ein Makro nehmen, also lässt sich das auch programmieren. Ich nehme an, die Zellen mit anschaffen willst Du auch nicht?

Hier mal der aufgezeichnete Code, die Kriterien sind noch eingegeben

Code:
Sub Makro1()
'
' Makro1 Makro
'

'
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$N$451").AutoFilter Field:=9, Criteria1:= _
        "<=2021-01", Operator:=xlAnd, Criteria2:="<>*anschaffen*"
End Sub

und hier der geänderte mit dem Zellinhalt ...

Code:
Sub Makro2()
    'Autofilter (rueck)setzen
    Selection.AutoFilter
    'Filter in Spalte 9 = N setzen anhand der aktiven Zelle
    'Hinweis: Eine Pruefung der Lage der aktiven Zelle
    'und deren Inhalt sollte noch vorgenommen werden!
    ActiveSheet.Range("$A$1:$N$451").AutoFilter Field:=9, Criteria1:= _
        "<=" & ActiveCell.Value, Operator:=xlAnd, Criteria2:="<>*anschaffen*"
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#9
Danke für die Rückmeldung.
Also an sich für mich nachvollziehbar, jedoch noch 2 kleine Nachfragen.
"Anschaffen" darf übrigens drin bleiben, das rutscht nach der Anschaffung ja automatisch raus...
1. Von dem einen zum anderen:
Code:
    ActiveSheet.Range("$A$1:$N$451").AutoFilter Field:=9, Criteria1:= _
        "<=2021-01", Operator:=xlAnd, Criteria2:="<>*anschaffen*"

    ActiveSheet.Range("$A$1:$N$451").AutoFilter Field:=9, Criteria1:= _
        "<=" & ActiveCell.Value, Operator:=xlAnd, Criteria2:="<>*anschaffen*"

Mir ist noch nicht klar, wie das Makro jetzt weiß, von wo es sich "2021-01" bzw. ActiveCell ziehen soll. Das wird doch da gar nicht definiert...
Ich würde jetzt auf "Verfall" einfach in P1 die Formel "='How To'!C23" schreiben, dann zieht er sich das vorgegebene Datum ja automatisch.
Nun ist also die Frage, wie ich in das Makro das Kriterium aus P1 des Tabellenblattes hole...
Kann ich das irgendwie umschreiben einfügen/festlegen?!

2. Er soll die leeren Zeilen (die aber mit "" gefüllt sind) ausfiltern. Ne Idee oder zu aufwändig?

Danke im Voraus!
Top
#10
Hallöchen,

1)
ActiveCell ist die AktiveZelle auf dem AktivenBlatt. Wenn Du eine Zelle zur Eingabe hast und der Cursor / die Markierung steht dort, dann passt das.
Wenn Du zuweilen beim Start des Makros auch woanders bist, musst einfach nur AktiveCell durch die Angabe der Zelladresse der Eingabezelle austauschen ...
Sicherheitshalber der Hinweis: Nicht einfach nur P1 oder wo auch immer, sondern Range("P1") ...

2)
Bei mir waren die leeren weggefiltert. Ich hab aber auch keine mit "" als Inhalt gesehen Sad
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste