1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Excel Vba

Discussion in 'Office-Programme' started by 5p45ti, Jul 3, 2008.

Thread Status:
Not open for further replies.
  1. 5p45ti

    5p45ti Byte

    Code:
    If Target.Address = "$T$10" Then
      Range("T17") = Range("T10") * Range("T16")
    ElseIf Target.Address = "$T$16" Then
      Range("T17") = Range("T10") * Range("T16")
    ElseIf Target.Address = "$T$17" Then
      Range("T16") = Range("T17") / Range("T10")
    End If
    
    Wenn man T10 gelöscht hat, oder 0 drin steht, löst das löschen von T17 immer den Laufzeitfehler 6 aus, wie kann ich das ändern?

    Ein eifaches *1 hinterdran funktioniert nicht.
     
  2. Beverly

    Beverly Halbes Megabyte

    Hi,

    wenn du den Code im Einzelschrittmodus ablaufen lässt siehst, du, dass die Codezeilen mehrfach durchlaufen werden. Und da beim Löschen des Eintrags in T10 die Zelle leer ist (bzw. den Wert 0 hat), kann die Division durch T10 nicht erfolgen und löst besagrten Fehler aus. Wenn man die Raktion auf die Eingaben abschaltet, funktionert der Code problemlos. Du musst nur beachten, dass die Reaktion auf die Eingaben unbedingt wieder eingeschaltet werden muss, weil andernfalls überhaupt keine Raektion auf eine Eingabe erfolgt, also auch kein Worksheet_Change Ereignis mehr ausgeführt wird.

    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False    ' Raktion aus Eingabe abschalten
        If Target.Address = "$T$10" Then
          Range("T17") = Range("T10") * Range("T16")
        ElseIf Target.Address = "$T$16" Then
          Range("T17") = Range("T10") * Range("T16")
        ElseIf Target.Address = "$T$17" Then
          Range("T16") = Range("T17") / Range("T10")
        End If
        Application.EnableEvents = True    ' Reaktion auf Eingabe einschalten
    End Sub
    
     
  3. 5p45ti

    5p45ti Byte

    :danke: für deine Hilfe, aber es funktioniert nicht.
    Es kann auch nicht an meiner Datei liegen, da der gleiche Fehler auch entsteht, wenn ich es in einer neuen Datei mache mit diesem Code hier.
    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False    ' Raktion aus Eingabe abschalten
        If Target.Address = "$A$1" Then
          Range("A3") = Range("A1") * Range("A2")
        ElseIf Target.Address = "$A$2" Then
          Range("A3") = Range("A1") * Range("A2")
        ElseIf Target.Address = "$A$3" Then
          Range("A2") = Range("A3") / Range("A1")
        End If
        Application.EnableEvents = True    ' Reaktion auf Eingabe einschalten
    End Sub
     
  4. Beverly

    Beverly Halbes Megabyte

    Hi,

    weshalb es bei dir nicht funktioniert, kann ich nicht nachvollziehen, da ich deine Arbeitsmappe nicht kenne. Auf meinem Rechner läuft der Code völlig problemlos (genau so wie der erste, den ich vor dem Posten natürlich getestet habe).
     

    Attached Files:

  5. 5p45ti

    5p45ti Byte

    hi Katrin

    Ich bezweifle nicht das der Code richtig ist, er macht auch das was er soll, aber mein Problem ist, das es immer und überall, wo ich es getestet habe, den Laufzeitfehler 6 macht, wenn man A1 löscht oder ne 0 drin steht und danach A3 löscht. Wenn ich A3 allerdings nur bearbeite, dann ergibt sich der Laufzeitfehler 11. Aber so oder so, hört das Makro dann auf kann man nix mehr machen.

    Ich arbeite mit Office 2003 SP2 auf einem XP Professional SP2.

    Probier mal bei der Datei hier die Zelle A3 zu löschen und gib mir bitte dein Resultat zurück.
     

    Attached Files:

  6. Beverly

    Beverly Halbes Megabyte

    Hi,

    ich kann deine Zip-Datei nicht öffnen, aber ich habe die genaue Beschreibung deines Ablaufs in meiner Datei nachvollzogen. Sorry, hatte das beim ersten Mal offensichtlich nicht ganz verfolgt.

    Ändere diese Zeilen, dann wird die Berechnung nur ausgeführt, wenn A1 nicht leer und nicht 0 ist

    Code:
        ElseIf Target.Address = "$A$3" Then
           If Range("A1") <> "" And Range("A1") <> 0 Then Range("A2") = Range("A3") / Range("A1")
    
     
  7. 5p45ti

    5p45ti Byte

    :danke: Katrin jetzt gehts.

    Hier der Code und die Beschreibung:
    Wenn Zeile 1 eingegeben wird, soll es in Zeile 3 das Resultat aus A1*A2 schreiben.
    Wenn Zeile 2 eingegeben wird, soll es in Zeile 3 das Resultat aus A1*A2 schreiben.
    Wenn Zeile 3 eingegeben wird, soll es in Zeile 2 das Resultat aus A3/A1 schreiben, aber nur wenn A1 nicht leer oder 0 ist.

    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False    ' Reaktion aus Eingabe abschalten
        If Target.Address = "$A$1" Then 
          Range("A3") = Range("A1") * Range("A2")
        ElseIf Target.Address = "$A$2" Then
          Range("A3") = Range("A1") * Range("A2")
        ElseIf Target.Address = "$A$3" Then
          If Range("A1") <> "" And Range("A1") <> 0 Then Range("A2") = Range("A3") / Range("A1")
        End If
        Application.EnableEvents = True    ' Reaktion auf Eingabe einschalten
    End Sub
    
     
    Last edited: Jul 4, 2008
Thread Status:
Not open for further replies.

Share This Page