Eigene Function aufrufen in Worksheet SelectionChange fehlerhaft

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von petaod.

    Eigene Function aufrufen in Worksheet SelectionChange fehlerhaft

    Guten Morgen zusammen.

    Ich hab ein Problem mit meiner Funktion und meine Kenntnisse in VBA oder OOP sind Jahre her.
    Ich würd gerne in einer Funktion direkt 2 Werte übergeben, die in diesem Fall Zellen sind.
    Diese Funktion soll aufgerufen werden sobald sich im Excel Arbeitsblatt etwas ändert.

    Hier erstmal die Funktion

    Quellcode

    1. Public Function staircalc(gHoehe, gemStg)
    2. Dim geschoss, gemittelte As Double
    3. geschoss = Tabelle1.Range(gHoehe).Value
    4. gemittelte = Tabelle1.Range(gemStg).Value
    5. End Function


    will ich diese in" Private Sub Worksheet_SelectionChange(ByVal Target As Range)"
    aurufen in dem ich staircalc(A11,B11) schreibe markiert er mir die Worksheet_SelectionChange zeile Gelb und meldet Syntaxfehler.


    hier der Part der Worksheet Sub

    Quellcode

    1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    2. Dim geschoss, gemittelt, steigungen, twert, höhe, breite, sicherheit, bequemlichkeit As Double
    3. ComboBox1.List = Tabelle3.Range("A2:A4").Value
    4. geschoss = Tabelle1.Range("A11").Value
    5. gemittelt = Tabelle1.Range("B11").Value
    6. steigungen = WorksheetFunction.RoundDown(geschoss / gemittelt, 0)
    7. höhe = WorksheetFunction.Round(geschoss / steigungen, 1)
    8. breite = WorksheetFunction.RoundDown(63 - (2 * höhe), 0)
    9. Treppen.Clear
    10. ...


    Ich hab keine Ahnung was da falsch ist :(

    Excelsior schrieb:

    sobald sich im Excel Arbeitsblatt etwas ändert
    Da ist eigentlich das Worksheet_Change-Event zuständig.
    Das Selection_Change schlägt jedesmal zu, wenn du auch nur in eine andere Zelle klickst, also viel zu häufig.

    Excelsior schrieb:

    Dim geschoss, gemittelt, steigungen, twert, höhe, breite, sicherheit, bequemlichkeit As Double
    Achtung Stolperfalle!
    Nur bequemlichkeit wird als Double definiert, alle anderen als Variant.
    Das ist in VBA anders als in VB6 oder VB.Net

    Excelsior schrieb:

    ComboBox1.List = Tabelle3.Range("A2:A4").Value
    Du meinst wahrscheinlich

    Visual Basic-Quellcode

    1. ComboBox1.ListFillRange = "Tabelle3!A2:A4"


    Mir fallen noch einige Ungereimtheiten auf, aber dazu sollte das Programm erstmal compile-clean sein.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --