Wert einer Zelle setzen?

  • Excel

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von FloFuchs.

    Wert einer Zelle setzen?

    Ich versuche mich seit kurzem an einem einzigen einfachen VBA-Macro.
    Es soll einfach nur den Wert einer als Parameter mitgegebenen Zelle setzen.
    Ich habe mal versucht der Einfachkeit halber was auszuprobieren. Jedoch scheitere ich... und meine Logik sagt mir jedoch, dass ich richtig liege...
    Ach ja und wenn ich schonmal frage. Kann man den lästigen VBA-Editor nicht abschalten. Das hällt ja kein Mensch aus. Ich schreib zahl As Range und raus kommt zahlAsRange, ich schreib Select Case (...) raus kommt SelectCase(...). Ich meine kanns das sein, dass ich immer aus nem Texteditor reinkopieren muss? Irgendwas mach ich gewaltig falsch:

    Visual Basic-Quellcode

    1. Function Test(zahl As Range, typ As Range, ko As Range, s0 As Range, s1 As Range, es As Range, Optional default As Variant)
    2. If (IsMissing(default)) Then
    3. default = "ko"
    4. End If
    5. Dim t1 As Variant
    6. t1 = typ.Value
    7. If (t1 = "") Then
    8. t1 = default
    9. End If
    10. ko.Value = 50 'was ist hier bitte falsch
    11. Select Case (LCase(t1))
    12. Case "ko"
    13. ko.Value = ko.Value + zahl.Value
    14. Case "s0"
    15. s0.Value = s0.Value + zahl.Value
    16. Case "s1"
    17. s1.Value = s1.Value + zahl.Value
    18. Case "es"
    19. es.Value = es.Value + zahl.Value
    20. End Select
    21. ko.Value = 50
    22. End Function


    EDIT:
    Achso jetzt seh ich grad. Range sollen natürlich mehrere Zellen sein. Aber wie kann ich dann nur eine Zelle nehmen?


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „thefiloe“ ()

    Naja aber ich will ja nicht die Zelle A1 sondern eine beliebige welche ich als Parameter mitgebe.
    Das ganze läuft so. Ich habe Zeilen mit Werten. Wenn ein Wert aus dieser Zeile x ist dann wird ein Wert dieser Zeile bei Zelle x addiert. Sprich der typ(Paramter) gibt an zu welcher Zelle die zahl addiert werden soll. Und die Zelle wird eben als Parameter mitgegeben. Leider kann ich von der keinen Wert setzen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    thefiloe schrieb:

    Ich schreib zahl As Range und raus kommt zahlAsRange
    Das hat nichts mit dem Editor an sich zu tun, da hast du irgendein Schrott-AddIn geladen.
    Lies mal hier:
    stackoverflow.com/questions/12…aces-throws-cursor-around

    Wenn's geht, definier deine Variablen NICHT als Variant, sondern als das, wofür du sie verwendest.
    Und mach eine ByVal-Übergabe.

    Visual Basic-Quellcode

    1. Function Test(ByVal zahl As Range, ByVal typ As Range, ByVal ko As Range, Byal s0 As Range, s1 As Range, ByVal es As Range, Optional ByVal default As String = "ko")


    Ansonsten ist deine Logik recht diffus.
    Man übergibt nicht fünf Ranges, um dann einen davon neu zu beschreiben.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hmmm ok an dem Byval könnts liegen. Dachte mir schon, dass es hier das nicht braucht aber wie gesagt hab nen paar codes angeschaut und da wars überal weg...
    Und Addins? Ich hab nie nen Addin geladen? Hab vor paar Tagen Office Prof Student installiert und seit damals nix gemacht :(.

    EDIT: Hilft nix. Hab versucht im Überwachungsfenster den Wert zu ändern. "Laufzeitfehler 1004 Anwendungs- oder objektdefinierter Fehler"


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „thefiloe“ ()

    Hab versucht im Überwachungsfenster den Wert zu ändern. "Laufzeitfehler 1004 Anwendungs- oder objektdefinierter Fehler"
    Den Wert von was?

    Du solltest dir vielleicht mal den Unterschied von einem Objekt und dessen Eigenschaften klar machen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    tulla schrieb:

    Zum Thema cells. Lol ich habe ein Beispiel gemeint 1,1 ist Zelle A1 2,1 ist A2 und 1,2 ist B1
    Da spirchst du einzelne Zellen an und kein Range.
    Du willst do ch in er Funktion einzelne Zellen ändern und nicht ganze Reihen......


    Das versteht sich von selbst. Ich will aber als PARAMETER angeben welche Zelle gesetzt wird.

    petaod schrieb:

    Den Wert von was?

    z.B. ko.Value bzw ko.Value2 was ja fast das Selbe ist.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    thefiloe schrieb:

    Ich will aber als PARAMETER angeben welche Zelle gesetzt wird.
    Worksheet, Range, Rows...
    Das sind alles Range-Objekte in denen du die Eigenschaften Cells oder Offset ansprechen kannst.

    Visual Basic-Quellcode

    1. Set MyRange = Range("A2:X2")
    2. Set MyRange = Rows(2)
    3. MyVal = MyRange.Cells(1,4).Value
    4. MyVal = MyRange.Offset(0,3).Value
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    FloFuchs schrieb:


    someway like this...?

    Jajaja genau so :)
    Nur kann ich mir nicht die test() Sub sparen und direkt die Parameter übergeben.
    Praktisch ca. so: =foo(A1, 5)


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    die sub test war nur ein Beispiel zum benutzen der sub.
    Ich habe das ganze aber als Sub gemacht nicht als Function, d.h. du musst nix zuweisen.
    Als Function macht das mit der Zellwertübergabe keinen Sinn weil du ja auf der linken Seite der Zuweisung ja eh schon die Zelladresse hin schreiben musst.
    Wenn Du einfach nur die direkte Zellenbezeichnung eingeben willst statt eines Range:

    Visual Basic-Quellcode

    1. Public Sub foobaa(ByVal targetCell As String, ByVal newValue As String)
    2. ActiveSheet.Range(targetCell).Value = newValue
    3. End Sub