Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA: Wie überwache ich ob Befehl Ausschneiden/Cut ausgeführt wird?

117 views
Skip to first unread message

Ralf Rodemann

unread,
Dec 18, 2002, 9:13:02 PM12/18/02
to
Hallo,

da ich in meiner Datei Bezüge habe, die durch den Befehl "Ausschneiden"
verloren gehen, möchte ich dem Benutzer das durch einen entsprechenden
Warnhinweis mittteilen.
Wie überwache ich mit VBA ob das Ereignis "Ausschneiden" eintritt?
Eine akzeptable Alternative wäre es auch den Befehl "Ausschneiden" zu
deaktivieren.

Gruß,
Ralf


Bernd Held

unread,
Dec 19, 2002, 4:03:45 AM12/19/02
to
Hallo Ralf,

eine Möglichkeit, wäre den Befehl im Menü Bearbeiten auszuschalten. Das
würde beispielsweise über das folgende MAkro funktionieren:

Sub MenübefehleDeakt()
Dim ctrl As CommandBarControl

For Each ctrl In Application.CommandBars(1).Controls("Bearbeiten").Controls
If ctrl.Caption = "A&usschneiden" Then ctrl.Enabled = False
Next ctrl
End Sub

Viele Grüße
Bernd
MVP für Microsoft Excel
Jetzt neu: Excel-VBA in 21 Tagen unter http://held-office.de

"Ralf Rodemann" <ralf.r...@post.rwth-aachen.de> schrieb im Newsbeitrag
news:eEqqfPwpCHA.1376@TK2MSFTNGP12...

Ralf Rodemann

unread,
Dec 19, 2002, 7:50:19 AM12/19/02
to
Hallo Bernd,

danke für den Tip. Funktioniert so weit. Aber der Befehl "Ausschneiden"
taucht ja noch man im "recht Maustate"-Menü auf. Wie deaktiviere ich denn
Ausschneiden hier?

Ralf


Ralf Rodemann

unread,
Dec 19, 2002, 7:59:50 AM12/19/02
to
ganz vergessen:
zusätzlich müsste ich noch das Auschneiden/Einfügen per drag and drop
deaktivieren.

Ralf


Melanie Breden

unread,
Dec 19, 2002, 10:23:08 AM12/19/02
to
Hallo Ralf,

"Ralf Rodemann" schrieb:

ich habe versucht alle möglichen Varianten des "Ausschneidens" zu
unterbinden.
Sollte jemanden noch eine Möglichkeit einfallen, könnte man diese in den
Makros mit aufnehmen.

Kopiere folgende Prozeduren in den Codebereich von "Diese Arbeitsmappe"
deines Projektes:

'###########Diese Arbeitsmappe##############
Option Explicit

Private Sub Workbook_Activate()
Application.Run "AusschneidenVerhindern"
End Sub

Private Sub Workbook_Open()
Application.Run "AusschneidenVerhindern"
End Sub

Private Sub Workbook_Deactivate()
Application.Run "AusschneidenAktivieren"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Run "AusschneidenAktivieren"
End Sub

'####Ende#######Diese Arbeitsmappe##############


in ein allgemeines Modul folgende Prozeduren:

'###########Modul###########################
Option Explicit
Dim ctrl As CommandBarControl
Dim cmb As CommandBar

Private Sub AusschneidenVerhindern()

'Menü Auschneiden löschen


For Each ctrl In Application.CommandBars(1).Controls("Bearbeiten").Controls

If ctrl.Caption = "A&usschneiden" Then ctrl.Visible = False
Next ctrl

'Kontext Ausschneiden löschen
Set cmb = Application.CommandBars("Cell")
If cmb.Controls(1).Visible Then _
cmb.Controls(1).Visible = False

'Strg + X deaktivieren
Application.OnKey "^x", ""

'Shift + Entf deaktivieren
Application.OnKey "+{DELETE}", ""

'Drag and Drop deaktivieren
Application.CellDragAndDrop = False
End Sub

Private Sub AusschneidenAktivieren()

'Menü Auschneiden einblenden


For Each ctrl In Application.CommandBars(1).Controls("Bearbeiten").Controls

If ctrl.Caption = "A&usschneiden" Then ctrl.Visible = True
Next ctrl

'Kontext Ausschneiden einblenden
Set cmb = Application.CommandBars("Cell")
If cmb.Controls(1).Visible = False Then _
cmb.Controls(1).Visible = True

'Strg + X aktivieren
Application.OnKey "^x"

'Shift + Entf aktivieren
Application.OnKey "+{DELETE}"

'Drag and Drop aktivieren
Application.CellDragAndDrop = True
End Sub

'####Ende#####Modul#############

Kommst du damit weiter?

mit Gruß
Melanie

XL2000 // XL2002


Rolf Koenig

unread,
Jan 2, 2003, 9:15:15 AM1/2/03
to
Hallo Melanie

Super Makro genau sowas habe ich gesucht.
Das einzige was nun noch funktioniert ist die Asschneiden Funktion via Symbolleiste.
Ist es möglich auch diese Möglichkeit noch zu deatvieren?

mit Grüssen
Rolf

Rolf Koenig

unread,
Jan 2, 2003, 10:04:42 AM1/2/03
to
Hallo Melanie

Ich bin's nochmal. Habe inzwischen weitere Ablärungen getroffen. Die
beiden Makros könnten mit den folgenden Zeilen ergänzt werden um auch
das Ausschneiden Symbol zu deaktivieren (grauen). Leider funktioniert
es bis jetzt nur in der angegebenen Symbolleiste und nicht generel.
Vielleicht kennst Du noch eine andere Lösung.

'Private Sub AusschneidenVerhindern()
'Symbol Ausschneiden grauen
CommandBars("Standard").FindControl(, 21).Enabled = False
'End Sub

'Private Sub AusschneidenAktivieren()
'Symbol Ausschneiden aktivieren
CommandBars("Standard").FindControl(, 21).Enabled = True
'End Sub

Mit Grüssen
Rolf

Melanie Breden

unread,
Jan 2, 2003, 11:25:32 AM1/2/03
to
Hallo Rolf,

"Rolf Koenig" schrieb:

> 'Private Sub AusschneidenVerhindern()
> 'Symbol Ausschneiden grauen
> CommandBars("Standard").FindControl(, 21).Enabled = False
> 'End Sub
>
> 'Private Sub AusschneidenAktivieren()
> 'Symbol Ausschneiden aktivieren
> CommandBars("Standard").FindControl(, 21).Enabled = True
> 'End Sub

Mit dieser Art des ein- und ausblendes musst du vorsichtig sein. Wenn sich
kein Icon Ausschneiden in der Symbolleiste befindet (auch nicht
ausgeblendet), erhälst du eine Fehlermeldung. Diese könntest du mit "On
Error Resume Next" abfangen oder wie in meinem Code zuerst über eine
Schleife das Vorhandensein überprüfen und erst dann reagieren.

mit Gruß
Melanie


Melanie Breden

unread,
Jan 2, 2003, 11:15:08 AM1/2/03
to
Hallo Rolf,

"Rolf Koenig" schrieb:


> genau sowas habe ich gesucht.
> Das einzige was nun noch funktioniert ist die Asschneiden Funktion via
Symbolleiste.
> Ist es möglich auch diese Möglichkeit noch zu deatvieren?

habe das Icon über alle Symbolleisten mit in die Makros aufgenommen. Ersetze
in dem Modul die beiden Makros durch diese:

'###########Modul###########################
Option Explicit
Dim ctrl As CommandBarControl

Dim cmb As CommandBar, i%

Private Sub AusschneidenVerhindern()
'Menü Auschneiden ausblenden
For Each ctrl In Application.CommandBars(1) _


.Controls("Bearbeiten").Controls
If ctrl.Caption = "A&usschneiden" Then ctrl.Visible = False
Next ctrl

'Icon Auschneiden ausblenden
For i = 1 To Application.CommandBars.Count
For Each ctrl In CommandBars(i).Controls
If ctrl.ID = 21 Then ctrl.Visible = False
Next ctrl
Next i

'Kontext Ausschneiden ausblenden
For Each ctrl In Application.CommandBars("Cell").Controls
If ctrl.Caption = "Ausschnei&den" Then ctrl.Visible = False
Next ctrl

'Strg + X deaktivieren
Application.OnKey "^x", ""

'Shift + Entf deaktivieren
Application.OnKey "+{DELETE}", ""

'Drag and Drop deaktivieren
Application.CellDragAndDrop = False
End Sub

Private Sub AusschneidenAktivieren()
'Menü Auschneiden einblenden
For Each ctrl In Application.CommandBars(1) _


.Controls("Bearbeiten").Controls
If ctrl.Caption = "A&usschneiden" Then ctrl.Visible = True
Next ctrl

'Icon Auschneiden einblenden
For i = 1 To Application.CommandBars.Count
For Each ctrl In CommandBars(i).Controls
If ctrl.ID = 21 Then ctrl.Visible = True
Next ctrl
Next i

'Kontext Ausschneiden einblenden
For Each ctrl In Application.CommandBars("Cell").Controls
If ctrl.Caption = "Ausschnei&den" Then ctrl.Visible = True
Next ctrl

'Strg + X aktivieren
Application.OnKey "^x"

'Shift + Entf aktivieren
Application.OnKey "+{DELETE}"

'Drag and Drop aktivieren
Application.CellDragAndDrop = True
End Sub

'###########Modul_Ende###########################

Viel Erfolg.

mit Gruß
Melanie

Melanie Breden

unread,
Jan 2, 2003, 11:34:50 AM1/2/03
to
Hallo Rolf,

Nachtrag:

> > 'Private Sub AusschneidenAktivieren()
> > 'Symbol Ausschneiden aktivieren
> > CommandBars("Standard").FindControl(, 21).Enabled = True
> > 'End Sub
>
> Mit dieser Art des ein- und ausblendes musst du vorsichtig sein. Wenn sich
> kein Icon Ausschneiden in der Symbolleiste befindet (auch nicht
> ausgeblendet), erhälst du eine Fehlermeldung. Diese könntest du mit "On
> Error Resume Next" abfangen oder wie in meinem Code zuerst über eine
> Schleife das Vorhandensein überprüfen und erst dann reagieren.

noch gezielter fängst du die Fehlermeldung folgendermaßen ab:

If Not CommandBars("Standard").FindControl(, 21) Is Nothing Then _


CommandBars("Standard").FindControl(, 21).Enabled = True

mit Gruß
Melanie


Ralf Rodemann

unread,
Jan 17, 2003, 8:33:13 PM1/17/03
to
Danke für die Beiträge. Habs implementiert und funktioniert wunderbar.

Ralf


0 new messages