Makro per Function starten und Wert auslesen

Bild

Betrifft: Makro per Function starten und Wert auslesen
von: Tobias
Geschrieben am: 07.11.2015 12:28:33

Hallo liebes Forum,
ich habe ein kleines Problem welches für euch bestimmt nicht (hoffe ich) allzu schwer zu lösen ist, welches ich aber einfach nicht auf die Reihe bekomme. Folgendes: Ich habe ein Excelsheet in welchem per WENN Funktion in Zelle C24 und Zelle C25 (unabhängig voneinander) der Wert WAHR oder FALSCH eingetragen werden kann. Nun möchte ich falls C24 WAHR ist ---> =WENN(C24="WAHR";ZählenTeilmitDeckel();""), dass eine Function gestartet wird welche wiederum eine Sub startet welche einen Wert in Zelle C26 schreibt...Falls C25 WAHR ist, soll dieser Wert wieder auf 0 gesetzt werden...ich bekomme aber absolut nichts angezeigt. Beigefügt der Code welcher in Modul1 eingetragen ist.


Public Function ZählenTeilmitDeckel() As String
Call Zählen
End Function

Public Sub Zählen()
Dim a As Integer
Sheets("Tabelle1").Select
If Range("C24").Value = "WAHR" Then
a = a + 1
Range("C26").Value = a
ElseIf Range("C25") = "WAHR" Then
a = 0
Range("C26") = a
End If
End Sub

Ich hoffe mir kann jemand weiterhelfen da ich mich nicht wirklich auskenne...

Bild

Betrifft: AW: Makro per Function starten und Wert auslesen
von: Tino
Geschrieben am: 07.11.2015 13:05:39
Hallo,
eine Funktion aus einer Zelle aufgerufen kann nicht so ohne weiteres seine Umgebung beeinflussen.
Ich würde bei der Zelle ansetzen der die Wenn Funktion auslöst.
In etwa so, kenne aber deine Tabelle nicht.
kommt als Code in Tabelle

Option Explicit 
 
Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Cells(1, 1).Address = "$B$24" Then 
    Application.EnableEvents = False 
        Range("C26").Value = IIf(Range("C24").Value = "WAHR", 1, 0) 
    Application.EnableEvents = True 
End If 
End Sub 
 
Gruß Tino

Bild

Betrifft: AW: Makro per Function starten und Wert auslesen
von: Tobias
Geschrieben am: 07.11.2015 13:19:30
Hallo,
vielen Dank für deine Antwort. Ich sehe gerade dass ich ein wesentlichen Teil meines Problems nicht richtig beschrieben habe... Ich wollte es über den Weg der Function machen, da ich das Makro automatisch ausführen möchte. D.h. jdesmal wenn der Wert in C24 von FALSCH auf WAHR wechselt soll das Makro automatisch ausgeführt werden. Genauso soll der Wert in Zelle C26 automatisch auf 0 gesetzt werden wenn Zelle C25 von FALSCH auf WAHR wechselt.


Bild

Betrifft: AW: Makro per Function starten und Wert auslesen
von: Tino
Geschrieben am: 07.11.2015 13:24:46
Hallo,
Worksheet_Change ist ein Event Makro das bei Änderung in einer Zelle ausgelöst wird.
Die Wenn Formel wird ja bestimmt von irgendeiner Zelle durch Eingabe berechnet und
bei dieser Zelle oder Zellbereich müsstest Du ansetzen.
Wenn Du eine Bsp. Datei hast, kann ich versuche dies einzubauen.
Gruß Tino

Bild

Betrifft: AW: Makro per Function starten und Wert auslesen
von: Tobias
Geschrieben am: 07.11.2015 13:44:44
Hallo,
das mit dem Worksheet_Change hört sich schonmal gut an. Leider habe ich noch keine Bespieldatei da ich diesen Vorgang als erstes brauche und mir den Rest dann darum "aufbauen" möchte.
Es ist einfach so, dass ich in Zelle C24 oder C25 per Hand jeweils WAHR oder FALSCH eintragen möchte. Falls C24= WAHR ist soll automatisch der Wert in Zelle C26 um 1 erhöht werden, falls C25= WAHR ist soll der Wert in Zelle C26 auf den Wert 0 gesetzt werden. Mein weiteres Vorgehen ist dann, dass ich diese Daten verwenden werde um daraus (zusammen mit anderen Daten) ein Chart zu erstellen.

Bild

Betrifft: AW: Makro per Function starten und Wert auslesen
von: Tino
Geschrieben am: 07.11.2015 14:05:57
Hallo,
der Ablauf ist seltsam, für Wahr/Falsch könnte auch eine Zelle ausreichen.
Hier mal von Deiner Version ausgegangen ein Bsp, mehr kann ich nicht helfen.
https://www.herber.de/bbs/user/101307.xlsm
Gruß Tino

Bild

Betrifft: AW: Makro per Function starten und Wert auslesen
von: Tobias
Geschrieben am: 07.11.2015 14:52:01
Hallo Tino,
vielen Dank für deine Hilfe, das war genau das was ich gesucht habe!
Gruß
Tobias

Bild

Betrifft: AW: Makro per Function starten und Wert auslesen
von: Tobias
Geschrieben am: 07.11.2015 15:12:48
Eine Frage hätte ich nun doch noch...Der selbe Ablauf wie in Zelle C24, C25 und C26 soll nun auch in den Zellen C27, C28 und C29 ablaufen. Also wenn C27 WAHR ist, dann soll C29 um 1 erhöht werden und wenn C28 WAHR ist, soll C29 auf 0 gesetzt werden. Ich habe versucht deinen Code wie unten zu sehen ist zu erweitern. Funktioniert auch allerdings wird bei C28= WAHR , C29 nicht auf 0 gesetzt. Habe ich einen Fehler gemacht?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Intersect(Target, Range("C24:C25"))
If Not rng Is Nothing Then
    Application.EnableEvents = False
        For Each rng In rng.Cells
            If rng.Value = True Then
                Select Case rng.Row
                    Case 24: Range("C26").Value = Range("C26").Value + 1
                    Case 25: Range("C26").Value = 0
                End Select
            End If
        Next rng
    Application.EnableEvents = True
End If
Set rng = Intersect(Target, Range("C27:C28"))
If Not rng Is Nothing Then
    Application.EnableEvents = False
        For Each rng In rng.Cells
            If rng.Value = True Then
                Select Case rng.Row
                    Case 27: Range("C29").Value = Range("C29").Value + 1
                    Case 28: Range("C29").Value = 0
                End Select
            End If
        Next rng
    Application.EnableEvents = True
End If
End Sub


Bild

Betrifft: AW: Makro per Function starten und Wert auslesen
von: Tino
Geschrieben am: 07.11.2015 16:41:31
Hallo,
würde ich evtl. mal so versuchen.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, rngAr As Range, rngTmp As Range
'Bereiche (nicht zusammenhängent!)
Set rngAr = Range("C24:C25", "C27:C28")
Set rng = Intersect(Target, rngAr)
If Not rng Is Nothing Then
    Application.EnableEvents = False
        For Each rng In rng.Cells
            If rng.Value = True Then
                With rng
                    For Each rngTmp In rngAr.Areas
                        If rngTmp.Rows(1).Row = .Row Then
                            .Offset(2, 0).Value = .Offset(2, 0).Value + 1
                        Else
                            .Offset(1, 0).Value = 0
                        End If
                    Next rngTmp
                End With
            End If
        Next rng
    Application.EnableEvents = True
End If
End Sub
Gruß Tino

Bild

Betrifft: Einer Funktion ist es in Xl generell nicht ...
von: Luc:-?
Geschrieben am: 07.11.2015 14:11:30
…gestattet, etwas Anderes als ihr eigenes Ergebnis zu ändern, Tobias,
alle anderen Aktionen sind bis auf wenige Ausnahmen nicht möglich. Bei Aufruf einer SubProzedur aus einer Fkt gilt die Prozedur als externer Bestandteil der Fkt. Deshalb ist dein ursprünglicher Ansatz nicht zielführend und hat Tino dir dafür eine Alternative angeboten, die auch so fktionieren dürfte, wenn du WAHR und FALSCH manuell eintragen willst. Wären diese Werte ein wechselndes FmlErgebnis, müsste entweder ein anderes Ereignis oder die Zelle benutzt wdn, in der die Änderung manuell (auch durch Einkopieren!) erfolgt.
Alle weiteren Aktionen wie Berechnungen in der SubProzedur könnten auch mit Fmln ausgeführt wdn, so dass man sich fragt, warum das Ganze quasi „von hinten durch die Brust geschossen“ erfolgen soll und nicht wie üblich.
Deshalb muss ich hier auch nicht auf diverse Möglichkeiten hinweisen, wie dein Ziel außerdem noch erreichbar wäre.
Gruß, Luc :-?

Besser informiert mit …

Bild

Betrifft: Das bezieht sich nur auf Fktt in ZellFmln! owT
von: Luc:-?
Geschrieben am: 07.11.2015 17:56:08
:-?

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Makro per Function starten und Wert auslesen"