Office: (Office 2013) Makro das Zellen bei einem bestimmten Wert entsperrt

Helfe beim Thema Makro das Zellen bei einem bestimmten Wert entsperrt in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, ich habe eine Tabelle, bei der die Zellen A1:A3 nicht gesperrt sind. Ich möchte ein Makro schreiben, was folgendes bewirkt: Wenn in A1 das... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Naddus0207, 13. Oktober 2016.

  1. Naddus0207 Erfahrener User

    Makro das Zellen bei einem bestimmten Wert entsperrt


    Hallo,

    ich habe eine Tabelle, bei der die Zellen A1:A3 nicht gesperrt sind. Ich möchte ein Makro schreiben, was folgendes bewirkt:
    Wenn in A1 das Produkt der Zellen A2 und A3 geschrieben wird, dann soll die Zelle B1 entsperrt werden. Ich habe es mit folgendem Code probiert, der aber leider nicht funktioniert:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("$A$1")) Is Nothing Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub
    Dim v As Integer
    v = Target.Value
    On Error GoTo Ende
    Application.EnableEvents = False
    ActiveSheet.Unprotect
    Cells.Locked = True
    Select Case v
    Case Is = A2 * A3
    Range("A1, B1").Locked = False
    Case Else
    Range("A1 : A3").Locked = False
    End Select
    Ende:
    ActiveSheet.Protect
    Application.EnableEvents = True
    End Sub

    Kann mir vll. jemand weiterhelfen?
     
    Naddus0207, 13. Oktober 2016
    #1
  2. Beverly
    Beverly Erfahrener User
    Hi,

    meinst du so etwas:

    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Cells(1).Address(False, False) = "A1" Then
            If Target = Range("A2") * Range("A3") Then
                ActiveSheet.Unprotect
                Range("B1").Locked = False
                ActiveSheet.Protect
            End If
        End If
    End Sub
    
    
    Bis später,
    Karin
     
    Beverly, 13. Oktober 2016
    #2
  3. Naddus0207 Erfahrener User
    Hi,

    danke schon mal für die Antwort. Wenn ich deinen Code nehme und in den VBA Editor kopiere und speichere bewirkt das bei mir eine Sperrung aller Zellen, egal, ob das Ergebnis in A1 richtig oder falsch ist.

    Was ich meine ist folgendes: Wenn man bspw. in A2 4 einträgt und in A3 6, dann wäre das Produkt 24. Wenn man das nun in A1 einträgt, soll sich die Zelle B1 entsperren und zur Eingabe freigeben werden. A1 : A3 sollen prinzipiell nicht gesperrt sein.
     
    Naddus0207, 13. Oktober 2016
    #3
  4. Beverly
    Beverly Erfahrener User

    Makro das Zellen bei einem bestimmten Wert entsperrt

    Hi,

    die Zellen A1:A3 musst du vorher selbstverständlich von Hand entsperren.

    Bis später,
    Karin
     
    Beverly, 13. Oktober 2016
    #4
  5. Naddus0207 Erfahrener User
    Hm,

    es funktioniert aber leider nicht. Ich entferne den Schutz von A1:A3 und sperre das Blatt. Dann gebe ich bspw. in A2 8 und A3 4 ein. Das Ergebnis 32 gebe ich in A1 ein und Excel sperrt mir alle Zellen inkl. A1:A3 zur Eingabe und auf B1 kann ich auch nicht zugreifen Makro das Zellen bei einem bestimmten Wert entsperrt :confused:
     
    Naddus0207, 14. Oktober 2016
    #5
  6. Beverly
    Beverly Erfahrener User
    Also bei mir passiert folgendes: wird in A1 das korrekte Produkt eingetragen, wird B2 entsperrt und A1:A3 bleiben entsperrt. Ist die Eingabe in A1 falsch, bleiben alle Zellen (auch B1) gesperrt, nur A1:A3 sind nach wie vor entsperrt.

    Bis später,
    Karin
     
    Beverly, 14. Oktober 2016
    #6
  7. Naddus0207 Erfahrener User
    Ach, danke jetzt funktioniert es bei mir auch. Hatte das "Open Explicit" vergessen.
     
    Naddus0207, 17. Oktober 2016
    #7
  8. Naddus0207 Erfahrener User

    Makro das Zellen bei einem bestimmten Wert entsperrt

    Wie könnte ich denn deinen Code modifizieren, wenn ich z.B. in A1 das Ergebnis von A2 * A3 * 10% sehen möchte?
    Also A2 z.B. 5 und A3 z.B. 2 und das Ergebnis müsste dann 1 sein?
     
    Naddus0207, 17. Oktober 2016
    #8
  9. Beverly
    Beverly Erfahrener User
    Option Explicit ist nur dazu da um zu prüfen, ob verwendete Variablen korrekt geschrieben wurden (bei mir ist der VBA-Editor so eingestellt, dass diese Zeile immer automatisch von Excel eingefügt wird). Da im Code keine Variablen verwendet werden, ist diese Zeile somit überhaupt nicht relevant dafür, dass der Code bei dir nicht funktioniert hat - dein Problem hatte also eine andere Ursache.

    Bis später,
    Karin
     
    Beverly, 17. Oktober 2016
    #9
  10. Beverly
    Beverly Erfahrener User
    Code:
    If Target = Range("A2") * Range("A3") * 0.1 Then
    Bis später,
    Karin
     
  11. Naddus0207 Erfahrener User
    Supi,

    danke schon mal soweit. Ich habe es jetzt auch so weit, eine Zelle nach der anderen entsperre abhängig vom Ergebnis der Vorzelle. Da ich aber gerne eine Tabelle mit Beträgen in € erstellen möchte, würde ich noch gerne wissen, wie ich den Code schreiben muss, wenn ich gerundete Werte haben möchte, also:

    in A2 stehen: 25,99 €
    in A3 stehen: 19 %

    in A1 soll das Ergebnis von A2 * A3 stehen allerdings als Ergebnis mit 2 Nachkommastellen

    das exakte Ergebnis wären ja 19 % * 25,99 = 4,9381 €

    ich möchte, dass sich B1 entsperrt, wenn in A1 4,94 € eingetragen werden.

    Leider weiß ich aber nicht, wie ich die Rundung bei dem Code berücksichtigen muss?

    Danke.
     
    Naddus0207, 17. Oktober 2016
    #11
  12. Beverly
    Beverly Erfahrener User
    Hi,

    so wie die Formel RUNDEN(Wert; Kommastelle) gibt es das VBA-Äquivalent Application.Round(Werte, Kommastelle)

    Code:
    If Target = Application.Round(Range("A2") * Range("A3"), 2) Then
    Bis später,
    Karin
     
  13. Naddus0207 Erfahrener User

    Makro das Zellen bei einem bestimmten Wert entsperrt

    Hi nochmal,

    ich habe folgenden Code geschriebenbzw. deinen entsprechend angepasst:

    Code:
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells(1).Address(False, False) = "E5" Then
    If Target = Application.Round(Range("E1") * Range("E2"), 2) Then
    ActiveSheet.Unprotect
    Range("E6").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E6" Then
    If Target = Application.Round(Range("E5") * Range("D6"), 2) Then
    ActiveSheet.Unprotect
    Range("E7").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E7" Then
    If Target = Application.Round(Range("E5") - Range("E6"), 2) Then
    ActiveSheet.Unprotect
    Range("E8").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E8" Then
    If Target = Application.Round(Range("E7") * Range("D8"), 2) Then
    ActiveSheet.Unprotect
    Range("E9").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E9" Then
    If Target = Application.Round(Range("E7") - Range("E8"), 2) Then
    ActiveSheet.Unprotect
    Range("E10").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E10" Then
    If Target = Application.Round(Range("D10"), 2) Then
    ActiveSheet.Unprotect
    Range("E11").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E11" Then
    If Target = Application.Round(Range("E9") + Range("E10"), 2) Then
    ActiveSheet.Unprotect
    Range("E12").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E12" Then
    If Target = Application.Round(Range("E11") * Range("D12"), 2) Then
    ActiveSheet.Unprotect
    Range("E13").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E13" Then
    If Target = Application.Round(Range("E11") + Range("E12"), 2) Then
    ActiveSheet.Unprotect
    Range("E14").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E14" Then
    If Target = Application.Round(Range("E13") * Range("D14"), 2) Then
    ActiveSheet.Unprotect
    Range("E15").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E15" Then
    If Target = Application.Round(Range("E13") + Range("E14"), 2) Then
    ActiveSheet.Unprotect
    Range("E16").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E16" Then
    If Target = Application.Round(Range("E15") * Range("D16"), 2) Then
    ActiveSheet.Unprotect
    Range("E17").Locked = False
    ActiveSheet.Protect
    End If
    End If
    If Target.Cells(1).Address(False, False) = "E17" Then
    If Target = Application.Round(Range("E15") + Range("E16"), 2) Then
    ActiveSheet.Unprotect
    Range("E20").Locked = False
    ActiveSheet.Protect
    End If
    End If
    End Sub
    Den möchte ich in die angehängte Mappe integrieren. Und zwar soll das ganze so ablaufen: 1. Wenn die Mappe geöffnet wird, dann sollen nur die gelben Felder zur Eingabe frei sein 2. Wenn man auf Start drückt entsperrt sich ja E5 und dann soll im Prinzip der Code greifen, also abhängig vom Ergebnis, welches in E5 eingetragen wird, entsperrt sich dann E6, usw.

    Wie muss ich den Code entsprechend anpassen? Und wo füge ich ihn ein?

    Als Beispielpasswort habe ich 123 gewählt.
     
    Zuletzt bearbeitet: 17. Oktober 2016
    Naddus0207, 17. Oktober 2016
    #13
  14. Beverly
    Beverly Erfahrener User
    Hi,

    was meinst du mit "abhängig vom Ergebnis, welches in E5 eingetragen wird, entsperrt sich dan E6 usw."? Muss das Ergebnis einem bestimmten Wert entpsrechen oder soll einfach nur die nächstfolgende Zelle freigeschaltet werden (unabhängig vom eingetragenen Wert)?

    Bis später,
    Karin
     
  15. Naddus0207 Erfahrener User
    Hallo,

    also E5 entsperrt sich ja durch das Drücken des Startbutton. Danach soll es sich folgendermaßen entsperren:

    E6, wenn in E5 das Produkt aus E1 und E2 eingetragen wird (gerundet auf 2 Nachkommastellen - wie bei allen folgenden Eingaben)
    E7, wenn in E6 das Produkt von E5 und D6 eingetragen wird
    E8, wenn in E7 die Differenz zwischen E5 und E6 eingetragen wird
    E9, wenn in E8 das Produkt von E7 und E8 eingetragen wird
    E10, wenn in E9 die Differenz von E7 und E8 eingetragen wird
    E11, wenn in E10 der Wert von D10 eingetragen wird
    E12, wenn in E11 die Summe von E9 und E10 eingetragen wird
    E13, wenn in E12 das Produkt von E111 und D12 eingetragen wird
    E14, wenn in E13 die Summe von E11 und E12 eingetragen wird
    E15, wenn in E14 das Produkt von E13 und D14 eingetragen wird
    E16, wenn in E15 die Summe von E13 und E14 eingetragen wird
    E17, wenn in E16 das Produkt von E15 und D16 eingetragen wird
    E20, wenn in E17 die Summe von E15 und E16 eingetragen wird

    Also ich habe den folgenden Code geschrieben:

    Code:
    Option Explicit
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells(1).Address(False, False) = "E5" Then
            If Target = Application.Round(Range("E1") * Range("E2"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E6").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E6" Then
            If Target = Application.Round(Range("E5") * Range("D6"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E7").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E7" Then
            If Target = Application.Round(Range("E5") - Range("E6"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E8").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E8" Then
            If Target = Application.Round(Range("E7") * Range("D8"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E9").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E9" Then
            If Target = Application.Round(Range("E7") - Range("E8"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E10").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E10" Then
            If Target = Application.Round(Range("D10"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E11").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E11" Then
            If Target = Application.Round(Range("E9") + Range("E10"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E12").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E12" Then
            If Target = Application.Round(Range("E11") * Range("D12"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E13").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E13" Then
            If Target = Application.Round(Range("E11") + Range("E12"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E14").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E14" Then
            If Target = Application.Round(Range("E13") * Range("D14"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E15").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E15" Then
            If Target = Application.Round(Range("E13") + Range("E14"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E16").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E16" Then
            If Target = Application.Round(Range("E15") * Range("D16"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E17").Locked = False
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "E17" Then
            If Target = Application.Round(Range("E15") + Range("E16"), 2) Then
                ActiveSheet.Unprotect ("123")
                Range("E20").Locked = False
                ActiveSheet.Protect ("123")
          End If
        End If
    End Sub
    
    
    
    Aber der verträgt sich nicht mit den anderen Makros, die ich eingerichtet habe, da bekomme ich immer einen Laufzeitfehler.

    Wenn ich ihn ohne die anderen Makros laufen lasse, funktioniert er aber.
     
    Zuletzt bearbeitet: 18. Oktober 2016
    Naddus0207, 18. Oktober 2016
    #15
Thema:

Makro das Zellen bei einem bestimmten Wert entsperrt

Die Seite wird geladen...
  1. Makro das Zellen bei einem bestimmten Wert entsperrt - Similar Threads - Makro Zellen bestimmten

  2. Makro starten, wenn Wert einer bestimmten Zelle sich durch Formel ändert

    in Microsoft Excel Hilfe
    Makro starten, wenn Wert einer bestimmten Zelle sich durch Formel ändert: Hallo, ich habe schon eine Stunde im Netz herum gesucht und finde keine befriedigende Lösung für folgendes Problem: Es soll automatisch ein Makro gestartet werden, wenn sich der Wert einer...
  3. Per Makro bestimmte Zellen löschen

    in Microsoft Excel Hilfe
    Per Makro bestimmte Zellen löschen: Guten Abend zusammen Ich habe eine Excel-Tabelle, in welcher in den Spalten D bis G jeweils ein "x" pro Zeile stehen kann. Nun möchte ich in allen Zeilen mit einem "x" jeweils jene 3 Zellen,...
  4. Suchen und Ersetzen per Makro mit Wert einer bestimmten Zelle

    in Microsoft Excel Hilfe
    Suchen und Ersetzen per Makro mit Wert einer bestimmten Zelle: Hallo zusammen, kann ich in einem Blatt über ein Makro alle bisherigen Werte (z.B."xxx") durch einen neuen Wert ersetzen, der in einer bestimmten Zelle b2 steht (z.B. "yyy") Vielen Dank für einen...
  5. Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben

    in Microsoft Excel Hilfe
    Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben: Hallo zusammen, da ich ein absoluter Neuling im VBA-Editor in Excel bin, möchte ich hier um Hilfe bitten. Mein Problem besteht darin, dass ich einzelne Zellen in Tabellenblättern nur für...
  6. (Makro) Bestimmte Zellen auswählen und kopieren

    in Microsoft Excel Hilfe
    (Makro) Bestimmte Zellen auswählen und kopieren: Hi, ich hänge etwas in der Luft, da mir die zündende Idee fehlt. Ich möchte in einer Tabelle die beschriebenen Zellen, per Makro auswählen lassen und in eine neue Mappe kopieren....
  7. Zellen mit bestimmter Formatierung mit Makro zählen

    in Microsoft Excel Hilfe
    Zellen mit bestimmter Formatierung mit Makro zählen: Hallo, wir haben im Büro einen Urlaubsplaner in Excel realisiert. Das heisst, eine einfaches Arbeitsblatt mit einem Kalender. Jeder der Kollegen markiert seine Urlaubstage mit seiner Farbe....
  8. Makro starten durch bestimmte Zahl in einer Zelle?WENN?

    in Microsoft Excel Hilfe
    Makro starten durch bestimmte Zahl in einer Zelle?WENN?: Schönen guten Morgen! Ich habe folgendes Problem: Ich habe zwei Makros aufgezeichnet, die jeweils eine Grafik in einer bestimmten Farbe auf einem Tabellenblatt erscheinen lassen. In einer...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden