825 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Zusammen
ich habe Excel 2013 und möchte das kopieren von Zellen verhindern, da mir sonst meine bedingte Formatierungen die durch einen hinterlegten Kalender gesteuert werden, kaputt gehen.
Ich habe hier folgendes Makro für die VBA gefunden, nur leider funktioniert es nicht richtig.
In der Menüleiste oben links kann man immer noch kopieren und ausschneiden.
Ziel soll sein, dass die Nutzer die Zellen zwar auswählen und das Dropdown auswählen können, dann aber nicht die Zellen kopieren und in anderen Zellen einfügen können.
Wichtig wäre auch, das es nur in dieser Arbeitsmappe aktiv ist.

Danke schon einmal im Voraus

Gruß Micha

Sub Kopieren_Aktivieren()
'Tastenkombinationen einschalten
Application.OnKey "^x"
Application.OnKey "^c"
Application.OnKey "^v"
Application.OnKey "+{DEL}"
Application.OnKey "+{INSERT}"

'Drag & Drop wieder erlauben
Application.CellDragAndDrop = True

'Schaltflaechen in Menüleiste => Bearbeiten aktivieren
procControlEnableDisable 21, True ' Ausschneiden
procControlEnableDisable 19, True 'Kopieren
procControlEnableDisable 22, True 'Einfuegen
procControlEnableDisable 755, True 'Inhalte einfuegen
procControlEnableDisable 809, True 'Office-&Zwischenablage

End Sub

Sub Kopieren_Deaktivieren()
'Tastenkombinationen deaktivieren
Application.OnKey "^x", ""
Application.OnKey "^c", ""
Application.OnKey "^v", ""
Application.OnKey "+{DEL}", ""
Application.OnKey "+{INSERT}", ""

'Drag & Drop ausschalten
Application.CellDragAndDrop = False

'Schaltflaechen in Menüleiste => Bearbeiten deaktivieren
procControlEnableDisable 21, False ' Ausschneiden
procControlEnableDisable 19, False 'Kopieren
procControlEnableDisable 22, False 'Einfuegen
procControlEnableDisable 755, False 'Inhalte einfuegen
procControlEnableDisable 809, False 'Office-&Zwischenablage

End Sub

Sub procControlEnableDisable(intId As Integer, _
bolStatus As Boolean)
Dim cmbSuche As CommandBar
Dim cmbcSteuerelement As CommandBarControl
On Error Resume Next
For Each cmbSuche In Application.CommandBars
Set cmbcSteuerelement = _
cmbSuche.FindControl(ID:=intId, recursive:=True)
If Not cmbcSteuerelement Is Nothing Then
cmbcSteuerelement.Enabled = bolStatus
End If
Next
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Kopieren_Aktivieren
End Sub

Private Sub Workbook_Open()
Kopieren_Deaktivieren
End Sub

1 Antwort

0 Punkte
Beantwortet von
Hallo Trouthunter,

seit Microsoft mit Office 2007 diese dämlichen Ribbons eingeführt hat, ist das leider nicht mehr so einfach. Früher konnte man u.a. mit VBA auch einzelne Symbole auf der Symbol- oder Menüleieste deaktivieren. Heute braucht man dafür ein Zusatzprogramm namens RibbonX sowie etwas Erfahrung in XML-Programmierung.
Hier mal ein Beispiel.

Falls dir das zu umständlich ist, kannst du alternativ auch einfach ein Makro aufzeichnen, das die Erst-Erstellung deiner bedingten Formatierung dokumentiert. Das gehört dann in das Worksheet_Change Ereignis deines Tabellenmoduls. Noch eine Bedingung drumrum, die das ganze nur ausführt, wenn die Zelle keine Bedingte Formatierung hat und schon wird das bedingte Format wieder eingefügt.

Der Code könnte z.B. etwa so aussehen.
Private Sub Worksheet_Change(ByVal Target As Range)

Set c = Range("D12")

If Not Intersect(c, Target) Is Nothing Then
If c.FormatConditions.Count = 0 Then
With c.FormatConditions
.Delete 'wenn Zelle die Zahl 20 enthält dann rot ausfüllen
.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="20"
.Item(1).Interior.ColorIndex = 3
End With
End If
End If

End Sub
Gruß Mr K.
...