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

Ein Makro stört andere Makros

Ein Makro stört andere Makros
04.05.2021 20:40:15
Mildred
Hallo,
ich sitze gerade an einem Makro das Zeilen einblenden soll, wenn in der Zelle ein "ja" steht, bei einem "nein" sollen die Zeilen ausgeblendet werden. Die Zelle in der entweder das "ja" oder das "nein" steht, ändert sich per Formel in "ja" oder "nein". Allerdings kommt die Fehlermeldung, dass die "Variable nicht definiert" ist. Zusätzlich befürchte ich, dass dieses Makro andere Makros, die in der gleichen Datei aber in anderen Tabellenblättern sind, "stört". Die Makros sollen voneinander unabhängig agieren. Könnt ihr mir hierbei vielleicht weiterhelfen? Das Makro womit ich Probleme habe lautet wie folgt:
Option Explicit

Private Sub Worksheet_Calculate()
If Target.Address = "$S$51" Then
If Target = "ja" Then
Me.Rows("46:55").Hidden = False
If Target = "nein" Then
Me.Rows("46:55").Hidden = True
End If
End If
End If
End Sub
Vielen Dank im Voraus.
V.G. Mildred

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ein Makro stört andere Makros
04.05.2021 20:43:35
Hajo_Zi
Calculate hat kein Target.
GrußformelHomepage
AW: Ein Makro stört andere Makros
04.05.2021 21:07:43
Mildred
Hallo Hajo,
vielen Dank für die schnelle Antwort, leider kenne ich mich mit Makros nicht sehr gut aus und weiß daher nicht was du mit "Calculate hat kein Target" meinst bzw. wie ich das Target für Calculate in meinem Fall definieren muss.
V.G. Mildred
AW: Ein Makro stört andere Makros
04.05.2021 21:14:12
onur
Wann soll denn das Makro "anlaufen" (z.B.: wenn Bereich A1:B20 verändert wird) ?
Anzeige
AW: Ein Makro stört andere Makros
04.05.2021 21:25:14
Mildred
Hallo,
vielen Dank für die schnelle Rückmeldung. Du hast vollkommen recht, der Programmierer stört in dem Fall ;-). Das Marko soll die Zelle S51 überwachen, wenn die sich in "ja" ändert, dann sollen die Zellen eingeblendet werden, wenn dort "nein" steht, dann sollen sie ausgeblendet werden. In der Zelle S51 ist eine Formel hinterlegt, die ein "ja" in der Zelle S51 ausgibt, wenn mit Hilfe eines Sverweises ein bestimmter Wert gefunden wird, wenn dieser nicht gefunden wird, steht ein "nein" in der Zelle S51. Und "anlaufen" soll das Makro, wenn sich die Zelle S51 in "ja" oder in "nein" ändert. Sonst steht in der Zelle S51 eine "0".
V.G. Mildred
Anzeige
AW: Ein Makro stört andere Makros
04.05.2021 21:28:29
onur
Auch bei (z.B) von "ja" auf "nein" oder umgekehrt ? Oder nur, wenn da keine 0 mehr steht?
AW: Ein Makro stört andere Makros
04.05.2021 21:30:46
Mildred
Auch von ja auf nein und umgekehrt.
AW: Ein Makro stört andere Makros
04.05.2021 21:44:30
onur
Wenn du aber Zeilen 46-55 ausblendest, siehst du S51 auch nicht mehr. Egal ?
AW: Ein Makro stört andere Makros
04.05.2021 21:50:35
Mildred
Ja, genau, die ist eh ausgeblendet.
AW: Ein Makro stört andere Makros
04.05.2021 21:54:38
onur
Das Change-Event eines Blattes reagiert nur auf manuelle Änderungen.
Man kann aber Excel austricksen, indem man irgendwo eine Active-X-Textbox plaziert und sie mit S51 verlinkt (Eigenschaften - LinkedCell) - Diese kann man dann, ebenso unter "Eigenschaften", verstecken (Visible=false).
Diese Textbox, da sie mit S51 verknüpft ist, reagiert auch auf Änderungen durch eine Formel und man kann den Code in deren Change.Event schreiben.
Guckst du hier:
https://www.herber.de/bbs/user/145996.xlsm
Anzeige
AW: Ein Makro stört andere Makros
04.05.2021 22:08:38
Mildred
Hallo,
vielen Dank für deine schnelle Hilfe! Da es jetzt schon etwas spät ist, gucke ich mir das morgen einmal in Ruhe an.
V.G. Mildred
AW: Ein Makro stört andere Makros
04.05.2021 20:56:40
onur
"Die Zelle in der entweder das "ja" oder das "nein" steht, ändert sich per Formel in "ja" oder "nein"" ? Häääh?
1) Das Calculate-Event hat kein Target - sonst würde da stehen

Private Sub Worksheet_Calculate(ByVal Target As Range)
2) Wenn ich deinen Code mal so schreibe, wie es sich gehört, siehst du vielleicht, wo der Fehler ist:

Private Sub Worksheet_Calculate()
If Target.Address = "$S$51" Then
If Target = "ja" Then
Me.Rows("46:55").Hidden = False
If Target = "nein" Then
Me.Rows("46:55").Hidden = True
End If
End If
End If
End Sub
ob Target "nein" ist, wird nur überprüft, wenn Target "ja" ist, und BEIDES geht nicht gleichzeitig.
Es sind nicht andere Makros, die dieses Makro stören, sondern der Programmierer. :)
Wenn du das Makro ausführen lassen willst, musst du über das Change-Event gehen - da hast du auch Target.
Und dass das Makro nur auf S51 reagieren soll, bezweifele ich.
Anzeige
AW: Ein Makro stört andere Makros
04.05.2021 21:03:36
onur
Sorry, ich hatte selber einen Einrückfehler.

Private Sub Worksheet_Calculate()
If Target.Address = "$S$51" Then
If Target = "ja" Then
Me.Rows("46:55").Hidden = False
If Target = "nein" Then
Me.Rows("46:55").Hidden = True
End If
End If
End If
End Sub

AW: Ein Makro stört andere Makros
05.05.2021 00:13:21
Yal
Hallo Mildred,
ich würde vermeiden, das Ereignis "_Calculate" zu verwenden. Lieber "_SelectionChange". Es übergibt die Zelle, wo man ankommt, nicht die, die man gerade verlassen hat. Man muss die vorige Zelle "speichern". Das macht man mit Static. So bleibt die Information diese Variable zwischen 2 Aufruf der Sub "gespeichert".
Die Prüfung von "ja" & "nein" sollte man entweder auf Klein- oder Grossbuchtaben normieren (hier klein: LCase).
Und der Select Case vermeidet nur die verschachtelten If. Es ist nur Geschmacksache.
Auch wichtig innerhalb einer Ereignis-Funktion: die Events blockieren, sodass keine Endlosschleife ensteht. In dem Fall kein Risiko, weil ausblenden kein Ereignis auslöst.
Anschliessend wird die Zelle, wo man gerade steht ("Target") in das Speicher "LetzteZelle" für die nächste Aufruf abgelegt.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static LetzteZelle As Range
On Error Resume Next
If LetzteZelle.Address = "$S$51" Then
Application.EnableEvents = False
Select Case LCase(LetzteZelle.Value)
Case "ja":   Me.Rows("46:55").Hidden = False
Case "nein": Me.Rows("46:55").Hidden = True
End Select
Application.EnableEvents = True
End If
Set LetzteZelle = Target
End Sub
VG
Yal
Anzeige
AW: Ein Makro stört andere Makros
05.05.2021 08:07:22
Mildred
Guten Morgen Yal,
vielen Dank für die Erklärung und das Makro, allerdings funktioniert es nur bei "nein" und nicht bei "ja". D.h. wenn Zellen eingeblendet sind und die Zelle S51 sich in "nein" ändert, dann werden die Zellen ausgeblendet und bei "ja" werden sie nicht eingeblendet, obwohl die Zellen ausgeblendet sind. An der Formel kann es nicht liegen, da in der Zelle S51 ein "ja" steht. Außerdem habe ich die beiden Ereignisse einmal getauscht, weil es mit "nein" funktioniert. D.h. wenn in Zelle S51 ein "nein" steht, dann sollen die Zellen eingeblendet werden und bei "ja" ausgeblendet. Dann funktioniert "ja" aber nicht "nein". Irgendwie scheint die erste "Prüfung" im Makro nicht angesprochen zu werden.
V.G. Mildred
Anzeige
AW: Ein Makro stört andere Makros
05.05.2021 09:53:53
onur
Ich habe dir doch gestern schon gezeigt, wie einfach es geht. Wie wäre es, wenn du erst mal DAS testest, bevor du schon auf andere Antworten reagierst bzw sie testest.
AW: Ein Makro stört andere Makros
05.05.2021 13:13:11
Mildred
Hallo Onur,
es tut mir leid, ich wollte dich nicht verärgern. Aber ich finde es nur fair auch die Vorschläge von den anderen auszuprobieren. Ihr alle gibt euch sehr viel Mühe um zu helfen und wenn man gar nicht auf die Vorschläge der anderen reagiert, finde ich es sehr unhöflich und auch sehr undankbar. Den Code von Yal habe ich heute Morgen sehr schnell ausprobieren können, weil dieser für mich, als unerfahrener Makro Anwender, etwas leichter nachvollziehbarer war und ich ihn deswegen schneller umsetzen konnte. Wie gesagt, ich bin euch allen für eure Unterstützung sehr dankbar. Ohne eure Hilfe wäre ich mit meinem Projekt, an dem ich jetzt schon seit einiger Zeit dran sitze, nicht so weit gekommen. Ich kann mich erinnern, dass auch du mir schon bei einigen meiner anderen Probleme weitergeholfen hast. Auch deinen Vorschlag werde ich noch ausprobieren.
Vielen Dank nochmal für deine Unterstützung.
V.G. Mildred
Anzeige
AW: Ein Makro stört andere Makros
05.05.2021 10:00:42
Yal
Hallo Mildred,
ah ja, wo denke ich hin! Wenn die Zeile 51 ausgeblendet ist, kann nur beschränkt die vorige geänderte Zelle S51 sein!
Da wir Target nicht mehr brauchen, können wir doch auf dem Calculate-Ereignis aufbauen:

Private Sub Worksheet_Calculate()
On Error Resume Next
Application.EnableEvents = False
Me.Rows("46:55").Hidden = LCase(Range("S51").Value) = "nein"
Application.EnableEvents = True
End Sub
Wir hatten vorher schon gesehen, dass in S51 nur "nein" oder "ja" sein kann. Daher kein Bedarf beide zu prüfen: wenn nicht das eine, dann ist es das andere.
VG
Yal
Anzeige
AW: Ein Makro stört andere Makros
05.05.2021 13:00:15
Mildred
Hallo Yal,
vielen Dank, jetzt klappt es.
V.G. Mildred
AW: Ein Makro stört andere Makros
05.05.2021 13:14:10
onur
Mein Zwei-Zeilen-Makro war offenbar zu kompliziert für dich.
Gern geschehen - ich arbeite doch gerne für die Mülltonne.
AW: Ein Makro stört andere Makros
05.05.2021 13:17:24
Mildred
Hallo Onur,
du hast scheinbar meine Nachricht, die ich dir eben geschrieben habe, nicht gelesen, schade...
Mein Fehler
06.05.2021 08:34:02
Yal
Hallo Onur, hallo Mildred,
Ich muss dazu ergänzen, dass mein Vorschlag auf dem Vorarbeit von Onur basiert. Also gewiss nicht für die Tonne.
Aber ich hätte es vorher erwähnen sollen. Nehme ich fürs nächste Mal mit.
VG
Yal
AW: Ein Makro stört andere Makros
05.05.2021 07:28:01
fcs
Hallo Mildred,
wie du in den anderen Antworten ja schon gelernt hast - das Calculate-Ereignis hat keinen Parameter.
Hier muss direkt der Wert der Zelle mit der Formel geprüft werden.
Damit das Ereignismakro keine anderen Makros "stört" oder in eine Endlos-Schleife gerät müssen die Ereignismakros vorübergehend deaktiviert werden.
Damit das Makro nur bei Änderungen von "ja" auf "nein" bzw. umgekehrt die Aktionen ausführt muss der Zellwert nach einer Aktion in einer Variablen zwischengespeichert werden.
Nur, wenn der Wert der Variablen vom Wert in der Zelle mit der Formel abweicht, werden die zugehörigen Aktionen ausgeführt.
LG
Franz

Option Explicit
Private varMerker_S51 As Variant 'Merker für geänderten Wert in Zelle S51
Private Sub Worksheet_Calculate()
On Error GoTo Fehler
Select Case LCase(Me.Range("S51").Value)
Case "ja"
If varMerker_S51  "ja" Then
Application.EnableEvents = False
Me.Range("46:55").EntireRow.Hidden = False
varMerker_S51 = LCase(Me.Range("S51").Value)
Application.EnableEvents = True
End If
Case "nein"
If varMerker_S51  "nein" Then
Application.EnableEvents = False
Me.Range("46:55").EntireRow.Hidden = True
varMerker_S51 = LCase(Me.Range("S51").Value)
Application.EnableEvents = True
End If
Case Else
'do nothing
End Select
Exit Sub
Fehler:
Application.EnableEvents = True
MsgBox "Fehler-Nr.: " & Err.Number & vbLf & Err.Description, _
vbOKOnly, "Problem in Makro ""Private Sub Worksheet_Calculate()"""
End Sub

Anzeige
AW: Ein Makro stört andere Makros
05.05.2021 13:14:45
Mildred
Hallo Franz,
vielen Dank für deine Unterstützung, auch dein Makro funktioniert. Viele Wege führen halt nach Rom ;-).
V.G. Mildred

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige