Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
884to888
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
884to888
884to888
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Druckbereich: Names.Add Druckbereich vs PrintArea

Druckbereich: Names.Add Druckbereich vs PrintArea
16.07.2007 13:44:00
Peter
Liebes Forum
Mit dem

Sub worksheet_deactivate() möchte ich für einige Tabellen folgenden Code aufrufen, mit dem Ziel, _
dass der Druckbereich angepasst wid. Dieser soll Spalten A bis V und Zeile 1 bis derjenigen mit dem letzten Eintrag in Spalte D sein.
Wenn ich das Definieren des Druckbereichs mit dem Makrorecorder aufzeichne, wird der Befehl
ActiveSheet.PageSetup.PrintArea
aufgezeichnet.
Wie kann ich diesen in nachfolgenden Code integrieren? Spätestens bei einer anderen  _
Sprachversion würde wohl "Druckbereich" nichts mehr bringen.
Danke für eine Rückmeldung.
Peter


Sub DrBereich_festlegen()
Dim lngANF As String
Dim lngEND As String
Dim ASN As String
ThisWorkbook.Activate
ASN = ActiveSheet.Name
strANF = 1
strEND = Sheets(ASN).Cells(65536, 4).End(xlUp).Row    'ermittelt letzten Eintrag in Spalte D
'Druckbereich definieren
Set Bereich = Range("D" & strANF, "V" & strEND)
Names.Add _
Name:="Druckbereich", _
RefersTo:=Bereich, Visible:=True
End Sub


11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Druckbereich: Names.Add Druckbereich vs PrintA
16.07.2007 13:58:55
Renee
Mazwara Peter,
Wichtig ist doch, das der Druckbereich vor dem Drucken stimmt. Dann könntest Du es so machen:
(Code gehört in DieseArbeitsmappe):

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.PrintArea = "$A$1:$V$" & _
ActiveSheet.Range("D" & ActiveSheet.Rows.Count).End(xlUp).Row
End Sub


Greetz Renee

AW: Druckbereich: Names.Add Druckbereich vs PrintA
16.07.2007 14:31:32
Peter
Hallo Renee
Gute Idee! Kleiner Einwand: Habe ich nicht ein Problem, wenn ich mir das ganze in der Seitenansicht anschauen will? Vielleicht jedoch auch nicht, kann ich ja noch austesten.
Allerdings müsste ich im Code in DieseArbeitsmappe eine Einschränkung machen, da diese Druckbereichsdfinition nur für 7 Tabellen gilt. Mache ich das am besten mit Case?
case select worksheet.name
case is ALSO, SIMPLEX, DITO
case else
end select
Danke und Gruss, Peter

Anzeige
AW: Druckbereich: Names.Add Druckbereich vs PrintA
16.07.2007 14:37:00
Renee
Hello Peter,
Die Routine greift auch vor dem PrintPreview.
Einschränkung könnte auch mit einer Konstante passieren, z.B. so:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Const sValidNames = "ALSO, SIMPLEX, DITO"
If InStr(ActiveSheet.Name, sValidNames) = 0 Then Exit Sub
ActiveSheet.PageSetup.PrintArea = "$A$1:$V$" & _
ActiveSheet.Range("D" & ActiveSheet.Rows.Count).End(xlUp).Row
End Sub


Greetz Renee

AW: Danke vielmals! owT
16.07.2007 14:49:00
Peter

AW: Druckbereich: Names.Add Druckbereich vs PrintA
16.07.2007 16:11:09
Peter
Hallo Renée
Komme nochmals mit dem Code. Irgendwie klappt es nicht mit
If InStr(ActiveSheet.Name, TabNamenViaCodenamen) = 0 Then Exit Sub, das heisst, diese Prüfung ergibt mir regelmässig 0 und damit wird kein neuer Druckbereich festgelegt.
Wie du untenstehendem Code entnehmen kannst, habe ich die Konstante durch eine Abfrage der betroffenen Tabellennamen ersetzt, da die Möglichkeit besteht, dass die betreffenden Tabellennamen umbenannt werden.
Mit MsgBox habe ich mir den String (alle Tabellennamen hintereinander) sowie den jeweiligen Tabellennamen anzeigen lassen. Auch wenn der Tabellennamen in diesem String enthalten ist, wird mir eine NULL ausgegeben. Die MsgBox Meldung ("X") nach dieser Anfrage wurde mir nie angezeigt, was bestätigt, dass bei Exit Sub immer Ende ist.
Wahrscheinlich wir nur eine Kleinigkeit falsch sein und für ein geübtes Auge auf den ersten Blick erkennbar.
Danke für eine Rückmeldung.
Peter

Private Sub Workbook_Beforeprint(Cancel As Boolean)
Dim TabNamenViaCodenamen As String
Dim ASN As String
TabNamenViaCodenamen = Tabelle11.Name & Tabelle12.Name & Tabelle13.Name & Tabelle14.Name &  _
Tabelle15.Name & Tabelle16.Name & Tabelle17.Name
MsgBox TabNamenViaCodenamen
ASN = ActiveSheet.Name
MsgBox ASN
MsgBox ActiveSheet.Name
MsgBox InStr(ActiveSheet.Name, TabNamenViaCodenamen)
If InStr(ActiveSheet.Name, TabNamenViaCodenamen) = 0 Then Exit Sub
If InStr(ASN, TabNamenViaCodenamen) = 0 Then Exit Sub
ActiveSheet.PageSetup.PrintArea = "$A$1:$V$" & ActiveSheet.Range("G" & ActiveSheet.Rows.Count). _
End(xlUp).Row
MsgBox "x"
End Sub


Anzeige
AW: Druckbereich: Names.Add Druckbereich vs PrintA
16.07.2007 16:28:04
Renee
Hi Peter,
Klar, weil ich da ein Schrott zusammenprogrammiert habe.
Habe Bei Instr die Parameter vertauscht... Sorry:
So:

Private Sub Workbook_Beforeprint(Cancel As Boolean)
Dim TabNamenViaCodenamen As String
TabNamenViaCodenamen = Tabelle11.Name & Tabelle12.Name & _
Tabelle13.Name & Tabelle14.Name & _
Tabelle15.Name & Tabelle16.Name & _
Tabelle17.Name
If InStr(TabNamenViaCodenamen, ActiveSheet.Name) = 0 Then Exit Sub
ActiveSheet.PageSetup.PrintArea = "$A$1:$V$" & _
ActiveSheet.Range("G" & ActiveSheet.Rows.Count).End(xlUp).Row
End Sub


Greetz Renee

Anzeige
AW: Druckbereich: Names.Add Druckbereich vs PrintA
16.07.2007 16:47:23
Peter
Hallo Renée
Vielen Dank, jetzt klappt's!
Peter

AW: Druckbereich: Names.Add Druckbereich vs PrintA
16.07.2007 14:03:00
Ramses
Hallo
eines vorweg, du kannst nicht einfach Variablennamen ändern
strANF statt lngANF
Damit geht es Sprachunabhängig
Sub DrBereich_festlegen()
    Dim lngANF As String
    Dim lngEND As String
    Dim startCol As Long, endCol As Long
    Dim strStartCol As String, strEndCol As String
    Dim ASN As String
    startCol = 1 'Spalte A
    endCol = 4 'Spalte D
    ThisWorkbook.Activate
    ASN = ActiveSheet.Name
    lngANF = startCol
    lngEND = Sheets(ASN).Cells(65536, endCol).End(xlUp).Row 'ermittelt letzten Eintrag in Spalte D
    strStartCol = Left(Columns(startCol).Address(0, 0), Len(Columns(startCol).Address(0, 0)) - InStr(1, Columns(startCol).Address(0, 0), ":"))
    strEndCol = Left(Columns(endCol).Address(0, 0), Len(Columns(endCol).Address(0, 0)) - InStr(1, Columns(endCol).Address(0, 0), ":"))
    ActiveSheet.PageSetup.PrintArea = strStartCol & lngANF & ":" & strEndCol & lngEND
End Sub

Mit
ActiveSheet.Pagesetup.Printarea = ""
kannst du den Druckbereich wieder aufheben
Gruss Rainer

Anzeige
AW: Druckbereich: Names.Add Druckbereich vs PrintA
16.07.2007 14:22:00
Peter
Hallo Rainer
Vielen Dank. Das hilft mir so weiter.
Zum Ändern von Variablennamen: Da habe ich noch schnell was geändert, ohne alles anzupassen.
Wenn ich es richtig sehe kann ich die Zeilennummern direkt Longvariablen zuweisen.
Gruss, Peter

AW: Druckbereich: Names.Add Druckbereich vs PrintA
16.07.2007 14:40:00
Ramses
Hallo
du kannst das auch flexibel handhaben, dann musst du in dem eigentlichen Makro nichts mehr ändern
Damit gibst du nur noch an, welche Tabelle gedruckt werden soll, so die Startzeile beginnt und welche Spalten überprüft werden sollen.

Sub Druckbereich_definieren()
    'Tabelle angeben wo der Druckbereich erstellt werden soll
    'Start des Druckebereiches in Zeile 5
    'beginnt in Spalte 1 = A
    'endet in Spalte 4 = D
    DrBereich_festlegen "Tabelle2", 5, 1, 4
End Sub

Sub DrBereich_festlegen(printSheet As String, rowStart As Long, startCol As Long, endCol As Long)
    Dim rowEnd As Long
    Dim ASN As String
    Dim strStartCol As String, strEndCol As String
    With ThisWorkbook
        .Activate
        With .Worksheets(printSheet)
            rowEnd = .Cells(.Rows.Count, endCol).End(xlUp).Row 'ermittelt letzten Eintrag in übergebener Spalte
            strStartCol = Left(.Columns(startCol).Address(0, 0), Len(.Columns(startCol).Address(0, 0)) - InStr(1, .Columns(startCol).Address(0, 0), ":"))
            strEndCol = Left(.Columns(endCol).Address(0, 0), Len(.Columns(endCol).Address(0, 0)) - InStr(1, .Columns(endCol).Address(0, 0), ":"))
            .PageSetup.PrintArea = ""
            .PageSetup.PrintArea = strStartCol & rowStart & ":" & strEndCol & rowEnd
        End With
    End With
End Sub

Gruss Rainer

Anzeige
AW: Druckbereich: Names.Add Druckbereich vs PrintA
16.07.2007 14:53:00
Peter
Hallo Rainer
Vielen Dank für diese interessante Lösung. Da muss ich mich noch etwas hineindenken. Flexible Handhabung finde ich grundsätzlich immer sehr erstrebenswert.
Gruss, Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige