362 Aufrufe
Gefragt in Tabellenkalkulation von

Hallo liebe Forumsteilnehmer, ich bin kurz vor dem verzeifeln und hoffe, mir kann jemand helfen.

Ich suchte im Netz nach einer Möglichkeit in einer von mir erstellten und blattgeschützten  Anwendertabelle zu verhindern, dass die Anwender aus anderen Exceltabellen Daten in die Tabelle kopieren können und damit die Dropdown-Funktionen in den Spalten außer Kraft setzen. Bei meiner Suche bin ich auf dieses Forum und die folgende VBA-Anleitung gestoßen:

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

Ich habe leider wenig Ahnung von VBA und es war wohl eine große Dummheit von mir, diese Anleitung vollständig in das Modul 1 einzugeben. Vermutlich musste alles einzeln eingegeben werden oder irgendwas ist völlig falsch evtl. für Excel 2016. Es hat funktioniert, jedoch sind jetzt alle Exceldateien davon betroffen. Ich habe das Macro und auch Modul 1 gelöscht. Im Trustcenter habe ich Häckchen bei "alle Macros deaktivieren" gesetzt. Trotzdem kann ich keine Zellen mehr kopieren, etc., egal in welcher Word oder Excel Datei.

Gibt es vielleicht ein Macro, mit welchem ich die "eigentlich" so wichtige Funktion wieder einsetzen kann bzw. was kann ich tun? Für Hilfe wäre ich sehr dankbar.
 

4 Antworten

+1 Punkt
Beantwortet von m-o Profi (22.7k Punkte)

Hallo,

die Makros

Sub Kopieren_Aktivieren()

Sub Kopieren_Deaktivieren()

Sub procControlEnableDisable(intId As Integer, _
bolStatus As Boolean)

gehören in ein Standard-Modul deiner Tabelle.

Die beiden Makros

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Private Sub Workbook_Open() 

gehören in das VBA-Projekt deiner Arbeitsmappe.

Wenn du das Makro Sub Kopieren_Aktivieren() ausführst, sollte das Kopieren eigentlich wieder funktionieren.

Falls das nicht hilft, kannst du auch ein Office-Reparatur versuchen.

Es hat funktioniert, jedoch sind jetzt alle Exceldateien davon betroffen.

Wie du bereits festgestellt hast, ist das Makro nicht auf eine bestimmte Datei beschränkt, sondern gilt dann insgesamt für Excel / Office.

Zum Code lies auch hier nach: Daten kopieren fast unmöglich

Gruß

M.O.

0 Punkte
Beantwortet von mikado Einsteiger_in (11 Punkte)
Hallo M.O.,

herzlichen Dank für die Info. Ich habe in der Tabelle hoffentlich richtig das Modul wie folgt eingefügt:

Sub Kopieren_Aktivieren() nächste Zeile "end Sub"  (dazu wurde ich aufgefordert, wenn ich das richtig verstanden habe).

Sicher dumme Frage: ist das 1. Modul gleichzusetzen mit Standardmodul?

Mit  Sub Kopieren_Aktivieren() und end sub, funktioniert "kopieren" leider nicht. Ist end sub richtig?

In die VBA-Arbeitsmappe habe ich keine Option eingerichtet oder sollte ich

Private Sub Workbook_BeforeClose(Cancel As Boolean) und/oder

Private Sub Workbook_Open()

einrichten?

Mittlerweile habe ich das System mit Wiederherstellungpunkt zurückgesetzt. Was leider auch nichts gebracht hat.

Für weitere Ideen wäre ich dankbar.
+1 Punkt
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Mikado,

die einzelnen Makros gehen immer von Sub ... bis End Sub. Diese musst du entsprechend der obigen Anleitung in ein Standard-Modul (z.B. Modul 1) kopieren bzw. in das VBA-Projekt der Arbeitsmappe. Die entsprechenden Anleitungen sind als Link in meiner 1. Antwort entsprechend hinterlegt.

Hier hab ich mal die Makros in eine Datei kopiert (ohne die automatische Deaktivierung beim Start bzw. die Aktivierung beim Schließen der Datei). Die Makros kannst du per Schaltfläche starten. Vorher musst du natürlich die Ausführung von Makros in Excel ggf. zulassen. Link zur Datei

Speichere die Datei und klicke einfach mal auf die Schaltfläche kopieren aktivieren.

Gruß

M.O.

+1 Punkt
Beantwortet von mikado Einsteiger_in (11 Punkte)
Tausend DANK, mir wurde sehr geholfen.
...