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

WENN startet Makro

WENN startet Makro
22.02.2014 11:02:09
Gerald
Einen schönen Tag an alle im Forum,
ich bin (neu hier) auf der Suche nach der Fehlerquelle für folgendes Problem:
-----------------------------------------------------------------------------
(D54)=WENN(D53>10;GewinnKopieren();"NEIN")
D53 berechnet eine Summe aus 2 anderen Zellen. Das Ergebnis ändert sich fortlaufend.
Steigt der Wert über 10 wird die Funktion GewinnKopieren() angesprochen.
Die MsgBox poppt auf mit "GewinnKopieren". Soweit, so gut.
Ich bestätige mit OK.
Das Makro im Modul1 GewinnKopieren() läuft jedoch nicht durch.
Ich kommentiere die MsgBox aus. Gleiches geschieht (nichts).
Wenn ich den Code direkt (oder schrittweise mit F8) in VB anstoße, funktioniert es einwandfrei, aber nur einmal.
Mit F8 weiter bei "End Sub " im Makro springt es nochmal zur Funktion, zeigt wieder die MsgBox, läuft durch das Makro, kopiert dann aber nicht mehr aus D53 (im Sheet kann ich sehen, daß die anzuspringenden Zellen nicht fokussiert werden).
Ich hoffe auf die Hilfe in Forum.
Vorab schon mal besten Dank
Gerald
Hier der Code:
Funktion
-----------------------------------------------------------------------------
Public Function Gewinn() 'dies ist die Funktion die das Makro aufruft 'das Makro hat den Namen "GewinnKopieren" MsgBox "GewinnKopieren" call GewinnKopieren 'mit und ohne call getestet End Function ------------------------------------------------------------------------------
Modul1 (Code)
------------------------------------------------------------------------------
Sub GewinnKopieren()
' GewinnKopieren Makro
' Tastenkombination: Strg+g
' Kopiert ZellenWert (D53) nach Spalte 5 in die nächste leere Zelle
Range("D53").Select
Selection.Copy
Cells(Rows.Count, 5).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: WENN startet Makro
22.02.2014 11:42:54
Matze
Hallo Gerald,
du hast die Funktionen vertauscht, dein unteres Makro im Modul soll doch die "Public Function" werden.
Das obere wird zur Sub Gewinn()
in Formeln kannst du dann die =GewinnKopieren() als Funktion nutzen.
Matze

Worksheet_Change?
22.02.2014 12:30:50
Erich
Hi Gerald,
wenn du eine VBA-Funktion in der Formel in einer Zelle eines Tabellenblatts als benutzerdef. Funktion (UDF) verwendest,
kann und darf diese Fkt. nicht irgendwelche anderen Zellen ändern.
Die Fkt. liefert einen Wert, der Wert wird in der Formel verwendet. Mehr geht nicht.
Für das was du erreichen möchtest - bei Änderungen überprüfen, ob eine Bedingung zutrifft,
wenn ja, eine Aktion (Copy) ausführen) - gibt es die Ereignisprozeduren.
Hier ist vermutlich Worksheet_Change() nützlich. Hast du schon mal in diese Richtung geschaut?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
Aus Erichs Beiträgen (auch den verlinkten) ...
22.02.2014 13:14:31
Luc:-?
…kannst du ja schon entnehmen, Gerald,
dass du Sinn und Zweck einer Fkt (UDF) fehlinterpretierst. Stell dir mal vor, das, was du vorhast, wäre einer Fkt erlaubt! Was meinst du wohl wie lange das gut geht, wenn Dtzde Fmln auf dem Blatt stehen, die so etwas machen?! Das kann nicht im Interesse einer Firma sein, die ein stabiles, universales Kalk'Produkt auf den Markt bringt → es würde hierbei nämlich irgendwann abstürzen!
Das man das, teils auch auf Grund neuerer Schlampereien (ab Xl12, RechercheStichwort selbstkorrigierende EingabeZelle) und natürlich über API-Fktt trotzdem hinbekommen kann, steht auf einem anderen Blatt… ;-)
Dann gibt's da ja noch die physische Entkopplung (von UDF und ausführender Subroutine; RechercheStichwort), aber das läuft letztlich auch auf den (zusätzlichen) Einsatz von Ereignis­Prozeduren hinaus.
Ansonsten scheint mir deine UDF-Konstruktion doch noch sehr an (makrorecorder-lastigen) SubProzeduren orientiert zu sein, was daran liegen mag, dass VBA hier strikt trennt. Eine Fkt ist eigentlich ein eigenständiges Berechnungspgm und sollte nicht als reiner Aufruf-Träger für eine ordinäre SubProzedur „missbraucht“ wdn. Das wird ihrer besonderen Möglichkeiten in keinster Weise gerecht!
In manchen anderen PgmierSprachen wie bspw J[ava]Script gibt's die Unterscheidung zwischen Sub- und FktsProzedur gar nicht. Alles ist Function, ob sie dann auch so fktioniert, hängt ganz davon ab, ob man ihr am Ende einen RückgabeWert mitgibt (return xyz; — in VBA fktsname = xyz).
Gruß Luc :-?

Anzeige
AW: WENN startet Makro
25.02.2014 09:33:38
Gerald
Hallo an alle, und vielen Dank an die Beteiligten für die informativen Antworten vom 22.02.14
Ich habe mich die letzten Tage mit den Infos und Verlinkungen befasst und komme nach etlichen Tests zu dem Ergebnis, dass das was ich erreichen will nicht mit dem Change_Ereignis machbar ist.
Ich favorisiere nun eine Tabellenblatt-Lösung, die die 1. leere Zelle in Spalte D ab Zeile 4 mit dem Ergebnis aus der WENN-Verarbeitung einer ErgebnisZelle beschreibt.
{=VERGLEICH(WAHR;D4:D1000="";0)}
(FORMEL, ergoogelt) findet die erste leere Zelle in Spalte D
A4 ist ein Ergebnis, B2 ist eine Bedingung, Wenn WAHR, dann FORMEL, sonst Warten
=WENN(A4>=B2;FORMEL;"Warten")

Mit meinen Versuchen, die VERGLEICH-Formel einzubauen, stoße ich allerdings an meine Excelgrenzen.
=WENN(A4>=B2;{=VERGLEICH(WAHR;D4:D1000="";0)};"Warten") 
funktioniert nicht.
Wo stimmt da die Syntax nicht?
Vielen Dank schon mal für Eure Hilfe
Gerald

Anzeige
AW: WENN startet Makro
25.02.2014 19:47:35
Hajo_Zi
Hallo Gerald,
warum, vor wenn "="?

AW: WENN startet Makro
26.02.2014 03:24:57
Gerald
Hallo Hajo,
Deine Gegenfrage " warum, vor wenn "="? " verblüfft mich etwas.
Die Formel der Zelle ist

D4=WENN(A4>=B2;{=VERGLEICH(WAHR;D4:D1000="";0)};"Warten")

Lasse ich das "=" weg, dann wird die Formel zum Text.
Da die Formel so nicht funktioniert, stimmt die Syntax nicht.
Deshalb war meine Frage, wie die korrekte Syntax aussehen muss, damit das funktionieren kann.
Ich hoffe, daß wir nicht aneinander vorbei schreiben.
Gruß
Gerald

Anzeige
AW: WENN startet Makro
26.02.2014 06:57:17
Hajo_zi
Hallo Gerald,
ich bin nicht der Formelmensch, aber ich hätte geschrieben das "=" vor Vergleich ist falsch. Eine Formel beginnt immer mit "=",. Aber vielleicht sehe ich das nur falsch.
Warum in der der Forme {} ist mir auch nicht klar.
Gruß Hajo

Formel erweitern
26.02.2014 09:38:43
Erich
Hi Gerald,
Hajo schrieb zwar "vor wenn" - er meinte aber wohl doch "vor VERGLEICH", wie sich in seinem folgenden Beitrag zeigt:
"aber ich hätte geschrieben das '=' vor Vergleich ist falsch."
Probier es mal mit
 ABCDE
1     
2 77   
3    5
4111  x 
5   x 
6   x 
7   x 
8     

Formeln der Tabelle
ZelleFormel
E3{=WENN(A4>=B2;VERGLEICH(WAHR;D4:D1000="";0); "Warten")}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Bitte beachte den Hinweis zur Matrixformel. Die geschweiften Klammern werden nicht eingegeben.
@Hajo:
Ist das deine Art, dich zu entschuldigen für deinen falschen Hinweis auf "vor wenn"?
Ist dir nicht auch klar, woher der Geralds Gedanke an die geschweiften Klammern wohl kamen?
Schließlich ist {=VERGLEICH(WAHR;D4:D1000="";0)} eine Matrixformel...
Ich meine, du solltest einen Anfänger nicht so auflaufen lassen. :-(
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige