Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1540to1544
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
Inhaltsverzeichnis

Laufzeitfehler1004

Laufzeitfehler1004
13.02.2017 11:22:36
Jens
Hallo,
ich habe ein Blatt, auf dem (1.)Änderungen nicht möglich sein sollen, aber die Zellen sollen (2.) anklickbar sein um eine "Worksheet_BeforeDoubleClick"-Routine zu starten und um (3.) die Zellposition feststellbar zu machen, damit ein anklickbares Makro damit weiterarbeiten/weiterrechnen kann.
Wegen den Punkten 2 und 3 erscheint mir ein Blattschutz nicht möglich.
Das Änderungen nicht möglich sind bzw. wieder rückgängig gemacht werden habe ich durch

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End Sub

erreicht.
Im Grunde bin ich glücklich, denn nun werden tatsächlich Änderungen rückgängig gemacht aber man kann trotzdem die Zellen anklicken, um in der o.g. "Worksheet_BeforeDoubleClick"-Routine eine Userform aufrufen zu können.
Man muss ja immer davon ausgehen, dass es User gibt, die irgendwelche Schwächen im Code suchen und der liegt hier leider im folgenden:
Wenn nun jemand eine Zelle ändert, aber diese noch nicht verläßt, wodruch die Change Eigenschaft noch nicht ausgelöst wurde und (!) nun durch einen Klick auf den eingefügten OptionButton das Makro startet, wirft XL in o.g. "Application.Undo" Zeile einen Laufzeitfehler 1004 aus.
Ich verstehe ja, dass XL nun ein Problem hat, da die Worksheets-Change Eigenschaft noch nicht ausgeführt wurde (sprich die Änderunge rückgängig gemacht wurde) und durch das Drücken des OptionButtons gleichzeitig ein Makro gestartet werden soll, aber ich habe keine Idee, wie ich das umgehen kann.
Irgendwelche Tipps?
Vielen Dank im vorraus!
Jens

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler1004
13.02.2017 11:56:14
onur
Hi,
Wenn du Selection_Change nimmst, kannst du auch die Zellen anklicken + Zellposition feststellen + Blattschutz aktivieren.
AW: Laufzeitfehler1004
13.02.2017 12:23:44
Werner
Hallo Jens,
wieso soll das nicht gehen? Beim Setzen des Blattschutzes kanns du doch auswählen, dass gesperrte Zellen ausgewählt werden können - das ist beim Setzen des Blattschutzes standardmäßig schon aktiviert.
Mit folgendem Code kannst du dann bei Doppelklick ein Makro aufrufen und die Target Zelle für die Weiterverwendung im aufgerufenen Code abfragen.
Code ins Modul des Tabellenblattes
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Call Modul1.Makro1(Target)
Cancel = True
End Sub
Code in ein allgemeines Modul
Public Sub Makro1(Target As Range)
MsgBox Target.Address
End Sub
Gruß Werner
Anzeige
Doppelklick
13.02.2017 12:33:07
Rudi
Hallo,
Mit folgendem Code kannst du dann bei Doppelklick ein Makro aufrufen
aber nur bei DK auf eine ungeschützte Zelle.
Ich würde es mit before_rightclick relisieren.
Gruß
Rudi
AW: Doppelklick
13.02.2017 13:00:20
Werner
Hallo Rudi,
verstehe ich jetzt nicht, bei mir geht das. Oder habe ich da was völlig falsch verstanden?
ich habe ein Blatt, auf dem (1.)Änderungen nicht möglich sein sollen, aber die Zellen sollen (2.) anklickbar sein um eine "Worksheet_BeforeDoubleClick"-Routine zu starten und um (3.) die Zellposition feststellbar zu machen, damit ein anklickbares Makro damit weiterarbeiten/weiterrechnen kann.
Wegen den Punkten 2 und 3 erscheint mir ein Blattschutz nicht möglich.

So wie ich das verstehe will Jens eigentlich das entsprechende Blatt mit Blattschutz gegen Änderungen schützen. Meint aber, dass das nicht geht, weil er dann das Doppelklickereignis im geschützten Blatt nicht auswerten kann. So wie ich das verstehe, will er mit dem Doppelklick im geschützten Blatt ein Makro starten und die Zelladresse die geklickt wurde dort weiterverarbeiten.
Oder bin ich da völlig auf dem falschen Dampfer.
Bei mir geht es. Ich habe Excel 2016 und weiß nicht, ob es mit 2013 nicht funktioniert.
Beispielmappe Blattschutz ohne Passwort.
https://www.herber.de/bbs/user/111440.xlsm
Gruß Werner
Anzeige
AW: Laufzeitfehler1004
13.02.2017 12:27:44
Rudi
Hallo,
Wenn nun jemand eine Zelle ändert, aber diese noch nicht verläßt, ...... nun durch einen Klick auf den eingefügten OptionButton das Makro startet....
das geht doch gar nicht.
XL befindet sich dann im Bearbeitungsmodus, in dem VBA nicht aktiv ist.
Gruß
Rudi
AW: Laufzeitfehler1004
13.02.2017 13:19:50
Jens
Da geht man nur kurz in die Mittagspause und hat nach der Rückkehr so gute Infos.
Danke @ all!
Zur Verdeutlichung: Auf meinem Blatt gibt es Zellen, die man gar nicht auswählen kann und welche, die man auswählen kann. Auf die auswählbaren Zellen kann man einen Doppelklick machen, wodurch eine Userform aktivert wird oder man wählt diese Zellen, durch einen einfachen Klick aus und kann dann, durch Klick auf einen OptionButton (ebenfalls auf dem Blatt) ein Makro starten.
Meine Auswertung Eurer Beiträge:
Was Rudi im 2 Beitrag schreibt, scheint der Knackpunkt zu sein. Wenn XL im Bearbeitungsmodus ist und ich klicke auf den OptionButton, führt das zu dem erwähnten Fehler. Das läßt sich, jetzt wo ich darauf achte, genau rekapitulieren.
Das führt dazu, dass Rudis 1. Vorschlag leider nichts bringt, denn auch wenn ich aus Doppelklick ein before-rightclick mache, kann man, wenn der böse User es will, den Fehler provozieren.
Somit neige ich dazu, es auf Werners Vorschlag hin zu machen. Eigentliche wollte ich ja ein Blatt, auf dem es Zellen gibt, die gar nicht angeklickt und andere, die zwar angeklickt aber trotzdem nicht verändert werden können, haben. (Was für ein doofer Satz )
Durch Werners Vorschlag inspiriert werde ich einen Blattschutz machen, bei dem auch gesperrte Zellen angewählt werden können und die Zellen, die ich "komplett sperren/nicht anwählbar" machen wollte, werde ich entsprechen separat abfangen (ist nur eine bestimmte Zeile).
Danke!
Jens
Anzeige
AW: Laufzeitfehler1004
13.02.2017 14:10:33
littletramp
Hallo Jens
Das Ganze klappt doch auch mit Blattschutz.
Und wenn du den Blattschutz per Code mit Argument UserInterfaceOnly:=True erstellst, so kannst du sogar per Code in geschützte Zellen schreiben, ohne das Blatt zu entschützen, was hier im Forum scheinbar noch nicht bekannt ist.
Ich habe dir eine Beispielmappe hochgeladen https://www.herber.de/bbs/user/111445.xlsm
Hier der Code in Tabelle1:
Option Explicit
Private Sub Worksheet_Activate()
' Blatt für Benutzer schützen, aber Änderungen
' im geschützten Blatt durch VBA-Code zulassen
Me.Protect Contents:=True, UserInterfaceOnly:=True
End Sub
Private Sub OptionButton1_Change()
If OptionButton1.Value Then
Msg "OptionButton1_Change -> aktiviert"
ActiveCell.Select
End If
End Sub
Private Sub OptionButton2_Change()
If OptionButton2.Value Then
Msg "OptionButton2_Change -> aktiviert"
ActiveCell.Select
End If
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Msg "Worksheet_BeforeDoubleClick"
Cancel = True   ' Verhindert Bearbeitungsmodus für Zelle
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Msg "Worksheet_SelectionChange"
End Sub
' Aufzurufende Prozedur
Private Sub Msg(MsgText As String)
Range("B1").Value = "Aktive Zelle: " & ActiveCell.Address
Range("B2").Value = MsgText
End Sub
Gruss Markus
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige