Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
1832to1836
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

VBA Makro

VBA Makro
04.06.2021 13:59:08
Marc
Hallo zusammen,
ich hatte gestern schon einmal Eure Hilfe gebraucht.
Wahrscheinlich habe ich jetzt eine unkomplizierte Lösung gefunden, wo ich nur noch eine Adresse ändern muss, aber nicht weiß wie.
Der VBA Code sieht so aus:
Option Explicit

Private Sub worksheet_change(ByVal Target As Excel.Range)
Application.ScreenUpdating = False
If Intersect(Target, Range("G11")) Is Nothing Then
Exit Sub
Else
If Target.Value = "1" Then
Range("A16:F50,H16:M50").ClearContents
With Range("A16:F50,H16:M50")
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Range("A16:F50").FormulaR1C1 = _
"='[SG Kolping Remscheid lll - Test.xlsm]Spielbericht'!R30C41"
Range("H16:M50").FormulaR1C1 = _
"='[SG Kolping Remscheid lll - Test.xlsm]Spielbericht'!R30C44"
End If
End If
Application.ScreenUpdating = True
End Sub
Jetzt möchte ich nur "G11" so abändern, das auf das Tabellenblatt "='[SG Kolping Remscheid lll - Test.xlsm]Spielbericht'!S40" zugegriffen wird. Dort muss ich eh Ergebnisse von Hand eintragen.
Das gleiche bräuchte ich auch für die Zeile If Target.Value = "1" Then
Dort würde ich gerne abfragen "ungleich kein Text".
Leider weiß ich nicht die korrekte Schreibweise dafür.
Ich hoffe ich habe mich verständlich ausgedrückt und mir kann jemand helfen.
Das Makro funktioniert händisch einwandfrei. Halt nur nicht mit einer Formel.
Gruß Marc

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Makro
04.06.2021 14:40:28
Daniel
Hi
Dazu muss erstmal der ganze Code ins andere Blatt umziehen.
Das Change-Event-Makro muss immer in dem bBlatt liegen, auf dem die Zelle liegt, deren Änderung das Makro auslösen soll.
Willst du im Code auf Zellen zugreifen, die in einer anderen Mappe und anderem Blatt liegen, so geht das so:
Workbooks("Dateitname").Sheets("Blattname").Range("Adresse")
Die jeweilige Mappe muss geöffnet sein.
Gruß Daniel
AW: VBA Makro
04.06.2021 14:56:58
Marc
Hallo Daniel,
du hattest geschrieben:
Dazu muss erstmal der ganze Code ins andere Blatt umziehen.
Das Change-Event-Makro muss immer in dem bBlatt liegen, auf dem die Zelle liegt, deren Änderung das Makro auslösen soll.
Die Änderung die das Makro ausführen soll bezieht sich doch auf das Tabellenblatt "Anzeige".
Die Änderung die das Makro starten lassen soll befindet sich auf dem Tabellenblatt "SG Kolping Remsched lll - Test"
Meinst das etwa?
Bin etwas ratlos....
Gruß Marc
Anzeige
Warum ein neuen Thread? OT
04.06.2021 15:21:37
Yal
Warum ein neuen Thread? OT
04.06.2021 15:22:29
Yal
AW: Warum ein neuen Thread? OT
04.06.2021 15:24:58
Marc
Ich hatte ja eine andere Idee.......
AW: VBA Makro
04.06.2021 15:29:35
Daniel
Was das Makro macht spielt keine Rolle.
Entscheidend ist, wodurch das Makro gestartet werden soll.
Change-Event-Makros starten, wenn du in eine Zelle von Hand einen Wert einträgst.
Dazu muss aber das Makro in dem Modul des Blattes liegen, in welchem du von Hand den Wert einträgst.
Gruß Daniel
AW: VBA Makro
04.06.2021 16:00:12
Marc
Hallo Daniel,
soweit verstanden.
Das klappt ja auch sehr gut.
Aber wie sieht es aus wenn via Formel und nicht per Hand ein Wert eingetragen wird?
WAs muss den dann geändert werden?
Gruß Marc
AW: VBA Makro
04.06.2021 16:12:11
Daniel
Wenn sich ein Formelergebnis aufgrund einer Neuberechnung ändert, löst das Change-Event nicht aus, dafür allerdings das Calculate-Event.
Allerdings bekommst du beim Calculate-Event keine information darüber, welche Zellen neu berechnet wurden und ob sich dabei auch der Zellwert geändert hat.
Gruß Daniel
Anzeige
AW: VBA Makro
04.06.2021 16:14:34
GerdL
Moin Marc,
auf Änderungen per Formel - aber auf jede x-beliebige- reagiert das Worksheet_Calculate - Event, wenn die automatische Formelberechnung aktiv ist.
Gruß Gerd
AW: VBA Makro
04.06.2021 16:28:18
Marc
Hallo Gerd,
danke für Deine Antwort.
Wäre der Code dann so richtig?

Private Sub Worksheet_Calculate()
If [G11].Value = 1 Then
Range("A16:F50,H16:M50").ClearContents
With Range("A16:F50,H16:M50")
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Range("A16:F50").FormulaR1C1 = _
"='[SG Kolping Remscheid lll - Test.xlsm]Spielbericht'!R30C41"
Range("H16:M50").FormulaR1C1 = _
"='[SG Kolping Remscheid lll - Test.xlsm]Spielbericht'!R30C44"
End If
Application.ScreenUpdating = True
End Sub

Anzeige
AW: VBA Makro
04.06.2021 16:38:34
Daniel
Das Makro ist irgendwie sinnlos.
Du änderst ja nichts, sondern schreibst immer nur die gleiche Formel in die Zellen.
Da brauchst du kein Makro für, sondern kannst die Formeln auch gleich von Hand in die Zellen schreiben.
Gruß Daniel
AW: VBA Makro
04.06.2021 18:05:40
Marc
So,
ich beende das jetzt hier mal.
Das was ich mir vorgestellt habe scheint ja so nicht zu funktionieren.
Sei es drum. Es gibt wichtigeres.
Danke an alle die mir versucht haben zu helfen.
Vorab schon einmal ein schönes sonniges Wochenende. Gerade sieht es leider nicht danach aus......
Gruß Marc
Also nicht mehr offen!
04.06.2021 18:11:07
Der
AW: VBA Makro
04.06.2021 19:54:33
GerdL
So könntest du ggf. das Aufpoppen einschränken. Aber dein Vorhaben u. deine Motivation sind noch im Dunkeln, Marc.

Private Sub Worksheet_Calculate()
Static blnCalc As Boolean
If Not blnCalc Then
If [G11].Value = 1 Then
Range("A16:F50,H16:M50").ClearContents
With Range("A16:F50,H16:M50")
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Range("A16:F50").FormulaR1C1 = _
"='[SG Kolping Remscheid lll - Test.xlsm]Spielbericht'!R30C41"
Range("H16:M50").FormulaR1C1 = _
"='[SG Kolping Remscheid lll - Test.xlsm]Spielbericht'!R30C44"
With Range("A16:F50")
.Fomula = .Value
End With
With Range("H16:M50")
.Formula = .Value
End With
blnCalc = True
End If
End If
End Sub
Gruß Gerd
Anzeige
AW: VBA Makro
05.06.2021 12:50:36
Marc
Hallo Gerd,
jetzt mal von Anfang an:
Es handelt sich um eine Tischtennis-Datei (SG Kolping Remscheid lll - Test)
Dazu habe ich eine Spielstandanzeige (Spielstandsanzeige - Test2) erstellt die auf einem externen Monitor dargestellt wird und von der Tischtennis Datei mit Daten versorgt wird. Funktioniert alles prima.
Nun war meine Idee folgende:
Wenn es nun 11:00 Uhr wird (Spielbeginn), dann soll via Makro die Spielstandanzeige geändert werden. (Vorher stehen da noch die jeweiligen Aufstellungen drin) siehe angehängte Datei.
Wenn ich nun in G11 händisch eine 1 eintrage dann funktioniert es, aber nicht wenn über die Formel =WENN(JETZT()-HEUTE()<="11:00"*1;"";1) eine 1 eingetragen wird.
Das ist in sofern blöd, da ich von meinem Notebook nicht auf diese Datei zugreifen kann und es ja automatischt gehen soll.
Am Makro liegt es ja nicht. Das funktioniert ja bestens. Nur automatisch halt nicht.
Danke für Deine Zeit, Geduld und Hilfe.
Gruß Marc
https://www.herber.de/bbs/user/146497.xlsm
Anzeige
AW: VBA Makro
05.06.2021 13:29:26
Oberschlumpf
Hi,
hast du irgdwo schon mal eine Bsp-Datei gezeigt?
Ich finde, wenn es nur darum geht, die Uhrzeit "zu überwachen", dann solltest du auch genau das tun - und zwar in jeder Sekunde, und nicht nur mit einer Formel.
Formeln reagieren (berechnen neu) nur dann, wenn sich irgdwo ein Wert ändert, auf den sich eine Formel bezieht; dazu scheint nicht HEUTE() zu gehören, denn sonst würde deine Formel in G11 ja funktionieren, oder?!
Die Uhrzeit muss also direkt ab Öffnen der Datei geprüft werden . das kann man im Workbook_Open-Ereignis starten.
Versuch es mal mit der von mir geänderten Datei:
https://www.herber.de/bbs/user/146498.xlsm
Sobald die Datei geöffnet wurde, wird im W...Open-Ereignis das Makro sbLetsStartTheGame gestartet.
Das Makro startet eine Do/Loop-Schleife (Wiederholungsschleife) und überwacht die Uhrzeit so lange, bis der Wert "13:08:00" erreicht ist.
Du MUSST natürlich gleich den Wert anpassen! "13:08:00" war der Zeitpunkt, als ich das Ganze programmiert hatte.
Na ja, wenn jdffls der von dir eingetragene Zeitwert erreicht ist, wird per Makro in G11 einfach der Wert 1 eingetragen, und damit wird, wie von dir gewünscht, automatisch dein Makro im worksheet_change-Ereignis gestartet, und alles sieht schick aus.
Wichtig!
- du solltest in jedem Modul als erste Zeile den Befehl Option Explicit eintragen; wieso weshalb warum findest du im Internet; ich würd es auch nicht anders erklären
- in meinem Code musst du an 2 Stellen!!! die Uhrzeit anpassen - tust du das nicht, oder löschst du die Uhrzeit in der Loop Until Zeile, wird das eine ENDLOS-Wiederholungsschleife
Ach ja, deine Bsp-Datei war nur teilweise hilfreich. Beim Öffnen wird darauf hingewiesen, dass sich n paar Verknüpfungen nicht aktualisieren lassen. Das liegt daran, weil du die Datendatei(en) nicht "mitgeliefert" hast.
Ich weiß nicht, was passiert, wenn die Datendatei(en) verfügbar sind - ohne funktioniert mein Code jedenfalls - wie gesagt, die Uhrzeit muss angepasst werden.
Ach ja, noch etwas:
Wenn du nun an einem beliebigen Tag die Datei mal für ein Spiel nutzen willst, muss die Uhrzeit natürlich auf "11:00:00" eingestellt sein und....die Datei MUSS VOR 11:00 Uhr gestartet werden.
Hilfts denn?
Ciao
Thorsten
Anzeige
AW: VBA Makro
05.06.2021 13:43:56
Marc
Hallo Thorsten,
erstmal vielen Dank für Deine ausführliche Beschreibung.
Leider tut sich da bei mir gar nix.
Bin etwas ratlos......
Gruß Marc
P.S. Die andere Datei kann ich hier leider nicht reinstellen die ist zu groß. Selbst wenn ich alle Tabellenblätter und Formeln auf ein Minimum reduziere ist die noch zu groß.
sorry,aber...
05.06.2021 14:15:21
Oberschlumpf
Hi Marc,
...dann musst du jemanden aus deinem Personen-Kreis fragen, der dir direkt bei dir zu hause helfen kann.
Die Bsp-Datei mit meinem Code funktioniert genau so wie gewünscht...ähh?
...gewünscht ist doch, dass bei Erreichen der gewünschten Uhrzeit in der Tabelle NUR
0 : 0
in sehr großer Schrift angezeigt wird, oder?
Aber ok, du schreibst ja "Leider tut sich da bei mir gar nix" - und anstelle der vorherigen gezeigten Daten ausgetauscht durch "0:0" ist ja NICHT nix.
Wie gesagt, frag jemanden in deiner Nähe direkt vor Ort.
Viel Erfolg...
Ciao
Thorsten
Anzeige
AW: sorry,aber...
05.06.2021 14:38:58
Marc
Hallo Thorsten,
kurze Frage nur noch.
Wenn Du die Datei 146498 öffnest und die Uhrzeit auf die aktuelle Uhrzeit +1 min. änderst, und 1 min. wartest, dann ändert sich bei Dir die Anzeige in 0:0 völlig automatisch?
Habe ich das richtig verstanden?
Wenn ja, dann stimmt ja bei mir was ganz anderes nicht.
Makros sind vollständig aktiviert. Alle anderen laufen auch.
Gruß Marc
AW: sorry,aber...
05.06.2021 15:25:41
Oberschlumpf
Hi Marc,
ich habe die Datei geöffnet = nix passiert, weil ja noch 13:08:00 eingetragen ist.
Um 15:16:45 hab ich im Code die Zeit auf 15:18:00 geändert - AN ZWEI STELLEN IM CODE !!!
Hab dann das Makro gestartet, gewartet...und um 15:18:00 wurde erst mal auf die fehlende Datei hingewiesen, dann aber dein Makro gestartet = Anzeige in Tabelle =
0:0
Hast DU auch die Uhrzeit in der Code-Zeile

Loop Until Time > "15:18:00"
angepasst?
Hast du das Makro nach der Änderung auch gestartet?
Ob Zeit +1 Minute reicht, könnte fraglich sein - ich hatte bis zur nächsten Minute ja auch nur noch 15 Sekunden - DAS solltest du vielleicht auch beachten.
Wie gesagt, Bsp-Datei mit meinem Code macht automatisch das, was es soll.
Wenns bei dir jetzt noch immer nicht geht (teste erst mal nur mit der Bsp-Datei, BIS es geht!), dann liegt es zumindest - nicht - an der Bsp-Datei.
Ciao
Thorsten
Anzeige
AW: sorry,aber...
05.06.2021 15:41:57
Marc
Hallo Thorsten,
war mein Fehler. Ich muss natürlich das Makro auch starten.
Ich habe in meiner Hauptdatei unter Tabelle1 (Spielbericht) folgendes stehen:

Private Sub CommandButton1_Click()
Call Unterschriften_ausblenden
Call Unterschriften_einblenden
Call Kreuze_ausblenden
Call Kreuze_einblenden
Call Grafik_Spieler_des_Tages_ausblenden
Call Grafik_Spieler_des_Tages_einblenden
Call Logos_ausblenden
Call Logos_einblenden
Call Button_Ergebnisse_Löschen_ausblenden
Call Button_Ergebnisse_löschen_einblenden
Call Button_Warnhinweis_ausblenden
Call Button_Daten_löschen_ausblenden
Call LeerzeilenLoeschen_2
Call nicht_anwesend_angetreten_eintragen
Call leere_Zellen_sperren
Call leere_Zellen_entsperren
Call sbLetsStartTheGame
End Sub

Als letztes habe ich Dein Makro hinzugefügt.
Nun bekomme ich bei Änderungen in meiner Hauptdatei folgenden Fehler:
Fehler beim Kompilieren:
Sub oder Function nicht definiert
Weißt Du da evtl. weiter?
Gruß Marc
AW: sorry,aber...
05.06.2021 16:13:21
Oberschlumpf
und du hast mein Makro mit dem Namen sbLetsStartTheGame auch mit in deine Hauptdatei übernommen?
mein Makro steht in der Bsp-Datei in Modul1
bin auf deine Antwort neugierig
AW: sorry,aber...
05.06.2021 16:30:05
Marc
Hi,
natürlich nicht..... ich Idiot.
Jetzt läuft alles perfekt!
Letzte Frage:?
Was muss ich tun, wenn das Makro automatisch aktiviert werden soll, wenn im Tabellenblatt "SG Kolping Remscheid lll - Test" in der Zelle S40 oder S44 eine Eingabe getätigt wird. Quasi "".
Geht das irgendwie?
Manchmal verschiebt sich so eine Anstoßzeit ja auch mal.
Bis hierhin erstmal tausend Dank an Dich für Deine Mühe.
Gruß Marc
AW: sorry,aber...
05.06.2021 16:50:43
Oberschlumpf
Hi,
...und dann hast du noch - diese - kleine Frage...danach noch ne kleine Frage...usw.
Sorry, ich würd vorschlagen, damit auch andere wieder mit antworten, dass du deine neue kleine Frage in einem neuen Beitrag stellst.
Ciao
Thorsten

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige