Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1516to1520
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

Makrostart

Makrostart
26.09.2016 14:55:48
Matze
Hallo,
ich habe ein Problem mit einem Makro. Ich habe mir ein einfaches Makro geschrieben welches Tabellenspalten ein und ausblenden kann.
Das Makro soll beim ersten mal Öffnen einer Arbeitsmappe ausgeführt werden. Aber: Nur wenn das nach einem bestimmten Datum passiert.
z.B. Sollen drei Spalten ab dem 01.01.2017 ausgeblendet werden. Wenn ich jetzt erst am 10.01.2017 den Rechner anmache sollte das gleich passieren.
Habe das schon mal mit einer If Funktion hinbekommen aber da wurde das Makro dann immer wieder aufgerufen jedesmal wenn ich das Tabellenblatt aktiviert habe.
Wichtig deshalb: Das Makro darf nur einmal nach diesem Datum ausgeführt werden auch wenn das Tabellenblatt danach öfters geöffnet wird.
Ich bin für jede Hilfe dankbar.

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makrostart
26.09.2016 15:31:35
ChrisL
Hi Matze
Im Beispiel wird in Zelle B1 ein WAHR gespeichert, wenn der Vorgang bereits einmal ausgeführt wurde. Die Kennzeichnung könnte man auch irgendwo versteckt in den Datei-Eigenschaften speichern, aber das Prinzip ist gleich d.h. es braucht eine Kennzeichnung.
Private Sub Workbook_Open()
With Worksheets("Tabelle1")
If Date > .Range("A1") And Not .Range("B1") Then
.Range("B1") = True
ThisWorkbook.Save
MsgBox "Hier dein Makro" 'Platzhalter
End If
End With
End Sub

cu
Chris
AW: Makrostart
26.09.2016 16:37:36
Michael
Hi,
ich schließe mich (ausnahmsweise) Chris' Argumentation nicht an: die Workbook_Open wird ohnehin nur beim Öffnen der Datei ausgeführt, so daß das "Merken" eines Wertes nicht nötig ist: beim Wechseln eines Blattes in der geöffneten Datei wird es nämlich nicht mehr ausgeführt.
Im Gegenteil: wenn ich B1=true setze, läuft das Makro beim nächsten Öffnen auch nicht mehr.
Schöne Grüße,
Michael
Anzeige
AW: Makrostart
26.09.2016 16:56:31
ChrisL
Hi Michael
Vielleicht hast du recht, aber ich hatte die Vermutung, dass Matze mit "Tabellenblatt" eigentlich die "Mappe" meinte. Zugegeben eine etwas gewagte Vermutung und darum bin ich jetzt umso mehr gespannt, was Matze meint :)
cu
Chris
AW: Makrostart
26.09.2016 18:13:35
Matze
Jau, ich meinte die Mappe. Für mich wäre da auch kein Unterschied ob das Makro bei dem Öffen der Arbeitsmappe oder bei aktivieren des Tabellenblatts losläuft.
Wichtig ist das das Makro auch nach dem vorgegebenen Datum noch ausgeführt wird. Habe das schon mit Aplication.OnTime versucht aber wenn ich da Excel schließe und die Zeit verstreichen lasse wird das Makro nicht ausgeführt.
Danke für euren Input...:-)
Anzeige
AW: Makrostart
26.09.2016 18:26:24
ChrisL
Hi Matze
OnTime geht definitiv nicht, aber vielleicht wäre eine Verschiebung des Makros von Worksheet_Activate in Workbook_Open bereits die halbe Miete.
Vielleicht kannst du das Vorhaben insgesamt mal genauer umschreiben. Bisher verstehe ich, dass du abgelaufene Jahre (alle Jahre wieder) automatisch ausblenden willst. Wenn dies wiederholt beim Öffnen geschieht, wäre es doch auch kein Beinbruch, da es nur Millisekunden dauert und abgelaufen ist abgelaufen.
cu
Chris
AW: Makrostart
26.09.2016 18:40:47
Matze
Also, ich habe eine Tabelle mit mehreren Spalten für die nächsten 3 Jahre bereits mit Excel erzeugt. Jetzt will ich das nach Ablauf eines Jahres der Abschnitt des gerade vergangenen Jahres automatisch ausgeblendet wird. Ausgeblendet, weil ich die eingegebenen Daten noch weiter verwenden will. Das heißt ich habe drei Ausblende Makros erstellt.
Diese sollen sich jeweils zum 01.01 einschalten und die Spalten ausblenden. Wichtig ist das das automatisch passieren muss, nicht manuell.
Mit if und date müsste das eigentlich gehen. Vergleich des aktuellen Jahres mit dem eingegeben Datum. Wenn das passt dann führe das Makro aus. So weit war ich schon aber damit hat Excel immer das Makro ausgeführt wenn ich das Tabellenblatt aktiviert habe. Also ständig.
Das war nicht so toll...:-)
Anzeige
AW: Makrostart
26.09.2016 19:07:18
ChrisL
Hi Matze
OK... Keine grosse Sache (aus 3 Makros mache eins, und Kennzeichen brauchts auch nicht)...
Dim rng As Range
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
For Each rng In .Range("B1:D1")
If Year(Date) > Year(rng) Then .Columns(rng.Column).EntireColumn.Hidden = True
Next rng
End With
Und nochmal... Workbook_Open (nicht WS_Activate) ;)
Ich glaube in der Performance (Ladezeit) spürst du das nicht.
cu
Chris
AW: Makrostart
27.09.2016 09:24:12
Matze
Letzte Frage.
1. Tabebelle 1 ist mein Tabellenblatt gemeint. Füge ich ein.
2. Range (B1:D1) ist das meine Tabellengröße.
3. Wo füge ich mein Makro ein.
Danke nochmal für die Hilfe...:-)
Anzeige
AW: Makrostart
27.09.2016 09:30:56
ChrisL
Hi Matze
1. ja
2. Dort stehen die Daten. Anhand des Screen-Shots (Beispieldatei wäre besser) leider nicht erkennbar wo und in welchem Format (evtl. musst du Year(rng) in rng ohne Year ändern).
3. Unter DieseArbeitsmappe (Workbook_Open, einfach mal googlen)
cu
Chris
Private Sub Workbook_Open()
Dim rng As Range
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
For Each rng In .Range("B1:D1")
If Year(Date) > Year(rng) Then .Columns(rng.Column).EntireColumn.Hidden = True
Next rng
End With
End Sub

AW: Makrostart
26.09.2016 18:41:30
Matze
Userbild
Anzeige
@Chris: ping
28.09.2016 14:26:33
Michael
Hi,
nur mal hallo...
Deine "gewagte" Vermutung war ja richtig.
Schöne Grüße,
Michael
männliche Intuition :) owT
28.09.2016 14:53:35
ChrisL
.
AW: männliche Intuition :) owT
03.10.2016 17:46:43
Matze
Hallo Matze nochmal,
Danke für die Hilfe. Ich habe jetzt dein Makro eingefügt und noch eins drunter gesetzt. Das mit dem einmaligen ausblenden funktioniert auch. Trotzdem habe ich das Problem das immer alles ausgeblendet wird. Muss ich bei dem Jahr noch was ändern, oder muss das Jahr in meiner Tabelle stehen?
Private Sub Workbook_Open()
Dim rng As Range
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
For Each rng In .Range("B1:D1")
If Year(Date) > Year(rng) Then .Columns(rng.Column).EntireColumn.Hidden = True
Next rng
For Each rng In .Range("F1:H1")
If Year(Date) > Year(rng) Then .Columns(rng.Column).EntireColumn.Hidden = True
Next rng
End With
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige