Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1152to1156
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

Druckmaske unterschiedlich lang

Druckmaske unterschiedlich lang
EarnyToLearny
Hallo liebe Excel-Freunde,
durch dieses Forum ist mein Projekt fast fertig geworden. Jetzt kommt das Finale mit Drucken. Hier mein Problem:
Auf einer Eingabeseite (Eingabe) kann man wählen, für wieviele Kunden ein Angebot erstellt werden soll.
Werden 3 Personen gewählt, öffnen sich 3 Eingabefelder für diese Personen. Die Steuerung ist einem Feld
(hier B10) hinterlegt.
Die Druckmaske besteht aus 4 gleichen Seiten (Druckmaske). Wenn nun 1 Person gewählt wurde, steht auf Seite 1 das Angebot und die anderen 3 Seiten sind weiß, werden aber mitgedruckt. Wenn 3 Personen
gewählt wurden, dann sind 3 Seiten beschrieben und 1 Seite weiß.
Der Ausdruck soll also so gesteuert sein, dass wenn in meinem Feld (B10) eine Person steht, dass nur 1 Seite gedruckt wird und wenn 3 steht, dann 3 Seiten.
Bedanke mich an dieser Stelle schon jetzt. (Forum schon durchgeschaut, aber bei meinen Kenntnissen in VBA nur schwer umsetzbar).
Gruß Werner

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Druckmaske unterschiedlich lang
18.04.2010 13:16:34
fcs
Hallo Werner,
zur Lösung gibt es 2 Ansätze:
1. wie von dir angedacht werden die jeweiligen Seiten der Druckmaske gedruckt.
Diese setzt voraus, dass der Ausdruck nur per spezieller Schaltfläche erfolgt oder dass man im Ereignismakro "Workbook_BeforePrint" eine entsprechende Prüfung einbaut
2. Der Druckbereich in der Druckmaske wird angepasst, abhängig von der Zahl in B10
Dies kann man direkt an die Wertänderung in Zelle B10 koppeln. Die Angebotsblätter können dan beliebig gedruckt werden.
Nachfolgend zwei Makro-Beispiele
Gruß
Franz
'Ereignis-Prozedur im Blatt "Eingabe"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wks As Worksheet
If Target.Address = "$B$10" Then
'Festlegen des Druckbereiches abhängig vom Wert in B10
Set wks = Worksheets("Tabelle1") 'Tabellenblatt mit Angebotstexten
With wks
Select Case Target.Value '=Anzahl Kunden
'Die Druckbereiche im Tabellenblatt für die Fälle sind mit Namen festgelegt.
Case 1
.PageSetup.PrintArea = .Range("Drucken.Kunden1").Address
Case 2
.PageSetup.PrintArea = .Range("Drucken.Kunden2").Address
Case 3
.PageSetup.PrintArea = .Range("Drucken.Kunden3").Address
Case Else
MsgBox "Unzulässige Anzahl" & vbLf & "Der Druckbeich im Blatt """ & .Name _
& """ wird aufgehoben.", vbInformation + vbOKOnly, _
"Druckbereich Angebot einrichten"
.PageSetup.PrintArea = ""
End Select
End With
End If
End Sub
'Alternativ - Drucken der Anzahl Seiten
Sub DruckenAngebot()
Dim wks As Worksheet
Set wks = Worksheets("Tabelle1") 'Tabellenblatt mit Angebotstext
With wks
Select Case Worksheets("Eingabe").Range("$B$10")
'Anzahl Seiten (Angebote) gemäß Auswahl, den preview-Parameter ggf. auf False setzen _
oder weglassen
Case 1
.PrintOut from:=1, to:=1, preview:=True
Case 2
.PrintOut from:=1, to:=2, preview:=True
Case 3
.PrintOut from:=1, to:=3, preview:=True
Case Else
MsgBox "Unzulässige Anzahl in Zelle B10 im Blatt ""Eingabe""", _
vbInformation + vbOKOnly, "Druckbereich Angebot einrichten"
End Select
End With
End Sub

Anzeige
AW: Druckmaske unterschiedlich lang
18.04.2010 15:36:39
EarnyToLearny
Hallo Franz,
vielen Dank für die schnelle Antwort. Aslo das in Frage kommende Script ist das Erste. Ich benötige nochmals Hilfe dazu.
Hierzu habe ich mal die Daten so ergänzt, wie ich glaube. Nochmals zum Verständnis: aus der Eingabemaske (Daten) wird nichts ausgedruckt. Hier ist nur festgelegt, wieviele Personen (B10).
Sämtliche Ergebnisse werden dann in die Druckmaske (Druckausgabe) übernommen bzw. dementsprechend aufbereitet.
Nicht verstanden habe ich den Begriff: Select Case Target.Value '=Anzahl Kunden
Was muss hier noch eingeben?
Vielen Dank sagt Werner
  • 'Ereignis-Prozedur im Blatt "Eingabe"
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim wks As Worksheet
    If Target.Address = "Daten$B$10" Then
    'Festlegen des Druckbereiches abhängig vom Wert in B10
    Set wks = Worksheets("Daten") 'Tabellenblatt mit Angebotstexten
    With wks
    Select Case Target.Value '=Anzahl Kunden
    'Die Druckbereiche im Tabellenblatt für die Fälle sind mit Namen festgelegt.
    Case 1
    .PageSetup.PrintArea = .Range("Druckausgabe").$a$1:$k$66
    Case 2
    .PageSetup.PrintArea = .Range("Druckausgabe").$a$67:$k$140
    Case 3
    .PageSetup.PrintArea = .Range("Druckausgabe").$a$141:$k$213
    Case Else
    MsgBox "Unzulässige Anzahl" & vbLf & "Der Druckbeich im Blatt """ & .Name _
    & """ wird aufgehoben.", vbInformation + vbOKOnly, _
    "Druckbereich Angebot einrichten"
    .PageSetup.PrintArea = ""
    End Select
    End With
    End If
    End Sub
    

  • Anzeige
    AW: Druckmaske unterschiedlich lang
    18.04.2010 16:04:48
    fcs
    Hallo Werner,
    wenn du ohne Bereichsnamen arbeiten willst, dann sieht das Makro wie folgt aus. Das Makro muss du im VBA-Editor unter dem Blatt "Eingabe" einfügen. Die Verwendung von Namen für die Bereiche hätte den Vorteil, dass du Änderngen an der Größe der Bereiche machen könntest ohne am Code etwas zu ändern.
    "Target" ist in Ereignismakros, die unter einem Tabellenblatt eingerichtet sind, eine spezielle vordefinierte Variable. Sie ist der Stellvertreter für die unmittelbar vor dem Ereignis selektierte oder geänderte Zelle oder auch einen Zellbereich.
    In dem Makro wird zunächst geprüft, ob die gerade geänderte Zelle (Target) die Zelladresse B10 hat.
    Wenn ja, dann wird in der Select Case-Anweisung der Wert der Zelle geprüft.
    Gruß
    Franz
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim wks As Worksheet
    If Target.Address = "$B$10" Then
    'Festlegen des Druckbereiches abhängig vom Wert in B10
    Set wks = Worksheets("Daten") 'Tabellenblatt mit Angebotstexten
    With wks
    Select Case Target.Value '=Anzahl Kunden
    'Die Druckbereiche im Tabellenblatt für die Fälle sind mit Namen festgelegt.
    Case 1
    .PageSetup.PrintArea = "$a$1:$k$66"
    Case 2
    .PageSetup.PrintArea = "$a$67:$k$140"
    Case 3
    .PageSetup.PrintArea = "$a$141:$k$213"
    Case Else
    MsgBox "Unzulässige Anzahl" & vbLf & "Der Druckbeich im Blatt """ & .Name _
    & """ wird aufgehoben.", vbInformation + vbOKOnly, _
    "Druckbereich Angebot einrichten"
    .PageSetup.PrintArea = ""
    End Select
    End With
    End If
    End Sub
    

    Anzeige
    AW: Druckmaske unterschiedlich lang
    18.04.2010 17:47:48
    EarnyToLearny
    Hallo Franz,
    möchte Dir nicht den Sonntag vermiesen, aber ich kriegs nicht hin. Habe den Bereichen nun Namen gegeben. Das Script hat den Namen "Change", was ich ebenfalls nicht bei der Makrozuordnung finde.
    Ich denke es ist nur eine Kleinigkeit. Habe die Musterdatei (ist schon mal von Dir mit den Spalten ausblenden bearbeitet worden) kurzerhand mal hochgeladen. (Schäme mich - sieht ja so aus, als wenn ich alles von Euch machen lasse)
    Gruß Werner
    https://www.herber.de/bbs/user/69141.xls
    AW: Druckmaske unterschiedlich lang
    18.04.2010 17:48:45
    EarnyToLearny
    Hallo Franz,
    möchte Dir nicht den Sonntag vermiesen, aber ich kriegs nicht hin. Habe den Bereichen nun Namen gegeben. Das Script hat den Namen "Change", was ich ebenfalls nicht bei der Makrozuordnung finde.
    Ich denke es ist nur eine Kleinigkeit. Habe die Musterdatei (ist schon mal von Dir mit den Spalten ausblenden bearbeitet worden) kurzerhand mal hochgeladen. (Schäme mich - sieht ja so aus, als wenn ich alles von Euch machen lasse)
    Gruß Werner
    https://www.herber.de/bbs/user/69141.xls
    Anzeige
    AW: Druckmaske unterschiedlich lang
    19.04.2010 08:49:23
    fcs
    Hallo Werner,
    du muss in deinem Fall das Anpassen des Druckbereich in die Aktion integrieren, die bei Änderung der Auswahl für die Personenzahl in der Kombobox im Blatt "Eingabe" ausgeführt wird.
    Schaut dann etwa wie folgt aus.
    Im Blatt Druckausgabe brauchst du kein WENN-Formeln einzusetzen.
    Gruß
    Franz
    Option Explicit
    Sub Einblenden()
    'Alle Spalten und Shapes einblenden
    Dim wks As Worksheet, oShape As Shape
    Set wks = Worksheets("Eingabe")
    wks.Columns.Hidden = False
    For Each oShape In wks.Shapes
    oShape.Visible = True
    Next
    End Sub
    Sub Ausblenden()
    'Ausblenden gemäß Auswahl in Combobox
    Call Einblenden
    Select Case Worksheets("Daten").Range("A8").Value
    Case 1
    Call Aus_Shapes(Worksheets("Eingabe"), Array("Drop Down 3", "Check Box 10", _
    "Check Box 11", "Check Box 12", "Check Box 13"))
    Call Aus_Shapes(Worksheets("Eingabe"), Array("Drop Down 4", "Check Box 14", _
    "Check Box 15", "Check Box 16", "Check Box 17"))
    Call Aus_Shapes(Worksheets("Eingabe"), Array("Drop Down 5", "Check Box 18", _
    "Check Box 19", "Check Box 20", "Check Box 21"))
    With Worksheets("Eingabe")
    .Range(.Columns(9), .Columns(17)).EntireColumn.Hidden = True
    End With
    Case 2
    Call Aus_Shapes(Worksheets("Eingabe"), Array("Drop Down 4", "Check Box 14", _
    "Check Box 15", "Check Box 16", "Check Box 17"))
    Call Aus_Shapes(Worksheets("Eingabe"), Array("Drop Down 5", "Check Box 18", _
    "Check Box 19", "Check Box 20", "Check Box 21"))
    With Worksheets("Eingabe")
    .Range(.Columns(12), .Columns(17)).EntireColumn.Hidden = True
    End With
    Case 3
    Call Aus_Shapes(Worksheets("Eingabe"), Array("Drop Down 5", "Check Box 18", _
    "Check Box 19", "Check Box 20", "Check Box 21"))
    With Worksheets("Eingabe")
    .Range(.Columns(15), .Columns(17)).EntireColumn.Hidden = True
    End With
    Case 4
    'do nothing
    End Select
    Call Druckbereich(lAnzahl:=Worksheets("Daten").Range("A8"))
    End Sub
    Sub Aus_Shapes(wks As Worksheet, arrNames)
    'Ausblenden der genannten Shapes im Blatt
    Dim iI As Long
    For iI = LBound(arrNames) To UBound(arrNames)
    wks.Shapes(arrNames(iI)).Visible = False
    Next
    End Sub
    Private Sub Druckbereiche(lAnzahl)
    Dim wks As Worksheet
    'Festlegen des Druckbereiches abhängig von lAnzahl
    Set wks = Worksheets("Ausdruck") 'Tabellenblatt mit Angebotstexten
    With wks
    Select Case Anzahl '=Anzahl Kunden
    'Die Druckbereiche im Tabellenblatt für die Fälle sind mit Namen festgelegt.
    Case 1
    .PageSetup.PrintArea = "$a$1:$h$56"
    Case 2
    .PageSetup.PrintArea = "$a$57:$h$112"
    Case 3
    .PageSetup.PrintArea = "$a$113:$h$168"
    Case Else
    MsgBox "Unzulässige Anzahl" & vbLf & "Der Druckbeich im Blatt """ & .Name _
    & """ wird aufgehoben.", vbInformation + vbOKOnly, _
    "Druckbereich Angebot einrichten"
    .PageSetup.PrintArea = ""
    End Select
    End With
    End Sub
    

    Anzeige
    AW: Druckmaske unterschiedlich lang - Ergänzung
    19.04.2010 11:03:37
    fcs
    Hallo Werner,
    alternativ zum Anpassen des Druckbereichs kann man auch die "unerwünschten" Zeilen ausblenden.
    Gruß
    Franz
    Private Sub Druckbereiche(lAnzahl)
    Dim wks As Worksheet
    'Festlegen der auszublenden Zeilen abhängig von lAnzahl
    Set wks = Worksheets("Ausdruck") 'Tabellenblatt mit Angebotstexten
    With wks
    .Rows.Hidden = Falls
    Select Case Anzahl '=Anzahl Kunden
    'Die Druckbereiche im Tabellenblatt für die Fälle sind mit Namen festgelegt.
    Case 1
    .Range(.Rows(57), .Rows(168)).EntireRow.Hidden=True
    Case 2
    .Range(.Rows(112), .Rows(168)).EntireRow.Hidden=True
    Case 3
    'do nothing - nichts ausblenden
    Case Else
    MsgBox "Unzulässige Anzahl" & vbLf & "Der Druckbeich im Blatt """ & .Name _
    & """ wird aufgehoben.", vbInformation + vbOKOnly, _
    "Druckbereich Angebot einrichten"
    .PageSetup.PrintArea = ""
    End Select
    End With
    End Sub
    

    Anzeige
    AW: Druckmaske unterschiedlich lang
    19.04.2010 22:37:44
    EarnyToLearny
    Hallo Franz,
    das nenn ich ganze Arbeit. Vielen Dank, klappt ausgezeichnet.
    Gruß Werner

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige