Office: (Office 2013) VBA und Makro behindern sich

Helfe beim Thema VBA und Makro behindern sich in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, ich habe folgende Problem: Ich habe einer Tabelle folgendes VBA geschrieben: Private Sub Worksheet_Change(ByVal Target As Range) If... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Naddus0207, 16. November 2016.

  1. Naddus0207 Erfahrener User

    VBA und Makro behindern sich


    Hallo,

    ich habe folgende Problem:

    Ich habe einer Tabelle folgendes VBA geschrieben:
    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells(1).Address(False, False) = "I11" Then
            If Target = 2 Then
                ActiveSheet.Unprotect ("123")
                Range("C12").Value = "A"
                Range("C13").Value = "B"
                Range("B12").Value = 1
                Range("B13").Value = 2
                Range("B14:D24").Select
                Selection.ClearContents
                Range("D12:D13").Locked = False
                Range("D12").Select
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "I11" Then
            If Target = 2 And Range("D12") <> "" And Range("D13") <> "" Then
                ActiveSheet.Unprotect ("123")
                Range("D25").Locked = False
                Range("D25").Select
                ActiveSheet.Protect ("123")
            End If
        End If
    End Sub
    Dann habe ich einem Button folgendes Makro zum Löschen zugewiesen:

    Code:
    Sub Delete()
        ActiveSheet.Unprotect ("123")
        Range("B12:D24,I11,D25,D29,D30,F29,F30").Select
        Selection.ClearContents
        Range("B12:B24,C12:C24,D12:D24,I11,D25,D29,D30,F29,F30").Select
        Selection.Locked = True
        ActiveSheet.Protect ("123")
    End Sub
    Das Problem ist folgendes, das VBA läuft bis zum 1. Schritt einwandfrei Das Löschen und Zellschützen geht auch einwandfrei. Aber der 2. Schritt des VBA wird nicht ausgeführt, D25 entsperrt sich nicht, wenn D12 und D13 nicht leer sind.

    Entferne ich wiederum bei dem Makro die folgende Zeile:
    Code:
        Range("B12:B24,C12:C24,D12:D24,I11,D25,D29,D30,F29,F30").Select
        Selection.Locked = True
    läuft der VBA Code ohne Probleme durch, aber beim Löschen wird der Schutz der Zellen nicht gesetzt.

    Von Beginn an sind alle Zellen des Blattes geschützt und I11 wird per Startbutton entsperrt.

    Weiß jemand einen Rat, warum das ganze nicht zusammen funktioniert?
     
    Naddus0207, 16. November 2016
    #1
  2. BoskoBiati Erfahrener User
    Hallo,

    Das kann nicht funktionieren, da das Makro zuerst die erste Bedingung durchläuft, in der dann D12 ausgewählt. somit ist dann D12 das Target und nicht mehr I11!!!!

    So sollte es gehen:

    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("I11")) Is Nothing Then Exit Sub
            If Target = 2 Then
                ActiveSheet.Unprotect ("123")
                Range("C12").Value = "A"
                Range("C13").Value = "B"
                Range("B12").Value = 1
                Range("B13").Value = 2
                Range("B14:D24").ClearContents
                Range("D12:D13").Locked = False
                Range("D12").Select
                ActiveSheet.Protect ("123")
            End If
    
            If Target = 2 And Range("D12") <> "" And Range("D13") <> "" Then
                ActiveSheet.Unprotect ("123")
                Range("D25").Locked = False
                Range("D25").Select
                ActiveSheet.Protect ("123")
            End If
        
    End Sub
     
    Zuletzt bearbeitet: 17. November 2016
    BoskoBiati, 17. November 2016
    #2
  3. Naddus0207 Erfahrener User
    Hallo Edgar,

    danke für die Antwort, wenn ich deinen Code nehme bekomme ich aber "Laufzeitfehler 13 Typen unverträglich" angezeigt und das erste IF Target = 2 wird markiert beim Debuggen?
     
    Zuletzt bearbeitet: 17. November 2016
    Naddus0207, 17. November 2016
    #3
  4. Naddus0207 Erfahrener User

    VBA und Makro behindern sich

    Also der Laufzeitfehler wird mir immer dann angezeigt, wenn ich den Button Löschen betätige.
     
    Naddus0207, 17. November 2016
    #4
  5. chakko Erfahrener User
    So auf die Schnelle, aus der Hüfte geschossen:
    Der Typenkonflikt besteht m.E. darin, dass die Variable Target in dem Sub als Range deklariert ist. 2 ist aber kein Range, sondern eine Zahl.

    Wenn 2 der Wert der entsprechenden Zelle ist, dann müsstest Du vielleicht mit Value von Target arbeiten.

    Das Problem tritt m.E. nur beim Löschen auf, weil dann das Worksheet gechanged und somit das Ereignis augelöst wird, das "Private Sub Worksheet_Change" aufruft.

    Wie gesagt, auf die Schnelle, ohne zu testen...
     
    Zuletzt bearbeitet: 18. November 2016
  6. Naddus0207 Erfahrener User
    Also so:

    If Target.Value = 2?
     
    Naddus0207, 18. November 2016
    #6
  7. BoskoBiati Erfahrener User
    Hallo,

    der Fehler rührt wohl daher, dass mehrere Zellen ausgewählt sind. Daher gibt es kein eindeutiges Target!

    Das muß so sein, weil das Makro so definiert ist (von MS!)

    Value ist die Standardeinstellung. Es wird automatisch der Inhalt abgefragt.

    Ändere es mal so:

    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("I11")) Is Nothing or Target.count > 1 Then Exit Sub
    Application.EnableEvents=false
            If Target = 2 Then
                ActiveSheet.Unprotect ("123")
                Range("C12") = "A"
                Range("C13") = "B"
                Range("B12") = 1
                Range("B13") = 2
                Range("B14:D24").ClearContents
                Range("D12:D13").Locked = False
                Range("D12").Select
                ActiveSheet.Protect ("123")
            End If
    
            If Target = 2 And Range("D12") <> "" And Range("D13") <> "" Then
                ActiveSheet.Unprotect ("123")
                Range("D25").Locked = False
                Range("D25").Select
                ActiveSheet.Protect ("123")
            End If
    Application.EnableEvents=True   
    End Sub
    Sub Delete bringt bei mir schon einen Fehler, weil Delete ein reservierter Name für einen VBA-Befehl ist:

    Code:
    Sub Loesche()
        ActiveSheet.Unprotect ("123")
        With Range("B12:D24,I11,D25,D29:D30,F29:F30")
            .ClearContents
            .Locked = True
        End With
        ActiveSheet.Protect ("123")
    End Sub
    Interessant ist, dass Du mit dem Lösch-Makro die Zelle I11 sperrst, somit kann da keine Eingabe mehr erfolgen!
     
    Zuletzt bearbeitet: 21. November 2016
    BoskoBiati, 21. November 2016
    #7
  8. Naddus0207 Erfahrener User

    VBA und Makro behindern sich

    Hallo,

    Probier ich gleich mal aus.

    Ja mit dem Lösch-Button werden alle Zellen gesperrt. I11 entsperrt sich dann mittels Start Button.
     
    Naddus0207, 21. November 2016
    #8
  9. Naddus0207 Erfahrener User
    "Sub Delete bringt bei mir schon einen Fehler, weil Delete ein reservierter Name für einen VBA-Befehl ist"

    In meiner Tabelle habe ich es auch nicht mit Sub Delete bezeichnet, sondern noch einen Zusatz hinten dran. Aus dem Namen kann der Fehler also nicht resultieren.
     
    Naddus0207, 21. November 2016
    #9
  10. Naddus0207 Erfahrener User
    Der Code bewirkt leider nichts. Wenn ich in I11 2 eingebe, werden weder in B12,B13,D12,D13 die Werte reingeschrieben, noch wird D12 entsperrt. Aber ich bekomme keine Fehlermeldung - es passiert einfach nichts.
     
    Zuletzt bearbeitet: 21. November 2016
    Naddus0207, 21. November 2016
    #10
  11. Naddus0207 Erfahrener User
    Also ich habe die Tabelle noch einmal geschlossen und neu geöffnet. Jetzt funktioniert

    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("I11")) Is Nothing or Target.count > 1 Then Exit Sub
    Application.EnableEvents=false
            If Target = 2 Then
                ActiveSheet.Unprotect ("123")
                Range("C12") = "A"
                Range("C13") = "B"
                Range("B12") = 1
                Range("B13") = 2
                Range("B14:D24").ClearContents
                Range("D12:D13").Locked = False
                Range("D12").Select
                ActiveSheet.Protect ("123")
            End If
    
            If Target = 2 And Range("D12") <> "" And Range("D13") <> "" Then
                ActiveSheet.Unprotect ("123")
                Range("D25").Locked = False
                Range("D25").Select
                ActiveSheet.Protect ("123")
            End If
    Application.EnableEvents=True   
    End Sub
    nach wie vor nur der erste Teil des Codes. Wenn ich in D12 und D13 etwas eintrage, wird D25 nicht entsperrt? Aber eine Fehlermeldung erscheint auch nicht mehr.
     
    Naddus0207, 21. November 2016
    #11
  12. Naddus0207 Erfahrener User
    Ok, jetzt hab ich heraus gefunden wie es nach diesem Code funktioniert. Also ich trage in I11 2 ein - somit läuft der 1. Teil des Codes durchg. Trage ich dann in D12 und D13 etwas ein, wird nach der Eingabe in D13 Enter gedrückt, wird I11 angewählt. Wenn ich dann hier noch einmal 2 eingebe, entsperrt sich D25. Das kommt der Sache schon etwas näher. Allerdings hätte ich es gerne so, dass nachdem man etwas in D13 eingetragen hat, D25 direkt entsperrt und ausgewählt wird - ohne den Umweg über I11 und die erneute Eingabe von 2.

    Ist das auch möglich?
     
    Naddus0207, 21. November 2016
    #12
  13. Naddus0207 Erfahrener User

    VBA und Makro behindern sich

    Ok,

    ich hab das Target mal varriert und die Eingabe um 3 erweitert. Dann komme ich bisher mit diesem Code hin:

    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells(1).Address(False, False) = "I11" Then
            If Target = 2 Then
                ActiveSheet.Unprotect ("123")
                Range("C12").Value = "A"
                Range("C13").Value = "B"
                Range("B12").Value = 1
                Range("B13").Value = 2
                Range("B14:D24").Select
                Selection.ClearContents
                Range("D12:D13").Locked = False
                Range("D12").Select
                ActiveSheet.Protect ("123")
            End If
            If Target = 3 Then
                ActiveSheet.Unprotect ("123")
                Range("C12").Value = "A"
                Range("C13").Value = "B"
                Range("C14").Value = "C"
                Range("B12").Value = 1
                Range("B13").Value = 2
                Range("B14").Value = 3
                Range("B15:D24").Select
                Selection.ClearContents
                Range("D12:D14").Locked = False
                Range("D12").Select
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "D13" Then
            If Target <> "" And Range("I11") = 2 And Range("D12") <> "" Then
                ActiveSheet.Unprotect ("123")
                Range("D25").Locked = False
                Range("D25").Select
                ActiveSheet.Protect ("123")
            End If
        End If
    If Target.Cells(1).Address(False, False) = "D14" Then
            If Target <> "" And Range("I11") = 3 And Range("D13") <> "" And Range("D12") <> "" Then
                ActiveSheet.Unprotect ("123")
                Range("D25").Locked = False
                Range("D25").Select
                ActiveSheet.Protect ("123")
            End If
        End If
    End Sub
    Dann klappt das auch mit dem Löschen und dem Zellschutz.

    Mal schauen, wie es weiter funktioniert. In I11 soll der Wert zw. 2 und 13 variieren.
     
    Zuletzt bearbeitet: 21. November 2016
    Naddus0207, 21. November 2016
    #13
  14. BoskoBiati Erfahrener User
    Hallo,

    schön, dass Du das auch mal mitteilst.


    Bei mir funktioniert er. Ich kenne aber Deine Tabelle nicht. Ich tippe mal auf Text-formatierte Zellen!


    Vorher:

    Arbeitsblatt mit dem Namen 'Tabelle2'
    *ABCDEI
    11555552
    12555555
    13555555
    14555555
    15555555
    16555555
    17555555
    18555555
    19555555
    20555555
    21555555
    22555555
    23555555
    24555555
    25555555
    26555555
    27555555
    Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
    Nachher:

    Arbeitsblatt mit dem Namen 'Tabelle2'
    *ABCDEI
    11555552
    1251A555
    1352B555
    145***55
    155***55
    165***55
    175***55
    185***55
    195***55
    205***55
    215***55
    225***55
    235***55
    245***55
    25555555
    Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
     
    Zuletzt von einem Moderator bearbeitet: 30. November 2020
    BoskoBiati, 21. November 2016
    #14
  15. Beverly
    Beverly Erfahrener User
Thema:

VBA und Makro behindern sich

Die Seite wird geladen...
  1. VBA und Makro behindern sich - Similar Threads - VBA Makro behindern

  2. VBA-Makro zur Zellenformatierung Syntax probleme

    in Microsoft Excel Hilfe
    VBA-Makro zur Zellenformatierung Syntax probleme: Hallo zusammen, ich möchte per Makro Zellen formatieren. Tausender-Trennzeichen 3 Nachkommastellen Positive Zahlen Schwarz Negative Zahlen Rot Nullwert mit - Hinter der Zahl soll noch eine...
  3. Speichern mit dem Titel der Zelle A2

    in Microsoft Excel Hilfe
    Speichern mit dem Titel der Zelle A2: Moin moin, Ich habe per Makro einen Arbeitsablauf aufgezeichnet der soweit auch funktioniert. Dieser Endet jedoch im "Speichern Unter" Fenster, welches durch das Klicken von "Drucken als PDF"...
  4. Datentabelle per VBA Makro durch Kopieren und Einfügen einer Kopfzeile aufteilen

    in Microsoft Excel Hilfe
    Datentabelle per VBA Makro durch Kopieren und Einfügen einer Kopfzeile aufteilen: Hallo Zusammen, mein erster Beitrag hier, also schon mal Sorry im Voraus, wenn unvollständig beschrieben *:)* Ich habe das Forum schon nach einem brauchbaren Lösungsansatz durchsucht, bin aber...
  5. Makro/VBA Text in Zahl umwandeln

    in Microsoft Excel Hilfe
    Makro/VBA Text in Zahl umwandeln: Hallo liebes Forum, ich habe eine Frage und bin bisher leider nicht so wirklich fündig geworden :oops: Aber ich bin mir sicher, dass ich hier Hilfe bekomme *;)* In meiner Arbeitsdatei sind...
  6. VBA Makro Daten kopieren

    in Microsoft Excel Hilfe
    VBA Makro Daten kopieren: Hi zusammen, ich bräuchte eure Hilfe denn aktuell bin ich am verzweifeln: Ich brauche ein Makro für das deutsche Excel. Es gibt 2 verschiedene Arbeitsmappen mit jeweils einem aktiven...
  7. per VBA Zeile in der Liste löschen

    in Microsoft Excel Hilfe
    per VBA Zeile in der Liste löschen: Hallo Leute, ich brauche eure Hilfe. In einer Liste sollen regelmäßig Einträge vorgenommen werden. Hierzu müssen die Felder Name, Nr. alt, Stück, Bezeichnung, Datum, Kst, Palettennummer,...
  8. Zeilen mit bestimmten Wert in andere Tabelle (VBA Makro)

    in Microsoft Excel Hilfe
    Zeilen mit bestimmten Wert in andere Tabelle (VBA Makro): Hallöchen, ich stehe aktuell vor folgendem Problem: Wir haben ein Excel Makro, das über die Zeiterfassung alle Mitarbeiter und ihre Stunden in verschiedenen Positionen auflistet. Eine abgespeckte...
  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