Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
204to208
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
204to208
204to208
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

DELETE sperren

DELETE sperren
22.01.2003 16:58:48
Franz W.
Hallo Fachleute,

gibt es die Möglichkeit, für eine Mappe die normale Entfernen-Taste der Tastatur zu sperren. Hintergrund: Der Bereich soll zusammenhängend bleiben, Leerzeilen bringen alles durcheinander. Ich habe deshalb zum Löschen von Datensätzen einen Löschbutton mit eigenen Code eingerichtet. Und darum wäre es nützlich, wenn sich das Löschen über die Tastatur sperren ließe. Geht sowas?

Vielen Dank im Voraus

Gruß
Franz


25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: DELETE sperren
22.01.2003 17:32:48
Chris
Hallo Franz

Kannst du nicht den Blattschutz aktivieren und im Makro des Löschbutton einfach zuerst entsperren und anschliessend wieder sperren.

Gruss
Chris

Re: DELETE sperren
22.01.2003 17:59:51
Franz W.
Hallo Chris,

danke für Deine Antwort, das geht aber leider nicht, weil: in den 2 Spalten B und C sind die Daten, die mit DELETE nicht gelöscht werden dürfen. Alle andern Spalten habe ich total gesperrt, d.h. dass sie nicht einmal selektiert werden können. Das geht aber nur mit gesperrten ZEllen. Wenn ich nun auch die Spalten B und C sperre, dann können sie nicht mehr ausgewählt werden. Das muss aber gehen.

Weiß schon, ist ein bisschen doof. Muss mir vielleicht einen anderen Ansatz überlegen.

Danke und Gruß
Franz

Anzeige
Re: DELETE sperren
22.01.2003 18:46:01
Chris
Hallo Franz

Hatte soeben eine Idee.

Über eine Hilfszelle, im Beispiel A1, schreibst du den Wert aus der Zelle, die selektiert wird. Mit einem Worksheet_Change Ereignis überschreibst du den Wert, wenn jemand versucht zu überschreiben. Hoffe du verstehst was ich mein.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 2 Or Target.Column = 3 Then
Cells(Target.Row, Target.Column) = Range("A1")
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Column = 2 Or Target.Column = 3 Then
Range("A1") = Cells(Target.Row, Target.Column)
End If
End Sub


Gruss
Chris

Anzeige
Re: DELETE sperren
22.01.2003 19:33:14
Franz W.
Hallo Chris,

danke für Deinen Vorschlag, werde ich probieren. Ich hatte aber grade eine mögliche andere Lösung, dazu weiß ich aber etwas nicht: gibt es die Möglichkeit, ein Makro automatisch auszulösen beim Verlassen einer Zelle? Wenn ja, wie und wohin müsste da was geschrieben werden?

Gruß
Franz

P.S.: Sorry, dass ich so langsam antworte, aber ich schaff's nicht das Ding abzuschicken. Soviel los im Netz...???

Re: DELETE sperren
22.01.2003 19:55:17
Franz W.
Hallo Chris,

klappt leider nicht. Die Variante setzt meine Lösch- und Dateneinfügroutine außer Kraft. Da müsste ich alles ändern (wie gesagt: anderer Ansatz?!?)

Trotzdem und danke

Gruß
Franz

Anzeige
Re: DELETE sperren
22.01.2003 21:33:57
L.Vira
Zu welchem Zweck müssen die Spalten auswählbar sein?
Deine Frage ist genau richtig!!
23.01.2003 07:39:02
Franz W.
Hallo L.Vira,

danke für Deine Antwort und Deine Frage ist genau richtig: ist muss noch was dazulernen, dann ist zumindest die Hälfte gelöst: die Spalten (Spalte A: Name, Spalte B: Geburtsdatum) müssen auswählbar sein aus zwei Gründen:

1. zum Eintragen neuer Sätze: per VBA füge ich neue Zeilen in den Breich ein, in die neuen Zellen werden dann die Eingaben gemacht. Darum meine Frage, ob es möglich ist ein Makro automatisch bei Verlassen einer Zelle zu starten. Dann könnte man die ZEllen nach den Eintrag der Daten automatisch sperren. Aber da muss ich jetzt mal lernen, wie man die neuen Daten auch über eine Eingabemaske aufnehmen und dann per VBA eintragen kann. Dazu müssten die Spalten dann nicht mehr auswählbar sein. Wäre dann gelöst.

2. zum Löschen von Datensätzen: dazu wird der zu löschende Eintrag markiert und dann mit Button/VBA so gelöscht, dass der Bereich sauber erhalten bleibt. Dazu habe ich noch keine Idee

Gruß
Franz

Und überhaupt ist das ganze Ding nicht so wichtig, es handelt sich nur um einen Geburtstagskalender! Er dient mir nur zum Lernen/Üben/Ausprobieren. Und drauf gekommen bin ich nur, weil jemand den auch noch haben wollte, und da wollte ich ihn um Fehler auszuschalten ein bisschen sauberer aufbauen, damit er ihn sich nicht ruiniert.





Anzeige
Re: Deine Frage ist genau richtig!!
23.01.2003 10:35:29
Chris
Hallo Franz

Ein bischen verstrickt die ganze Sache. Die Idee mit der Eingabemaske ist sicherlich sinnvoll. Als Tip, schau dir mal auf der Herber Seite unter FAQ den VBA Workshop an.

Gruss
Chris

Re: Deine Frage ist genau richtig!!
23.01.2003 10:54:33
Franz W.
Hallo Chris,

danke für die Antwort, den Workshop werd ich mir mal anschaun, melde mich dann wieder. Trotzdem auch noch mal ganz allgemein die Frage: ist es möglich ein Makro automatisch starten zu lassen beim Verlassen einer Zelle?

Vielen Dank und Gruß
Franz

Re: Deine Frage ist genau richtig!!
23.01.2003 11:35:33
Chris
Hallo Franz

Es gibt die Ereignisprozedur Worksheet_SelectionChange, d.h. das Makro wird ausgelöst, sobald eine neue Zelle selektiert wird.

Alt + F11, links Doppelklick auf Arbeitsblatt, neues Fenster öffnet sich, links oben Dropdown auf Worksheet, rechts oben auf SelectionChange.

z.B.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
MsgBox (ActiveCell.Address)
End Sub

Dieses Makro gibt die Zellenadresse der selektierten Zelle aus.

Problem ist, dass es kein Ereignis gibt, das speziell auf das VERLASSEN der Zelle reagiert. Sagen wir du wechselst von B1 nach B2, gibt obiges Makro die Zelle B2 aus. Scheinbar willst du aber die Zelle B1, welche du verlassen hast.

Über eine Hilfszeile, im nachstehenden Beispiel A1, gibst du die selektierte Zelle in Feld B1 ein. Wenn du nun nach B2 wechselst, dann kannst du aus A1 die ursprüngliche Zellenadresse (in diesem Fall B1) abholen, ein Makro ausführen und anschliessend die Zelle A1 mit der neuen Zellenadresse (B2) updaten.

z.B.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
MsgBox (Range("A1"))
Range("A1") = ActiveCell.Address
End Sub

Gruss
Chris

Anzeige
Re: Deine Frage ist genau richtig!!
23.01.2003 12:15:42
Chris
PS: Wenn du den Blattschutz aktivierst, kannst du die Zelle ja trotzdem noch selektieren?!
Ja das hilft weiter...
23.01.2003 12:44:06
Franz W.
Hallo Chris,

danke für den Tipp, damit kann ich was anfangen, dazu habe ich schon eine Idee, auch ohne Hilfszelle: die nächste Zelle ist die mit der Jahreszahl. Das ist auch die einzige Zelle, die nicht geschützt sein darf, weil sonst ein Drehschalter für die Jahreszahl nicht mehr greift. Da kann ich Deine Lösung bestens einsetzen. Super, mache mich drüber.

Das andere hab ich über InputBox versucht, was beim Namen auch klappt. Nur mit dem Datum habe ich Schwierigkeiten, weil es eine Variable As Date für die InputBox anscheinend nicht gibt.

Danke und Gruß
Franz

Anzeige
Re: Ja das hilft weiter...
23.01.2003 13:10:31
Chris
Hallo Franz

Versteh das Problem mit dem Datum nicht ganz...

Dim datum1 As Date
datum1 = InputBox("Datum?")
MsgBox (datum1)

Kann es sein, dass du die Variable "Datum" benannt hast? Datum ist vermutlich in der deutschen Version (benutze E, deshalb konnte ich nicht testen) ein geschützter Begriff, den du nicht als Variable benutzen solltest.

Gruss
Chris

Sorry, da lerne ich erst noch
23.01.2003 14:38:16
Franz W.
Hallo Chris,

danke, ja das Eintragen klappt auch, nur wenn ich OK klicke ohne dass ein Datum angegeben ist oder wenn ich ABBRECHEN drücke, gibts die Meldung "Typen unverträglich".

Sub EingDat1()
Dim x As Date
x = InputBox("Geburtsdatum eintragen... ?", "Geburtsdatum eingeben")
If x = 0 Then
Exit Sub
Else
[B1].Value = x
End If
End Sub

Dachte, es läge an der Variablen. Muss aber wohl an If x = 0 Then liegen, krieg ich noch raus.

Danke und Gruß
Franz

Kann leider nicht schneller antworten, mein Job ist nur sehr wenig am PC...

Anzeige
Re: Sorry, da lerne ich erst noch
23.01.2003 14:59:11
Franz W.
Hallo Chris,

habe die Fehler jetzt mal mit On Error Resume Next umschifft. Weiß zwar nicht ob's die feine Englische ist, hilft aber.

Gruß
Franz

Vielen Dank
23.01.2003 17:05:33
Franz W.
Hallo Chris,

hab ganz vielen Dank, hast mir sehr viel geholfen, hab ne Menge dazugelernt. Das mit der Eingabe hab ich jetzt über zwei aufeinanderfolgende InputBoxes gelöst. Geht zwar vielleicht eleganter, klappt aber bestens. Kann dadurch jetzt alle Spalten sperren. Muss jetzt halt meine Löschroutine anders gestalten. Hab auch schon eine Idee dazu.

Vielen Dank und herzliche Grüße
Franz



Anzeige
Re: Sorry, da lerne ich erst noch
23.01.2003 19:15:17
Chris
Hallo Franz

Bins nochmal... leider etwas spät, aber mein Internet war den ganzen Nachmittag futsch...

so sollte es gehen:

Dim x As Date
x = Application.InputBox("Geburtsdatum eintragen... ?", "Geburtsdatum eingeben")
If x = 0 Then
Exit Sub
Else
[B1].Value = x
End If


Und das ganze noch leicht ausgebaut:

Dim x As Date
On Error GoTo errorhandler
start:
x = Application.InputBox("Geburtsdatum eintragen... ?", "Geburtsdatum eingeben")
If x = 0 Then
Exit Sub
Else
[B1].Value = x
End If
Exit Sub
errorhandler:
MsgBox ("Fehler: Überprüfen Sie das Datumsformat.")
GoTo start


Gruss
Chris

Anzeige
Re: Sorry, da lerne ich erst noch
23.01.2003 19:40:39
Franz W.
Hallo Chris,

vielen Dank für Deine Antwort. So ist es natürlich viel sauberer geschrieben, hab zwar auch mit solchen Anweisungen rumprobiert, war aber nicht erfolgreich. Über eine kleine Macke bin ich allerdings doch noch gestoßen:

Keinen Eintrag machen und OK klicken ist ein Error und er kommt mit der MsgBox und er springt wieder nach oben. Erdreistet man sich dann sogar noch ein zweites Mal ohne Eintrag OK zu klicken, dann kommt sogar der Debugger mit der Meldung "Typen unverträglich" und markiert ist die Zeile

x = Application.InputBox("Geburtsdatum eintragen... ?", "Geburtsdatum eingeben")

Liegt das vielleicht doch an der Zeile "If x = 0 Then" ? Statt 0 "" zu schreiben ändert auch nix. Ich finde es nicht raus.

Gruß
Franz

Re: Sorry, da lerne ich erst noch
23.01.2003 20:53:42
Chris
Hallo Franz

Das hat natürlich was... ist auch nicht ganz sauber sowas über "on error" abzufangen.

Nur bin ich jetzt mit der eigentlichen Lösung fast verzweifelt, da ich normalerweise mit der Englischen Version arbeite, kommt bei Abbruch üblicherweise ein "False" zurück, nur bin ich jetzt and der Deutschen Version, wo ein "Falsch" zurück kommt... aber anyway :-)

Dim x As String

start:

x = Application.InputBox("Geburtsdatum eintragen... ?", "Geburtsdatum eingeben")
If x = "" Then
MsgBox ("Es wurde kein Datum angegeben.")
GoTo start
End If

If IsDate(x) = True Then
[B1].Value = x
Exit Sub
End If

If x <> "Falsch" Then
MsgBox ("Fehler: Überprüfen Sie das Datumsformat.")
GoTo start
End If


Gruss
Chris

Nein, leider........
23.01.2003 21:30:38
Franz W.
Hallo Chris,

das haut leider auch nicht, weil er jetzt das Datum genau in der Form in die Zelle schreibt, in der man sie eingibt (also z.B. 28,8,55) und er kümmert sich nicht mehr um die Formatierung der Zelle (wie zum Beispiel: TT. MMMM JJJJ), die bleibt unberücksichtigt. Ich nehme an es liegt an Dim As String. Wenn ich's aber mit Dim As Date versuche, kommt der Debugger wieder...

Du brauchst Dich aber wirklich nicht weiter bemühen (auch wenn ich das ganz toll finde), weil wie ich oben geschrieben habe, habe ich ja eine funktionierende Lösung mit der normalen InputBox gefunden.

Gruß
Franz

Früchte der Arbeit
23.01.2003 22:17:00
Franz W.
Hallo Chris,

hier das Ergebnis, das ich ohne Deine Hilfe so nicht hingekriegt hätte:

ich habe alle Zellen außer A1, in der das Jahr steht, gesperrt und damit bei geschütztem Blatt unauswählbar gemacht und zwar mit

Private Sub Worksheet_Activate()
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

Das dies nur bei geschütztem Blatt diese Zellen sichert, kann man nun über VBA einfügen und löschen: Über InputBox Namen und Datum aufnehmen, Blatt entschützen und einfügen. Zum Löschen auf Nachfrage Blatt entschützen, und nach dem Löschen gleich über VBA wieder schützen. Klappt bestens, könnt nicht besser sein (wahrscheinlich schon für Euch Cracks, aber für mich tut es erstmal)!

Danke noch mal für Deine tolle Hilfe und schönen Abend noch

Gruß
Franz

Re: Nein, leider........
24.01.2003 17:03:42
Chris
Hallo Franz

Kann ich natürlich trotzdem nicht auf mir sitzen lassen, auch wenn die Antwort erneut mit einiges Verspätung kommt :-)

[B1].Value = Format(x, "dd.mm.yyyy")

Gruss
Chris

So einfach...
24.01.2003 20:40:20
Franz W.
...wenn man's weiß

Hallo Chris,

danke so passt's. Hab zwar auch ein bisschen in der Richtung probiert, hab aber nie die richtige Schreibweise erwischt. Und jetzt find ich beim besten Willen nichts mehr auszusetzen, so sehr ich auch suche ;-)))

Danke, schönen Abend und schönes Wochenende
Franz

Einmal noch...
25.01.2003 10:30:57
Franz W.
Hallo Chris,

nur für den Fall, dass Du noch mal Lust haben solltest "auf Deutsch zu denken", hätt ich noch eine Frage. Ich denke zwar dran, das ganze über eine Userform zu lösen, da weiß ich noch zu wenig, aber so wie ich das bis jetzt verstehe, müsste es da ja möglich sein beide Angaben - Name und Datum - in einer Box einzugeben. Schaue ich mir als nächstes an. Aber trotzdem hätte ich gerne noch das alte kapiert und darum geht's: das mit der Datumseingabe geht ja jetzt bestens. ABer wenn ich das mit den Namen versuche, gibt's noch einen Fehler. Der Code:

Sub eingname1()
Dim varRueckfrage As String
'On Error Resume Next

start:
varRueckfrage = Application.InputBox("Welcher Name soll eingegeben werden?", _
"Namen eingeben")
If varRueckfrage = "" Then
MsgBox ("Es wurde kein Name angegeben.")
GoTo start
Else
[A1].Value = varRueckfrage
End If
End Sub

Wenn ein Name eingegeben wird, ist alles bestens. Wenn ich aber ABBRECHEN drücke, schreibt er "FALSCH" in die Zelle. Alles On Error GoTo irgendwas... bringt nix (zumindest meine Versuche!!). Selbst On Error Resume Next änder nixxxx. Ohne den Sprung zurück wenn nichts eingegeben ist, würde er sogar in diesem Fall "FALSCH" reinschreiben! Ich komm nicht drauf. Wenn's Dich reizt, wenn nicht auch okay :-))

Danke und Grüße
Franz



Re: Einmal noch...
25.01.2003 22:58:06
Franz W.
Hallo Chris,

danke, das mit der Namenseingabe ist gelöst. Habe inzwischen den entscheidenden Tipp bekommen. Vielen Dank

Gruß
Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige