Anzeige
Archiv - Navigation
1840to1844
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Worksheet_BeforeDoubleClick problem
05.08.2021 11:46:44
Norbert
Hallo
habe ein Problem und hätte bitte eure Hilfe gebraucht
Wenn ich mit private sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) arbeite und die Blätter geschützt sind und während des ausgeführten Makros die Blätter "aufgesperrt" werden, es in eine anderes Blatt spring und dieses als Target nimmt.
Wenn Blätter nicht geschützt, ist das Problem nicht. Aber ohne Schutz will ich das Projekt nicht lassen.
Danke
mfg
Norbert

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Blattschutz_aus
Cancel = True
Dim i
'On Error GoTo ende
Blattschutz_aus
If Not Intersect(Target, Me.Range("A2:A1002")) Is Nothing Then  'Application.Intersect(Target, Me.Range("A2:A1002")) Is Nothing Then
'Sheets("Gesamtliste").Range("BY1").Value = Target.Address
'Sheets("Gesamtliste ").Select"
frm_Kalender.Show
'Blattschutz_aus
Alles_anzeigen_G   'hier wird die Gesamtliste nur neu sortiert
Else
End If
If Not Intersect(Target, Me.Range("B2:C1002")) Is Nothing Then   'Application.
UserForm3.Label3.Caption = Target.Column 'ActiveCell.Column
UserForm3.Label4.Caption = Target.Row 'ActiveCell.Row
UserForm3.Show
i = ActiveCell.Row
i_Aktive_row_ = ActiveCell.Row
If Range("A" & i).Value = "" Then
If Range("B" & i).Value = Range("C" & i).Value Then
If Range("H" & i).Value = 0 Then
If Range("D" & i).Value = "" Then
Alles_anzeigen_G ' Sortieren
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
If Not Application.Intersect(Target, Me.Range("D2:D1002")) Is Nothing Then
'aktuelles_Ziel = Target.Address
'MsgBox (aktuelles_Ziel)
UserForm2.Label1.Caption = ActiveCell.Column
UserForm2.Label2.Caption = ActiveCell.Row
UserForm2.Show
Else
End If
ende:
Blattschutz_ein
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
und warum....
05.08.2021 12:04:31
Werner
Hallo,
....ein neuer Beitrag zum gleichen Thema, statt im anderen Beitrag weiter zu machen?
Gruß Werner
und warum ...
05.08.2021 12:20:27
Rudi
lässt du Blattschutz_ein/aus über alle Blätter laufen?
Um die UF anzuzeigen musst du den Schutz nicht aufheben.
Gruß
Rudi
AW: und warum ...
05.08.2021 13:02:27
Norbert
Mir hat es in der Nacht das nicht angezeigt, das es zum Forum hinzugefügt wurde. Daher probierte es ich es noch einmal. Das habe ich übersehen.
Kann man eigentlich einen Beitrag / Thread löschen in diesem Forum?
Habe mit Eigenschaften herumgespielt und folgendes (Fett) hinzugefügt

Sheets("Gesamtliste").Protect Contents:=True, DrawingObjects:=False, UserInterfaceOnly:=True
Habe mehrere Varianten probiert. alle mit einer For each schleife und jedes direkt angesprochen.... beide mit dem selben Ergebnis.

Sub Blattschutz_ein()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'Dim Blatt As Worksheet
'For Each Blatt In ActiveWorkbook.Sheets
'    Blatt.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
'Next
Sheets("Gesamtliste").Protect Contents:=True, DrawingObjects:=False, UserInterfaceOnly:=True
Sheets("Druckvorschau").Protect Contents:=True, DrawingObjects:=False, UserInterfaceOnly:=True
Sheets("Übersicht").Protect Contents:=True, DrawingObjects:=False, UserInterfaceOnly:=True
Sheets("Optionen").Protect Contents:=True, DrawingObjects:=False, UserInterfaceOnly:=True
Sheets("Vorlagen").Protect Contents:=True, DrawingObjects:=False, UserInterfaceOnly:=True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
  • Um die UF anzuzeigen musst du den Schutz nicht aufheben.

  • Das weiss ich, aber das UF gibt werte in Tabellen zurück und z.B: Zeit Rechen Vorgänge habe ich mit Formel einfacher gefunden als in VBA und dann wieder in eine Listbox zu bekommen. Daher schreibt die Listbox click in eine Tabelle und die andere listbox aktualisiert wieder mit den Daten aus der Tabelle. Wie gesagt war für mich leichter. Und daher müssen die Tabellen offen sein. Aber mit den .Protect Contents:=True, DrawingObjects:=False, UserInterfaceOnly:=True geht es im Moment.
    Danke
    mfg
    Norbert
    Anzeige
    AW: und warum ...
    05.08.2021 14:22:34
    Werner
    Hallo,
    weshalb im Code mit einer Zeilenvariablen und ActiveCell rumhandtieren?
    Du hast doch alles was du brauchst in Target (Target.Row, bzw. Target.Column)
    
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Application.ScreenUpdating = False
    If Not Intersect(Target, Range("A2:A1002")) Is Nothing Then
    Cancel = True
    frm_Kalender.Show
    Alles_anzeigen_G
    End If
    If Not Intersect(Target, Range("B:C")) Is Nothing Then
    UserForm3.Show
    UserForm3.Label3.Caption = Target.Column
    UserForm3.Label4.Caption = Target.Row
    If Cells(Target.Row, "A") = "" Then
    If Cells(Target.Row, "B") = Cells(Target.Row, "C") Then
    If Cells(Target.Row, "H") = 0 Then
    If Cells(Target.Row, "D") = "" Then
    Alles_anzeigen_G
    End If
    End If
    End If
    End If
    End If
    If Not Intersect(Target, Range("D2:D1002")) Is Nothing Then
    UserForm2.Show
    UserForm2.Label1.Caption = Target.Column
    UserForm2.Label2.Caption = Target.Row
    End If
    End Sub
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    If Target.CountLarge = 1 Then
    If Target.Column = 1 Then
    Cells(Target.Row, "AN") = "o"
    If Target = "" Then
    Cells(Target.Row, "AN") = ""
    If Cells(Target.Row, "B") = Cells(Target.Row, "C") Then
    If Cells(Target.Row, "H") = 0 Then
    If Cells(Target.Row, "D") = "" Then
    Alles_anzeigen_G
    End If
    End If
    End If
    End If
    End If
    If Target.Column = 4 Then
    If Target = "Werkstatt" Then
    With Target.Interior
    .ColorIndex = 6
    .Pattern = xlSolid
    End With
    UserForm1.Show
    Else
    With Target.Interior
    .ColorIndex = xlNone
    .Pattern = xlSolid
    End With
    End If
    End If
    End If
    End SubPrivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Application.ScreenUpdating = False
    If Not Intersect(Target, Range("A2:A1002")) Is Nothing Then
    Cancel = True
    frm_Kalender.Show
    Alles_anzeigen_G
    End If
    If Not Intersect(Target, Range("B:C")) Is Nothing Then
    UserForm3.Show
    UserForm3.Label3.Caption = Target.Column
    UserForm3.Label4.Caption = Target.Row
    If Cells(Target.Row, "A") = "" Then
    If Cells(Target.Row, "B") = Cells(Target.Row, "C") Then
    If Cells(Target.Row, "H") = 0 Then
    If Cells(Target.Row, "D") = "" Then
    Alles_anzeigen_G
    End If
    End If
    End If
    End If
    End If
    If Not Intersect(Target, Range("D2:D1002")) Is Nothing Then
    UserForm2.Show
    UserForm2.Label1.Caption = Target.Column
    UserForm2.Label2.Caption = Target.Row
    End If
    End Sub
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    If Target.CountLarge = 1 Then
    If Target.Column = 1 Then
    Cells(Target.Row, "AN") = "o"
    If Target = "" Then
    Cells(Target.Row, "AN") = ""
    If Cells(Target.Row, "B") = Cells(Target.Row, "C") Then
    If Cells(Target.Row, "H") = 0 Then
    If Cells(Target.Row, "D") = "" Then
    Alles_anzeigen_G
    End If
    End If
    End If
    End If
    End If
    If Target.Column = 4 Then
    If Target = "Werkstatt" Then
    With Target.Interior
    .ColorIndex = 6
    .Pattern = xlSolid
    End With
    UserForm1.Show
    Else
    With Target.Interior
    .ColorIndex = xlNone
    .Pattern = xlSolid
    End With
    End If
    End If
    End If
    End Sub
    
    Ich habe die Zielzellen hier jetzt mit Cells(Target.Row, ....) angesprochen. Das ist für dich vielleicht leichter zu lesen/verstehen. Man könnte das auch über einen Offset regeln.
    Und dann im Workbook.Open noch diesen Code:
    
    Private Sub Workbook_Open()
    Dim Blatt As Worksheet
    For Each Blatt In ThisWorkbook.Worksheets
    Blatt.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, userinterfaceonly:=True
    Next
    End Sub
    
    Damit werden beim Öffnen der Datei alle Blätter mit einem Blattschutz versehen. Der Zusatz UserInterFaceOnly = True bewirkt, dass Änderungen durch Makros durchgeführt werden können, obwohl das Blatt geschützt ist. Somit brauchst du dann im weiteren Code nicht dauern den Blattschutz aufzuheben und anschließend wieder zu setzen.
    Teste mal.
    Gruß Werner
    Anzeige
    AW: und warum ...
    05.08.2021 23:55:11
    Norbert
    Danke für die Mühe....
    Es Funktioniert. Musste nur folgendes umdrehen. Und meine etwas "schlampige" Programmierung anpassen....
    
    UserForm2.Show
    UserForm2.Label1.Caption = Target.Column
    UserForm2.Label2.Caption = Target.Row
    
    zu
    
    UserForm2.Label1.Caption = Target.Column
    UserForm2.Label2.Caption = Target.Row
    UserForm2.Show
    
    weil es vorher in die label geschrieben werden muss.
    Mein grösstes Problem war eigentlich das mit dem Blattschutz. und das funktioniert jetzt.
    Danke
    Schöne Grüsse aus dem Innviertel Österreich
    Anzeige
    Gerne u. Danke für die Rückmeldung. o.w.T.
    06.08.2021 05:58:35
    Werner

    48 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige