Optionale Zelle in Funktion gibt Wert nicht wieder

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Optionale Zelle in Funktion gibt Wert nicht wieder
von: PaBa
Geschrieben am: 02.10.2015 09:08:58

Guten Morgen zusammen,
ich hoffe ihr könnt mir bei meinem Problem helfen:
Ich habe eine Funktion, die einen Wert wiedergibt. Sofern ein optionale Hilfszelle markiert wird (z.B. "A4"), soll der VBA Code weitere Informationen in diese Hilfszelle schreiben. Ich habe schon alles mögliche getestet, aber aus irgendeinem Grund schreibt er das nicht in die Hilfzeile. Da ich echt nicht weiß wo mein (Denk)fehler steckt, bin ich für jede Hilfe/Tipp dankbar!
Viele Grüße
PaBa


Public Function Zellbereich(Optional Hilfszelle As Variant) As Variant
Dim x As Variant
Zellbereich = "test"
If IsMissing(Hilfszelle) Then
        Exit Function
   Else
Hilfszelle = "test"
End If
End Function

Ich habe auch alternativ folgendes getestet, aber leider funktioniert das auch nicht.
Set x = ActiveSheet.Cells(Hilfszelle.Row, Hilfszelle.Column)
MsgBox x.Address
x = "test"

Bild

Betrifft: AW: Optionale Zelle in Funktion gibt Wert nicht wieder
von: Jack_d
Geschrieben am: 02.10.2015 09:39:36
Moin Moin,
also ich versteh noch nicht ganz was du mit der Function machen willst.
Zuerst würde ich Den Zellbereich als Range dimmen (sofern du das ganze als UDF "betreiben willst"
Dann
Musst du den Rückgabewert (Function- Name) sauber haben.

Public Function Zellbereich(Optional Hilfszelle As Variant) As Variant
Dim x As Variant
'Zellbereich = "test"
If IsMissing(Hilfszelle) Then
    Zellbereich = "test1"
        Exit Function
   Else
    Zellbereich = "test2"
End If
End Function
Dann musst du mir noch erläutern, was du mit isMissing bezwecken willst?
Grüße

Bild

Betrifft: AW: Optionale Zelle in Funktion gibt Wert nicht wieder
von: PaBa
Geschrieben am: 02.10.2015 09:51:16
Hallo Jack,
erst ein mal vielen Dank für deine Antwort. Vielleicht habe ich meine Absichten mit der Funktion nicht deutlich genug formuliert. Daher ein paar Erläuterungen:
Ich nutze die Funktion um Berechnungen anzustellen und das Ergebnis auszugeben (Zellbereich, z.B. in "A1"). Zusätzlich dazu möchte ich in einer optionalen Hilfszelle (wenn der User diese festlegt, z.B. "A3"), dass zusätzlich die Berechnungsschritte in die Hilfszeile geschrieben werden. Damit möchte ich erreichen, dass die Berechnungsschritte transparenter werden.
Das "IsMissing" soll prüfen, ob der User eine Zelle für die Hilfszelle angegeben hat. Wenn nicht, dann brauche ich auch nciht die Berechnungsschritte darstellen, ansonsten schon ;)
Viele Grüße
PaBa

Bild

Betrifft: AW: Optionale Zelle in Funktion gibt Wert nicht wieder
von: Nepumuk
Geschrieben am: 02.10.2015 10:09:06
Hallo,
es ist grundsätzlich nicht möglich eine andere Zelle als die Zelle aus der die Funktion aufgerufen wird zu ändern.
Gruß
Nepumuk

Bild

Betrifft: Das geht so leider ni
von: Jack_d
Geschrieben am: 02.10.2015 10:26:32
Es ist immer nur möglich einen WErt zurück zu geben.
Grüße

Bild

Betrifft: Das geht ggf schon, ist aber nichts für ...
von: Luc:-?
Geschrieben am: 02.10.2015 16:31:58
…VBA-Anfänger, PaBa;
siehe hier eine Anmerkung dazu. In deinem speziellen Fall dürfte es aber noch komplizierter wdn und es ist zu fragen, ob der Aufwand das lohnt. Aber viell klappt's ja mit Jack's „Krücke“… ;-)
Gruß, Luc :-?

Besser informiert mit …

Bild

Betrifft: Ne Riesen Krücke ^^
von: Jack_d
Geschrieben am: 02.10.2015 11:30:04
Hab mir mal was ausgedacht. Ist aber zugegebenermaßen sehr gewöhnungsbedürftig.
1. Code im Blatt aus dem die Formel aufgerufen werden soll (Im zweifel dann hinter alle Blätter)

Sub Worksheet_Change(ByVal Target As Range)
If Left(Target.FormulaLocal, 13) = "=Zellbereich(" Then
    Pos1 = InStr(Target.FormulaLocal, "(")
    Pos2 = InStr(Target.FormulaLocal, ";")
    Pos3 = InStr(Target.FormulaLocal, ")")
    
    If Pos2 = 0 Then
        'Ohne Hilfe - Hier nix machen
    Else
        PosWZelle = Mid(Target.FormulaLocal, Pos1 + 1, Pos2 - Pos1 - 1)
        PosHZelle = Mid(Target.FormulaLocal, Pos2 + 1, Pos3 - Pos2 - 1)
        
        Wert = Range(PosWZelle)
        Range(PosHZelle) = Wert & " * (3 + 3) / 7"
        'Mit Hilfe
    End If
    
Else
    
End If
End Sub
2. Code für die UDF (im allg. Modul)
Public Function Zellbereich(ByVal Wertebereich As Range, Optional Hilfszelle As Range) As  _
Variant
Dim Wert As Double
    If Wertebereich Is Nothing Then
         Exit Function
    Else
        Wert = Wertebereich * (3 + 3) / 7
    End If
Zellbereich = Wert
End Function
Die Formelhilfe muss dann entsprechend der Formel immer angepasst werden.
CAVE: alles soweit ohne große Fehlerbehandlung. Dies muss natürlich noch ergänz werden.
Auch aufgrund der kürze ohne hinreichendes "Dimmen"
Mal schauen wie es ankommt ^^
Bis dahin
Grüße

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Optionale Zelle in Funktion gibt Wert nicht wieder"