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
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...
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
"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
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
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
"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
"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
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