Office: nur Teil der Tabelle mit aktuellem Datum drucken

Helfe beim Thema nur Teil der Tabelle mit aktuellem Datum drucken in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, nach vielen frustrierten Versuchen seit Ihr nun meine Hoffnung :) Ich habe ein ( meinen Augen unübersichtliches, aber von Chef so... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von dasputzi, 26. Januar 2015.

  1. dasputzi Erfahrener User

    nur Teil der Tabelle mit aktuellem Datum drucken


    Hallo,

    nach vielen frustrierten Versuchen seit Ihr nun meine Hoffnung :)

    Ich habe ein ( meinen Augen unübersichtliches, aber von Chef so gewünschtes) Tabellenblatt auf dem unter einander für jeden Wochentag bis Juli eine kleine Tabelle ( immer gleiches Aussehen ) ist wo Angaben zu dem Tag eingetragen werden.Das aktuell Datum steht immer am oberen Rand dieser Tabelle in Spalte A ( A 1, A14, A27 usw.).

    Nun werden viele Menschen dort Tag täglich reinschauen und sich ein das aktuelle Blatt drucken wollen. Ich weiss jetzt schon dass sicher nicht immer daran gedacht wird, den gewünschten Bereich zu markieren vor dem drucken. Un die armen Bäume tun mir jetzt schon leid. ;)

    Nun meine Frage: kann mir jemand ein Makro kreiieren, dass immer nur die Seite mit dem aktzuellen Datum gedruckt wird? Ich habe bereits Sietenumbrüche eingebaut, dass sich immer ein tag auf einer Seite theroretisch befindet. Oder gibt es eine leichtere Möglichkeit? Ich hatte überlegt immer rechts von jedem Tag ein kleinen Button zu setzen, dass dieser dann nur das jeweilige blatt ausdruck.

    Es wäre ganz großartig.

    Tausend Dank vor ab
     
    dasputzi, 26. Januar 2015
    #1
  2. miriki Erfahrener User
    Moinsens!

    Heißt also: Die Tabelle für "Januar" geht von A1 bis (irgendwas)13?

    Wird immer nur der aktuelle Monat ausgedruckt? Oder besteht auch mal die Notwendigkeit, einen anderen Monat auszudrucken?

    Ich könnte mir sonst nämlich einen 3-Zeiler im Autostart der Mappe vorstellen, der den Druckbereich auf den Monat setzt.

    Wenn jemand dann einen anderen Bereich drucken möchte, kann er den Druckbereich ja immer noch umstellen, aber pauschal ohne weiteres Zutun wird dann eben der aktuelle Monat gedruckt. Sowas in der Art könnte funktionieren, wenn Du die "Const" Angaben ggf. anpaßt, insbesondere "BlockBreite": (In "DieseArbeitsmappe" einkopieren)
    Code:
    Option Explicit
    
    Private Sub Workbook_Open()
    
        Const BlockZeile1 = 1
        Const BlockHoehe = 13
        Const BlockSpalte1 = 1
        Const BlockBreite = 10
        Const BlockBlatt = "Tabelle1"
    
        Dim s1 As Worksheet
        Dim mm As Integer
        Dim y1 As Long
        Dim x1 As Integer
        Dim y2 As Long
        Dim x2 As Integer
    
        mm = Month(Now())
        
        y1 = (mm - 1) * BlockHoehe + BlockZeile1
        x1 = BlockSpalte1
        y2 = y1 + BlockHoehe - 1
        x2 = x1 + BlockBreite - 1
        
        Set s1 = Worksheets(BlockBlatt)
        s1.PageSetup.PrintArea = Range(s1.Cells(y1, x1), s1.Cells(y2, x2))
    
    End Sub
    Gruß, Michael
     
  3. dasputzi Erfahrener User
    Hey.

    vielen Dank schonmal.
    Alles was du sgast stimmt so. Nur dass es sich nicht um Monate sondern um tage handelt.
    Also der 26.1. geht z.b. von A66 bis A78, der 27.01. von A79 bis A91 und so on. Was ich noch vergessen habe ist, dass die Tabelle pro Tag bis Splate L geht.
    Im Prinzip brauchen die Leute nur den aktuellen Tag. Und wenn nicht dann könen Sie das umstellen. So sehe ich das auch.

    In deinem Code müsste also anstatt des Monats das Datum eingeflochten werden. Richtig? Das Datum steht immer in Spalte A:

    hoffe du verstehst mein kauderwelsch :)
     
    dasputzi, 26. Januar 2015
    #3
  4. miriki Erfahrener User

    nur Teil der Tabelle mit aktuellem Datum drucken

    Moinsens!

    Ja, ich glaube schon. ;-)

    Versuch mal:
    Code:
    Const BlockBreite = 12
    Damit ist schon mal "A:L" abgedeckt, sofern BlockSpalte1=1 und somit "A" ist.

    Jetzt brauchen wir aber nicht den Monat im Jahr, sondern den Tag im Jahr. Das kann man ausrechnen, indem
    Code:
    'mm = Month(Now())
    mm = Now() - DateSerial(Year(Now()), 1, 1) + 1
    vom aktuellen Tag der Tag des 1. Januars im gleichen Jahr abgezogen wird. Nur wieder +1, damit am 1. Januar nicht 0 bei rauskommt...

    Außerdem hatte ich noch ein kleines Wörtchen am Ende von
    Code:
    s1.PageSetup.PrintArea = s1.Range(s1.Cells(y1, x1), s1.Cells(y2, x2))[U][B].Address[/B][/U]
    vergessen...

    So hat's mir eben für den 27. Januar den Druckbereich auf A339:L351 festgelegt.

    Gruß, Michael
     
  5. miriki Erfahrener User
    Moinsens!

    Ich vergaß eben noch zu fragen:

    Und wie schaffst Du es dann, die vorherigen 25 Tage in 65 Zeilen, also weniger als 3 Zeilen pro Tag, unterzubringen?

    Gruß, Michael
     
  6. dasputzi Erfahrener User
    da denkt einer mit :)
    ich habe mit der Tabelle erst am 19.1. angefangen :).....

    probiere es gleich mal aus!

    Merci schon mal aus dem Süden in den Norden...
     
    dasputzi, 27. Januar 2015
    #6
  7. dasputzi Erfahrener User
    Hey.

    also ich habe es mal probiert.
    Erstmal Super: die Natur freut sich es kommt nur noch ein Blatt :). Allerdings nicht das vom aktuellen Tag sondern das vom 23.01..

    Ich habe jetzt noch bei "BlockBlatt" den Tabellennamen geändert aber das macht auch keinen Unterschied.
    Liegt es daran dass ich erst mit dem 19.1. angefangen haben? Sonst füge ich halt die anderen mit ein.

    Hier nochmal das, was ich jetzt drin habe:
    Private Sub Workbook_Open()

    Const BlockZeile1 = 1
    Const BlockHoehe = 13
    Const BlockSpalte1 = 1
    Const BlockBreite = 12
    Const BlockBlatt = "Infiltration 01-06.2015"

    Dim s1 As Worksheet
    Dim mm As Integer
    Dim y1 As Long
    Dim x1 As Integer
    Dim y2 As Long
    Dim x2 As Integer

    'mm = Month(Now())
    mm = Now() - DateSerial(Year(Now()), 1, 1) + 1

    y1 = (mm - 1) * BlockHoehe + BlockZeile1
    x1 = BlockSpalte1
    y2 = y1 + BlockHoehe - 1
    x2 = x1 + BlockBreite - 1

    Set s1 = Worksheets(BlockBlatt)
    s1.PageSetup.PrintArea = Range(s1.Cells(y1, x1), s1.Cells(y2, x2)).Address

    End Sub


    liebe Grüße
     
    dasputzi, 27. Januar 2015
    #7
  8. miriki Erfahrener User

    nur Teil der Tabelle mit aktuellem Datum drucken

    Moinsens!

    Und ich war schon am überlegen, ob ich auf das andere Posting noch antworten sollte... ;-)

    Die Berechnung der Zeile mittels
    Code:
    mm = Now() - DateSerial(Year(Now()), 1, 1) + 1
    [...]
    y1 = (mm - 1) * BlockHoehe + BlockZeile1
    basiert natürlich darauf, daß der 1. Januar in der 1. Zeile steht. Wenn der 19. Januar in Zeile 1 steht, mußt Du nur dafür sorgen, daß am 19. Januar auch eine 1 für mm herauskommt:
    Code:
    mm = Now() - DateSerial(Year(Now()), 1, 1) + 1 [B][COLOR=#ff0000]- 18[/COLOR][/B]
    oder eben alternativ die Tabelle doch mit dem 1. Januar anfangen. Denn ansonsten würde es vor dem 19. Januar wegen negativer Zeile zu einem Fehler führen. Falls Du also vor hast, die Tabelle nächstes Jahr auch noch zu benutzen...

    Code:
    s1.PageSetup.PrintArea = [U][B]s1.[/B][/U]Range(s1.Cells(y1, x1), s1.Cells(y2, x2)).Address
    Ich bin mir nicht ganz sicher, ob es auch ohne gegangen wäre, hatte es nicht ausprobiert. Aber korrekterdings gehört das s1 vor der Range-Angabe noch dazu.

    Gruß, Michael
     
  9. dasputzi Erfahrener User
    Hey Michael,
    ja dass war dumm von mir dir das nicht gleich zu sagen. Sorry.

    Alos ich habe jetzt die Tabelle auf den 1.1. verlängert. Jetzt druckt er mir aber den 9.2. aus. ich glaubde das liegt daran, dass er ja quasi anhand der Splaten und Breiten errechnet an welchem Platz das aktuelle datum sein muss oder? Ich habe nur die Wochentage genommen, wie ganz oben beschrieben. Da wird er sich also so verrechnen
    Was würde denn jetzt passieren, wenn ich an einem Tag noch eine Spalte einfügen muss, weil der Platz nicht reicht? Dann würde es doch auch nicht mehr gehen oder?

    Kann man das nicht so codieren, dass er in der Spalte A nach dem aktuellen Datum sucht und wenn er es gefunden hat, dann druckt er die Seite aus.
    So einen ähnlichen Code habe ich schon drin, da er beim öffnen immer auf die Tabelle mit dem aktuelen Datum springt sodass man nicht dumm scrollen brauch.

    Andere Möglichkeit wäre ( sicherlich aufwendiger, denk ich) dass nach jedem Tag eine Schaltfläche ist, die durch Klick nur die Tabelle ausdruckt zu der die Schaltfläche gehört. Seitenumbrüche habe ich nach jeder Tabelle eingefügt.

    wenn du magst darfst du nochmal drüber nachdenken :)

    lg
     
    dasputzi, 27. Januar 2015
    #9
  10. miriki Erfahrener User
    Moinsens!

    Ah, ok, wenn dann die Tage nicht fortlaufend sind, weil die Wochenenden fehlen, dann reicht die Berechnung so nicht.

    Dafür sind ja die Konstanten-Deklarationen zuständig. Die müssen dann entsprechend angepaßt werden.

    Das war die Alternative, an die ich auch zuerst dachte. So eine Suche ist aber immer etwas "hakeliger" und ich hatte gehofft, daß es auf dem anderen, stabileren Weg auch gehen würde.

    Geht los, schaff ich aber heute nicht mehr.

    Gruß, Michael
     
  11. miriki Erfahrener User
    versuch mal:

    Code:
    Option Explicit
    
    Private Sub Workbook_Open()
    
        Const BlockZeile1 = 1
        Const BlockHoehe = 13
        Const BlockSpalte1 = 1
        Const BlockBreite = 12
        Const BlockBlatt = "Infiltration 01-06.2015"
    
        Dim s1 As Worksheet
        Dim mm As Integer
        Dim y1 As Long
        Dim x1 As Integer
        Dim y2 As Long
        Dim x2 As Integer
    
        'mm = Month(Now())
        'mm = Int(Now()) - Int(DateSerial(Year(Now()), 1, 1)) + 1
        
        'y1 = (mm - 1) * BlockHoehe + BlockZeile1
        x1 = BlockSpalte1
        
        Set s1 = Worksheets(BlockBlatt)
        
        mm = s1.Cells(s1.Rows.Count, x1).End(xlUp).Row
        y1 = BlockZeile1
        While (y1 <= mm)
            If Int(s1.Cells(y1, x1).Value) = Int(Now()) Then
                mm = y1
            End If
            y1 = y1 + 1
        Wend
        y1 = y1 - 1
        
        y2 = y1 + BlockHoehe - 1
        x2 = x1 + BlockBreite - 1
        
        s1.PageSetup.PrintArea = s1.Range(s1.Cells(y1, x1), s1.Cells(y2, x2)).Address
    
    End Sub
    keine Gewähr, da Trockenschwimmen ohne echte Vorlage...

    Gruß, Michael
     
  12. dasputzi Erfahrener User
    ui habs heut erst gesehen..

    also heut ist natürlich (nicht) ein doofer Tag, da ja bei mir nur die Wochentage vorkommen. Deshalb funktioniert meine auto_open geschichte heute nicht.
    Um das aber zu testen habe ich jetzt den 29.1. als 31.1. deklariert. Damit öffnet er mir die Tabelle auch wieder an der richtigen stelle.
    Dein neuen Code habe ich eingefügt. Es kommt der Laufzeitfehler 13
    Typen unverträglich und zeigt mir diese Zeile:

    If Int(s1.Cells(y1, x1).Value) = Int(Now()) Then.


    schau mal das habe ich gemacht, damit er in der Spalte A nach dem Datum sucht und dann die Tabelle dort öffnet.

    Code:
    Sub auto_open()
    spalte = "A"
    datum = Date
    On Error Resume Next
    zeile = Columns(spalte & ":" & spalte).Find(datum, LookIn:=xlValues).Row
    If zeile = "" Then
    MsgBox ("Das aktuelle Datum wurde nicht gefunden.")
    Else
    Application.Goto ActiveSheet.Cells(zeile, spalte), True
    End If
    End Sub


    Danke für deine Gehirnleistung :)

    LG
     
    Zuletzt bearbeitet: 31. Januar 2015
    dasputzi, 31. Januar 2015
    #12
  13. miriki Erfahrener User

    nur Teil der Tabelle mit aktuellem Datum drucken

    Moinsens!

    Dann ist in der Spalte nicht nur ein Datum, ggf. von leeren Zellen umgeben. Eine leere Zelle wäre "0" und damit im Vergleich mit einem "Datum" auch noch zulässig. Aber wenn da ein Text drin steht, rennt's an die Wand. Und wenn Deine Datums-Angaben kein echtes Datum sind, sondern nur Text, der wie ein Datum aussieht, ist's ebenfalls Essig.

    Code:
    Sub auto_open()
        spalte = "A"
        datum = Date
    On Error Resume Next
        zeile = Columns(spalte & ":" & spalte).Find(datum, LookIn:=xlValues).Row
        If zeile = "" Then
            MsgBox ("Das aktuelle Datum wurde nicht gefunden.")
        Else
            Application.Goto ActiveSheet.Cells(zeile, spalte), True
        End If
    End Sub
    Ok, es führen ja viele Wege nach Rom. Blöd nur, wenn man da gar nicht hin will, ok... ;-) Also...

    a) Ich würde nicht auto_open benutzen, sondern Das Workbook-Open Ereignis.
    b) "on error resume next" ist böse! Vermeide es, wo es nur geht!
    c) Das "on error resume next" wird nicht wieder durch "on error goto 0" aufgehoben. Du siehst also überhaupt keine Fehler mehr.
    c) Ich schätze, Du hast kein "option explicit" in Deinen Modulen - dringend angeraten!
    d) Denn dann hättest Du ein "dim zeile as long" angeben müssen. (Und bitte nicht, nur weil man dann alle Variablen deklarieren muß, dann aus Faulheit immer "dim xxx as variant" benutzen!)
    e) Damit wäre der Vergleich "If zeile = "" Then" an die Wand gefahren (type mismatch = long mit string verglichen)

    Grundsätzlich kannst Du aber natürlich auch mit .find nach dem Datum suchen. Ich bin mir aber jetzt nicht ganz sicher. ob .row an die Wand läuft, wenn .find nicht erfolgreich ist. Ich würde ohne .row das zurückgegebene Range auf "nothing" prüfen und erst dann, wenn es "not nothing" ist, die .row benutzen.

    Müßte dann irgendwie so in der Art sein:
    Code:
    dim rng as range
    dim zeile as long
    ...
    
    rng = Columns(spalte & ":" & spalte).Find(datum, LookIn:=xlValues)
    if (not rng is nothing) then
        zeile = rng.row
        ...
      else
        msgbox "fehler"
    end if
    Gruß, Michael
     
  14. dasputzi Erfahrener User
    sorry dass ich mich erst jetzt melde. ich ersticke in Arbeit.. ich hoffe ich komm heute dazu.

    Danke schonmal...

    lg
     
    dasputzi, 4. Februar 2015
    #14
  15. dasputzi Erfahrener User
    hey.

    so also.
    Ehrlich gesagt überfordert mich deine Antwort ein bissel *rotwerd*
    Was VBA angeht habe ich ein gefährliches Halbwissen :) alles was ich kann, habe ich mir irgendwie zusammengeschustert ohne nie wirklich zu wissen, wie ich es "richtig" aufbaue.

    Also zu deinem ersten Punkt. Ich habe die Zele als Datum formatiert, da sonst die auto _open Geschichte eh nicht funktioniert.
    In A 1, A 14, A27 uws. steht das datum, aber schon ein Feld darunter und darüber steht ein text. Ist es möglicherweise das Problem?

    zu deinen Punkten a bis e.. ich verstehe leider nicht alles nur Teil der Tabelle mit aktuellem Datum drucken :( sorry Wie gesagt den Code habe ich aus Dingen zusammengeschustert, die ich wusste und im netzt gefuden habe. Eine intelligente Überlegung stand dahinter nicht wirklich...
    daher weisss ich jetzt auch gerade nicht zu 100%, wie ich deinen Code verfeinern soll, bzw. wie ich meinen abändern soll.
    Meinst du du kannst mir da nochmal helfen * liebschau*

    Würde es dir was helfen, wenn ich dir die Datei schicke?

    danke
     
    dasputzi, 4. Februar 2015
    #15
Thema:

nur Teil der Tabelle mit aktuellem Datum drucken

Die Seite wird geladen...
  1. nur Teil der Tabelle mit aktuellem Datum drucken - Similar Threads - Teil Tabelle aktuellem

  2. VBA Excel in mehrere teilen nach Kostenstelle

    in Microsoft Excel Hilfe
    VBA Excel in mehrere teilen nach Kostenstelle: Hallo liebe Office Community, ich bin mit VBA nicht so bewandert und habe folgenden "Auftrag"... Eine Excel Datei aus SAP soll aufgeteilt werden nach Kostenstelle. Sprich für jede Kostenstelle...
  3. Video: Teilen von Tabellen

    in Microsoft Excel Tutorials
    Video: Teilen von Tabellen: Video: Teilen von Tabellen Excel für Microsoft 365 Word für Microsoft 365 Outlook für Microsoft 365 PowerPoint für Microsoft 365 Excel 2019 Word 2019...
  4. Teilen einer Tabelle

    in Microsoft PowerPoint Tutorials
    Teilen einer Tabelle: https://eus-streaming-video-rt-microsoft-com.akamaized.net/174ecfd3-752e-4237-8c85-da649c5c387f/4c89446d-f909-4f3f-8c0f-575f869f_3400.mp4 Probieren Sie es aus! Wenn eine Tabelle zu...
  5. Verbinden oder Teilen von Zellen in einer Tabelle

    in Microsoft Outlook Tutorials
    Verbinden oder Teilen von Zellen in einer Tabelle: Verbinden oder Teilen von Zellen in einer Tabelle Word für Microsoft 365 Outlook für Microsoft 365 Word für Microsoft 365 für Mac Outlook für Microsoft 365 für Mac...
  6. Verbinden oder Teilen von Zellen in einer Tabelle

    in Microsoft Word Tutorials
    Verbinden oder Teilen von Zellen in einer Tabelle: Verbinden oder Teilen von Zellen in einer Tabelle Word für Microsoft 365 Outlook für Microsoft 365 Word für Microsoft 365 für Mac Outlook für Microsoft 365 für Mac...
  7. Teilen einer Tabelle

    in Microsoft Word Tutorials
    Teilen einer Tabelle: Teilen einer Tabelle Word für Microsoft 365 Word 2019 Word 2016 Word 2013 Mehr... Weniger...
  8. VBA suchen nach Inhalten und bestimmter Teil in anderer Tabelle ausgeben

    in Microsoft Excel Hilfe
    VBA suchen nach Inhalten und bestimmter Teil in anderer Tabelle ausgeben: Hallo Profi's, habe für mich ein großes Problem , was für euch eventuell recht einfach zu lösen wäre. Ich habe eine Arbeitsmappe mit 20 Tabellen-blätter. Hier würde ich gerne eine Auswertung...
Schlagworte:
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden