Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1960to1964
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

Makro "Sub" startet nicht mit "Call" Hilfe!

Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 09:31:41
Patrick-S
Hallo zusammen, musste mich nun doch hier anmelden, brauche dringend Unterstützung.

Mein Vorhaben: Ich möchte durch einen bestimmten Zellwert das Makro auslösen, welches mir zwischen Tabellenblatt1 und Tabellenblatt2 wechselt. (Tabellenblatt3 soll ignoriert werden)

Das Wechsel-Modul funktioniert bereits, wenn ich es manuell starte. Über die Funktion makro1 habe ich die Brücke zwischen Zellenwert und der "Sub" gemacht. Die Ausführung funktioniert auch, wenn ich testweise nur eine "Sub-Meldung" anzeigen lasse, jedoch nicht mit meiner "Blättern-Sub".

Zellenwert:
=WENN(I5="scroll";Makro1();"stop")

Funktion und Sub habe ich in Modul1 gepackt:
Function makro1()

'Prozedur aufrufen
blättern
End Function

Sub blättern()

index = ActiveSheet.index

'Tabellenblatt 3 überspringen
If index = 2 Then index = 0

'Tabellenblatt wechseln
Worksheets(index + 1).Activate

'Prozedur nach X Sekunden
Application.OnTime Now() + TimeValue("00:00:05"), "blättern"
End Sub

wenn ich stattdessen diese einfache Sub einsetze funktioniert der Prozess:
Sub blättern()

MsgBox "Blättern wurde gestartet"
End Sub

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 10:28:51
daniel
Hi
Eine Funktion, die in einer Formel einer Zelle steht, darf nur einen Wert als Ergebnis zurückgeben und ansonsten keine weitere "Außenwirkung" haben.
Microsoft hat das bei der Konzeption von VBA nicht vorgesehen.
Wenn du den Wert einer Zelle überwachen willst, musst du hierfür:
- das Change-Event verwenden, wenn die Zelle durch direkte Eingabe vom Anwender befüllt erid
- das Calculate-Event verwenden, wenn die Zelle eine Formel enthält

Gruß Daniel
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
12.01.2024 15:17:52
Piet
Hallo Patrick

ich war bis jetzt nicht am Thread beteiligt, müsste mich durch viele Antworten durchlesen. Frage:
In welchem Sheet wechseln die Daten XY und welches Sheet soll dann angesprungen werden??
Scheint mir alles sehr kompliziert zu sein, vielleicht fällt mir ja was dazu ein.

Ich muss nur erst mal den Tabellenaufbau und die konkrete Logik des umblättern verstehen.
Vor allem was genau in welchem Range eingegeben wird, um das umschalten auszulösen??

mfg Piet
Anzeige
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
17.01.2024 09:03:24
Patrick-S
Hallo Piet, vielen Dank für Deine Reaktion. War ein paar Tage mit anderem beschäftigt...

Versuche es möglichst kurz und klar zu beschreiben. Wegen der Verknüpfung zur SQL-Datenbank macht es auch keinen Sinn, die Original-Datei bereitzustellen.


- Tabellenblatt 1 hat einen Bereich mit der SQL-Tabelle, die 1 bis max. 30 Zeilen enthält. (Je nach Aufkommen).

- Aus dieser SQL-Tabelle möchte ich eine auslösende Zelle anwählen, die den Befehl zum Wechseln gibt. (Zelle leer oder nicht leer)

- Tabellenblatt 2 ist komplett identisch mit Tabellenblatt 1 (eine Kopie) , es ist nur nach unten gescrollt.

- Ziel: Die Zeilen 1-14 werden auf Blatt 1, die Zeilen 15-30 auf Blatt 2 dargestellt und sollen wenn nötig im z.B. 10 Sekunden-Takt wechseln.

- Die auslösende Zelle befindet sich demnach irgendwo in Zeile 15, sodass der Befehl zum umblättern dann kommt, wenn Tabellenblatt 2 Daten enthält.

- Wenn nun weider weniger als 15 Zeilen in der SQL-Tabelle sind (auslösende Zelle wieder leer), soll das Wechseln enden und zu Tabellenblatt 1 wechseln.

Vielen Dank schonmal!
Viele Grüße, Patrick
Anzeige
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 10:42:42
Patrick-S
Hi daniel, verstehe ich leider noch nicht ganz. Vorallem verstehe ich nicht, warum die MessageBox angezeigt wird aber der andere Blätter-Befehl nicht ausgeführt wird....

Nur zum Verständnis, was ich eigentlich will:

- Es handelt sich um eine Art Infoanzeige.
- Ich habe eine Tabelle aus einer ext. Datenbank, die auf Tabellenblatt1 dargestellt wird.
- Tabellenblatt1 zeigt max. 14 Zeilen an
- Wenn nun 15 und mehr Zeilen erscheinen, soll auf Tabellenblatt2 gewechselt werden und wieder zurück
- Tabellenblatt2 ist nur auf Zeile 15 hochgescrollt, sonst identisch mit Tabellenblatt1
Anzeige
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 11:10:00
Patrick-S
Sorry wollte nicht weiter verwirren, habe das genannte Calculate-Event in Tabellenblatt1 eingefügt:
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("B15")) Is Nothing Then Exit Sub
Application.EnableEvents = False
blättern
Application.EnableEvents = True
End Sub

Jetzt startet der Prozess. Wenn aber die Zelle danach wieder leer wird, läuft der Prozess weiter. Wie bekomme ich es wieder zum stoppen?
Vielen Dank!!
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 11:29:19
daniel
der Prozess startet sich immer wieder selbst.
um das zu stoppen, gibts zwei möglichkeiten:

a) du baust in das makro "blättern" zusätzlich noch die Abfrage ein, ob in der Zelle immer noch "scroll" steht und führst das Application.Ontime nur aus, wenn ja.

b) um den Start eines bereits per Application.Ontime aufgerufenen Befehls zurückzunehmen, kannst du ebenfalls Application.Ontime verwenden, aber in dieser Form:
Application.Ontime Startzeit, Makroname, Schedule:=False


wichtig dabei ist, dass du als Zeit genau die selbe Zeit verwendest, mit der der Startaufruf stattgefunden hat, da Excel sich diese Aufrufe als Kombination von Makroname und Zeit merkt (denn es könnte ja, sein, dass du das Makro um 10:00, 12:00 und 14:00 ausführen lassen willst, und dann aber aus irgendeinem Grund nur den Aufruf für 12:00 zurücknehmen willst)
du musst dir also die Startzeit in einer projektweit gültigen Variable merken.
(eine Variable ist dann projektweit gültig und kann von allen Makros verwendet werden, wenn sie in einem allgemeinen Modul oberhalb der Makros mit Public deklariert wird.

also im Prinzip so:
Option Excplicit

Public Startzeit as Date

Sub Blättern()
... hier der Code
Startzeit = Now + TimeSerial(0, 0, 5)
Application.Ontime Startzeit, "Blättern"
end Sub

Sub BlätternAnhalten()
Application.Ontime Startzeit, "Blättern", Schedule:=False
End Sub
Anzeige
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 11:16:18
daniel
Hi
die Messagebox ist eine Meldung, die aber ansonsten nichts verändert.
Daher wird die Messagebox ausgeführt
der Wechsel des angezeigten Blattes ist aber eine Veränderung an einer Exceltabelle.
Und Formeln, die in Zellen stehen, dürfen nur den Wert der Zelle, in der sie stehen verändern, aber ansonsten keine weitere Veränderungen vornehmen.
Sie dürfen keine anderen Zellen verändern, keine Formate ändern und auch sonst nichts. Microsoft hast das verboten.
Und du kannst das System auch nicht dadurch austricksen, dass du die Aktion in ein anderes Makro auslagerst, welches du aufrufst.
Gruß Daniel
Anzeige
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 11:19:57
Patrick-S
Ah okay, vielen Dank. Bin schon ein Stückchen weiter, siehe meine Nachricht von 11:10 ...
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 13:08:33
Patrick-S
Nun habe ich fast alles am laufen, allerdings bekomme ich die Dauerschleife nicht zum stoppen.

Also: Hat eine Zelle Inhalt, dann startet die Schleife wie gewollt. Wenn nun die Zelle wieder leer wird, läuft es leider weiter.

Gibt es einen Befehl wie: Wenn "Zelle XY" leer, dann beende den leufenden "Sub XY"?

AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 13:12:38
daniel
ja, gibt es
siehe meine Nachricht vom 11:29:19
Gruß Daniel
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 13:36:07
Patrick-S
Danke, die Posts sind bei mir nicht nach Uhrzeit sortiert, sondern durcheinander...

Bin einfach zu dumm, den ganzen Code zum Laufen zu bringen, würdest Du ihn mir so anordnen, dass ich ihn übernehmen kann?

In Tabelle1 habe ich nun folgendes stehen:
Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("B11")) Is Nothing Then Exit Sub
Application.EnableEvents = False
blättern
Application.EnableEvents = True
End Sub

Und im Modul1 folgendes:
Sub blättern()


Index = ActiveSheet.Index

'Tabellenblatt 3 überspringen
If Index = 2 Then Index = 0

'Tabellenblatt wechseln
Worksheets(Index + 1).Activate

'PProzedur nach X Sekunden
Application.OnTime Now() + TimeValue("00:00:05"), "blättern"
End Sub

Anzeige
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 14:59:17
daniel
du hast nicht von dem, was ich geschrieben habe, umgesetzt oder es zumindest versucht.
ich denke nicht, dass du zu dumm bist.
ich denke, dass du zu faul bist.
lies nochmal, was ich geschrieben habe, und versuche, es um zusetzen.
Wenn es nicht klappt, dann kann ich ja nochmal drauf schauen, aber ich möchte, dass du Eigeninitiative zeigst und dich bemühst, zu verstehen was da passieren soll.
Vielleicht hast du es ja getan, aber ich möchte das auch sehen.
Gruß Daniel
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 15:15:50
Patrick-S
Also erstmal bin ich ehrlich Dankbar, dass Du mir hilfst! Ich bin aber nicht faul, denn ich bastle schon seit Stunden an einer Lösung herum. Z.B. habe ich keine Ahnung, wie ich Deinen Tipp: "a) du baust in das makro "blättern" zusätzlich noch die Abfrage ein, ob in der Zelle immer noch "scroll" steht und führst das Application.Ontime nur aus, wenn ja. " umsetzen soll, denn ich kenne die Befehle nicht und weiß auch nicht wohin ich diese schreiben muss...

Auch Deinen Code-Vorschlag habe ich soweit probiert, aber ich habe zu wenig Hintergrundwissen, um zu erkennen, was zuerst kommt oder welche Befehle es alle gibt.

Nachfolgend mein Text aus Modul1 bei dem ich "... hier der Code" meinen früheren Code eingefügt habe, aber ohne Funktion.
Option Explicit

Public Startzeit As Date

Sub Blättern()

Index = ActiveSheet.Index

'Tabellenblatt 3 überspringen
If Index = 2 Then Index = 0

'Tabellenblatt wechseln
Worksheets(Index + 1).Activate

'PProzedur nach X Sekunden
Application.OnTime Now() + TimeValue("00:00:05"), "blättern"

Startzeit = Now + TimeSerial(0, 0, 5)
Application.OnTime Startzeit, "Blättern"
End Sub

Sub BlätternAnhalten()
Application.OnTime Startzeit, "Blättern", Schedule:=False
End Sub


Anzeige
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 15:24:38
daniel
dir sind selbst grundsätzliche Basic-Befehle wie IF Then usw unbekannt oder wie man den Wert einer Zelle in VBA abfragt?
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 16:47:25
Patrick-S
Hallo Daniel, also ich habe gerade damit begonnen, weil ich für meine Infoanzeige in Excel (welche auch bereits durch die Datenbank-Tabelle und die Zuarbeit deren Daten recht komplex war) eben jetzt nur mit Makros an mein Ziel kommen kann. Ich kann Englisch und weiß daher, was "If" oder "Then" oder andere Befehle bedeuten, wenn ich diese vor mir habe und in einer fertigen Formel sehe, aber ich weiß nicht, wie ich aus dem Nichts heraus einen Befehl schreiben soll, welche Reihnenfolge einzuhalten ist, was ich kombinieren kann oder muss, welche Werte erlaubt sind, welche Befehle wie aufgebaut werden... Daher suche ich Hilfe im Internet... Wenn das ein Problem darstellt, dann werde ich einfach weitersuchen/fragen und ausprobieren müssen...
Anzeige
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
11.01.2024 17:01:42
daniel
die Reihenfolge ergibt sich immer aus der logischen Abfolge.
Da sollte einfaches Nachdenken ausreichen, um zu wissen, in welcher Reihenfolge man die Befehle platzieren muss.

ein Forum ist halt kein Platz für absolute Anfänger, ein paar Grundlagen sollten schon vorhanden sein, sonst wird ziemlich aufwendig.

Und so Sachen wie "Application.Ontime" ist jetzt kein Befehl, den ein Anfänger ohne Grundkenntnisse einfach mal so verwendet.

aber du deiner Frage:

ich hatte das im Prinzip so gemeint:

Sub Blättern()

If Range("I4").value = "scroll" then
hier der Code zum umschalten der Blätter
Application.Ontime ....
end if
End Sub

Gruß Daniel
Anzeige
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
12.01.2024 07:21:21
Patrick-S
Liebe Community, ich verstehe, dass Du/Ihr hier freiwillig helft und das finde ich toll. Leider hilft es mir nicht, wenn die Codes unvollständig sind, denn wenn ich versuche diese zu vervollständigen, kommen immer Fehlermeldungen... Ich brauche keine andauernde Bestätigung, dass Du/Ihr es könnt und ich nicht, denn das weiß ich und darum bin ich ja eigentlich hier.

Die Lösung brauche ich für ein berufliches Projekt und nicht nur für meine private Belustigung. Wenn mir also jemand einen vollständigen, funktionierenden Code zukommen lassen möchte, dann wäre ich überaus dankbar. Hier nochmal in Kürze:

- Ich habe 3 Tabellenblätter (1 Hauptseite / 2. Seite wenn nötig / 3 ist ein Verwaltungsblatt)
- Wenn Zelle XY befüllt wird (nicht leer ist) sollen Tabellenblatt1 + Tabellenblatt2 in einem einstellbaren Intervall wechseln.
- Tabellenblatt3 dient der Verwaltung und soll ignoriert (übersprungen) werden.
- Wenn Zelle XY wieder leer ist, soll das wechseln stoppen und auf Tabellenblatt1 zurück.

Vielen Dank und freundliche Grüße
Patrick
AW: Makro "Sub" startet nicht mit "Call" Hilfe!
12.01.2024 09:45:13
daniel
Hi
naja, du bekommst hier Hilfe kostenlos.
wenn dir bzw deiner Firma was fertig programmiere, dann ist das ja eine Dienstleistung, die ich dir erbringe und dann müsste ich dir auch auch ne Rechnung schicken.
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige