Home Office-Hilfe.com - Wir lösen Ihr Problem mit Microsoft Excel, Word, Outlook, PowerPoint, Access gratis Forum Impressum

  Probleme beim ausführen eines Makros mit Formelbezug
Neues Thema eröffnenNeue Antwort erstellen
Autor Nachricht
schatzi
Moderator
Moderator


Anmeldedatum: 09.12.2006
Beiträge: 5748

BeitragVerfasst am: 28.08.2008, 16:17 Nach oben

Hallo!

Das Makro springt bisher nur dann an, wenn eine manuelle Änderung im Bereich L7:L96 vorgenommen wird, die die Bedingung erfüllt.
Wenn es ständig überprüfen soll, ob irgendwo im Bereich R7:R96 ein "x" steht, dann böte sich eher ein Ereignis an, das jeweils alle diese Zellen per For-Each-Schleife abfragt, vielleicht sogar ein SelectionChange-Ereignis. Dann sind zwar bestimmt 99% aller Berechnungen für den Mülleimer, aber du bist ständig auf dem neuesten Stand.

_________________

Viele Grüße vom Schatzi

------------------------
Ich bin nur noch sporadisch erreichbar!
Bitte hofft nicht auf eine schnelle Beantwortung einer Rückfrage meinerseits!
Jeder andere Helfer darf Rückfragen gerne übernehmen und hilft sicher gerne weiter!
Benutzer-Profile anzeigenPrivate Nachricht senden
Gomorra
Newbie
Newbie


Anmeldedatum: 28.07.2008
Beiträge: 49

BeitragVerfasst am: 28.08.2008, 16:32 Nach oben

..

wie funktioniert denn das?

Das artet ja langsam aus...

Grüße
Benutzer-Profile anzeigenPrivate Nachricht senden
schatzi
Moderator
Moderator


Anmeldedatum: 09.12.2006
Beiträge: 5748

BeitragVerfasst am: 28.08.2008, 16:41 Nach oben

Hallo!

Das könnte dann (je nach Ereignis) so aussehen:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim z As Range
For Each z In Range("R7:R96")
If z = "x" Then MsgBox "Es ist ein x in R" & z.Row
Next z
End Sub

_________________

Viele Grüße vom Schatzi

------------------------
Ich bin nur noch sporadisch erreichbar!
Bitte hofft nicht auf eine schnelle Beantwortung einer Rückfrage meinerseits!
Jeder andere Helfer darf Rückfragen gerne übernehmen und hilft sicher gerne weiter!
Benutzer-Profile anzeigenPrivate Nachricht senden
Gomorra
Newbie
Newbie


Anmeldedatum: 28.07.2008
Beiträge: 49

BeitragVerfasst am: 29.08.2008, 08:47 Nach oben

Okay, besten Dank, funktioniert gut..

nur noch eine kleine Sache,

Dieses Hinweisfeld "MsgBox "Es ist ein x in R" & z.Row" taucht immer dreimal auf (was man auch dreimal wegklicken muß). weißt du woran das liegt?

Grüße
Benutzer-Profile anzeigenPrivate Nachricht senden
schatzi
Moderator
Moderator


Anmeldedatum: 09.12.2006
Beiträge: 5748

BeitragVerfasst am: 29.08.2008, 09:18 Nach oben

Hallo!

Es werden nun jedesmal alle Zellen des Bereichs geprüft.
Wenn hier also insgesamt drei "x" stehen, dann kommen entsprechend auch drei Meldungen.

_________________

Viele Grüße vom Schatzi

------------------------
Ich bin nur noch sporadisch erreichbar!
Bitte hofft nicht auf eine schnelle Beantwortung einer Rückfrage meinerseits!
Jeder andere Helfer darf Rückfragen gerne übernehmen und hilft sicher gerne weiter!
Benutzer-Profile anzeigenPrivate Nachricht senden
miriki
Schlauberger
Schlauberger


Anmeldedatum: 05.03.2007
Beiträge: 472
Wohnort: Kiel

BeitragVerfasst am: 29.08.2008, 09:22 Nach oben

Gomorra hat Folgendes geschrieben:
nur noch eine kleine Sache,

Ich schätze, das passiert nicht für einen z.row 3x, sondern für 3 verschiedene, oder?

Ich würde die for..each etwas umstellen, daß:

a) nach der ersten msgbox die Schleife abgebrochen wird
b) der Cursor auf die Zelle positioniert wird, die für das "x" verantwortlich ist

Weil:
Die msgbox wird (selectionchange) nach jedem Bewegen des Cursors aufgerufen. Wenn also eine falsche Eingabe zu dem "x" führt, wird fortan bei jedem Mausklick auf eine andere Zelle und bei jeder Cuirsortaste wieder und wieder die msgbox angezeigt, selbst dann, wenn man nach falscher Eingabe mit dem Cursor zurück gehen will, um zu korrigieren. (SelectionChange wird, wenn ich mich recht entsinne, nicht bei Positionierung per Makro aufgerufen.)

Alternativ, aber sehr aufwendig:
a) abbruch nach 1. msgbox
b) merken Boolean-Array), für welche Zelle die Warnung bereits erfolgte
c) erneute msgbox nur, wenn Warnung nicht bereits vorher erfolgte

Je nachdem, wie strikt Du dafür sorgen willst, daß der Wert korrigiert wird...

Und vielleicht allgemein zur Optimierung des Ereignisses: Du könntest eine Zelle mit zählenwenn(r7:r96;"x") belegen, um die for..each nur dann zu durchlaufen, wenn dort ein Wert >0 steht. Sonst kann es Dir im Zweifelsfall passieren, daß bei jeder Cursorbewegung knapp 100x die Schleife durchlaufen wird, ohne daß es notwendig wäre.

Gruß, Michael

Edit: Ok, nach nochmaligem Lesen, nur change, nicht selectionchange. Das reduziert die Aufrufe der Schleife zwar um einiges, ändert aber nichts an der grundsätzlichen Problematik.
Benutzer-Profile anzeigenPrivate Nachricht sendenICQ-Nummer
Gomorra
Newbie
Newbie


Anmeldedatum: 28.07.2008
Beiträge: 49

BeitragVerfasst am: 29.08.2008, 09:27 Nach oben

problem gefunden,

Das Problem liegt in anderen
Private Sub Worksheet_Change(ByVal Target As Range) Befehlen, die ich drin habe, irgendwie vertragen die sich nicht.

Auf diesem Gebiet bin ich echt new, kann ich unterschiedliche Namen geben und diese voneinander trennen?

Sowas wie "private Sub Worksheet1_change"

Oder muß ich alle Befehle unter einem zusammenfassen?

grüße
Benutzer-Profile anzeigenPrivate Nachricht senden
schatzi
Moderator
Moderator


Anmeldedatum: 09.12.2006
Beiträge: 5748

BeitragVerfasst am: 29.08.2008, 09:30 Nach oben

Hallo!
Zitat:
Oder muß ich alle Befehle unter einem zusammenfassen?

Ja, genau!
Denn in Excel gilt (frei nach "Highlander"): Es kann nur einen geben!

edit: Vielleicht hilft auch dies:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim z As Range
Application.EnableEvents = False
For Each z In Range("R7:R96")
If z = "x" Then MsgBox "Es ist ein x in R" & z.Row
Next z
Application.EnableEvents = True
End Sub

_________________

Viele Grüße vom Schatzi

------------------------
Ich bin nur noch sporadisch erreichbar!
Bitte hofft nicht auf eine schnelle Beantwortung einer Rückfrage meinerseits!
Jeder andere Helfer darf Rückfragen gerne übernehmen und hilft sicher gerne weiter!
Benutzer-Profile anzeigenPrivate Nachricht senden
Gomorra
Newbie
Newbie


Anmeldedatum: 28.07.2008
Beiträge: 49

BeitragVerfasst am: 29.08.2008, 09:37 Nach oben

Leider behebt das auch nicht das Problem...

ich zeige mal kurz den Kauderwelsch hier auf

-------------------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count = 1 Then

If Not Intersect(Target, Range("T7:AD95")) Is Nothing And Target <> "" Then
Dim Letzte As Integer

Letzte = IIf(Cells(Target.Row + 993, 60) = "", 59, Cells(Target.Row + 993, Columns.Count).End(xlToLeft).Column)
Cells(Target.Row + 993, Letzte + 1) = Range("y3")
Cells(Target.Row + 993, Letzte + 2) = Cells(6, Target.Column)

End If




If Not Intersect(Target, Range("L7:L95")) Is Nothing And Target <> "" Then
Dim Letztes As Integer

Letztes = IIf(Cells(Target.Row + 1993, 60) = "", 59, Cells(Target.Row + 1993, Columns.Count).End(xlToLeft).Column)
Cells(Target.Row + 1993, Letztes + 1) = Range("y3")
Cells(Target.Row + 1993, Letztes + 2) = Cells(Target.Row, 12)

End If




If Not Intersect(Range("U5:U95"), Target) Is Nothing Then
If Target = "x" Then MsgBox ("Sind Sie sicher mit dieser Beurteilung?")

End If




If Not Intersect(Range("V5:V95"), Target) Is Nothing Then
If Target = "x" Then MsgBox "Sind Sie sicher mit dieser Beurteilung?"

End If




End If




Dim z As Range
Application.EnableEvents = False
For Each z In Range("R7:R96")
If z = "x" Then MsgBox "Es ist ein x in R" & z.Row
Next z
Application.EnableEvents = True


End Sub

Die letzte Zeile ist der Befehl, er macht auch alles, nur leider immer dreimal, sprich er gibt dreimal die warnung: "achtung R7 ein x"

Einmal würde mir ganz und gar reichen Razz

Danke..
Benutzer-Profile anzeigenPrivate Nachricht senden
schatzi
Moderator
Moderator


Anmeldedatum: 09.12.2006
Beiträge: 5748

BeitragVerfasst am: 29.08.2008, 09:58 Nach oben

Hallo!

Dann probier mal, die Eventsperre in die ersten beiden Abfragen zu setzen:

If Not Intersect(Target, Range("T7:AD95")) Is Nothing And Target <> "" Then
Dim Letzte As Integer
Application.EnableEvents = False
Letzte = IIf(Cells(Target.Row + 993, 60) = "", 59, Cells(Target.Row + 993, Columns.Count).End(xlToLeft).Column)
Cells(Target.Row + 993, Letzte + 1) = Range("y3")
Cells(Target.Row + 993, Letzte + 2) = Cells(6, Target.Column)
Application.EnableEvents = True
End If

If Not Intersect(Target, Range("L7:L95")) Is Nothing And Target <> "" Then
Dim Letztes As Integer
Application.EnableEvents = False
Letztes = IIf(Cells(Target.Row + 1993, 60) = "", 59, Cells(Target.Row + 1993, Columns.Count).End(xlToLeft).Column)
Cells(Target.Row + 1993, Letztes + 1) = Range("y3")
Cells(Target.Row + 1993, Letztes + 2) = Cells(Target.Row, 12)
Application.EnableEvents = True
End If

_________________

Viele Grüße vom Schatzi

------------------------
Ich bin nur noch sporadisch erreichbar!
Bitte hofft nicht auf eine schnelle Beantwortung einer Rückfrage meinerseits!
Jeder andere Helfer darf Rückfragen gerne übernehmen und hilft sicher gerne weiter!
Benutzer-Profile anzeigenPrivate Nachricht senden
Gomorra
Newbie
Newbie


Anmeldedatum: 28.07.2008
Beiträge: 49

BeitragVerfasst am: 29.08.2008, 10:01 Nach oben

Perfekt!!!

Danke, mal wieder^^

was ist denn eine Eventsperre?
Benutzer-Profile anzeigenPrivate Nachricht senden
schatzi
Moderator
Moderator


Anmeldedatum: 09.12.2006
Beiträge: 5748

BeitragVerfasst am: 29.08.2008, 10:11 Nach oben

Hallo!

Das Change-Ereignis (Change-Event) wird ausgelöst, wenn eine Änderung im Blatt vorgenommen wird.
Die ersten beiden Abfragen nehmen eine Änderung im Tabellenblatt vor. Dadurch wird das Change-Ereignis aus sich selbst heraus nochmals aufgerufen. Da eine dieser Abfragen zwei Änderungen vornimmt, wird es also insgesamt dreimal durchlaufen (1x normal plus 2x extra).
Da du das verhindern möchtest, schaltest du während des Durchlaufs dieser Abfragen die Event-Auslösung temporär ab.

_________________

Viele Grüße vom Schatzi

------------------------
Ich bin nur noch sporadisch erreichbar!
Bitte hofft nicht auf eine schnelle Beantwortung einer Rückfrage meinerseits!
Jeder andere Helfer darf Rückfragen gerne übernehmen und hilft sicher gerne weiter!
Benutzer-Profile anzeigenPrivate Nachricht senden
Beiträge der letzten Zeit anzeigen:      
Neues Thema eröffnenNeue Antwort erstellen


Ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge Probleme mit Textfelder chaplin Microsoft Word Hilfe 0 04.01.2009, 13:31 Letzten Beitrag anzeigen
Keine neuen Beiträge Probleme mit Hoverschaltfläche gerd.ringelmann Microsoft FrontPage Hilfe 0 04.01.2009, 10:05 Letzten Beitrag anzeigen
Keine neuen Beiträge Beim speichern von Anlagen werden Ord... trottlbua Microsoft Outlook Hilfe 0 25.12.2008, 00:33 Letzten Beitrag anzeigen
Keine neuen Beiträge Probleme beim Seriendruck von Etiketten elfriedequack Microsoft Word Hilfe 9 18.12.2008, 11:10 Letzten Beitrag anzeigen
Keine neuen Beiträge Großes Excel VBA Problem!!Dialog Makr... sevinunu Microsoft Excel Hilfe 2 17.12.2008, 21:24 Letzten Beitrag anzeigen


 Gehe zu:   



Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen

Haftungsausschluss/Disclaimer


SMS kostenlos versenden | Battle-Dream | Tuning Forum | Join the YoungGeneration | krankenversicherungsvergleich | Kalorienarme Rezepte!
Versicherungsvergleich | Bürobedarf | Papier | Betten

Ranking-Hits



Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Alle Zeiten sind GMT + 1 Stunde
Deutsche Übersetzung von phpBB.de