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

"Paste" unterbinden, aber "PasteSpecial" zulassen?

"Paste" unterbinden, aber "PasteSpecial" zulassen?
02.11.2003 13:48:25
Volker Croll
Hallo zusammen,

um Daten in einer umfangreichen Tabelle, deren Spalten sehr unterschiedlich formatiert sein muessen, zu erfassen, moechte ich das Einfuegen von Inhalten/Werten zulassen (PasteSpecial). Das waere fuer den Anwender sehr zeitschonend.

Aber das "normale" Kopieren und Einfuegen (Paste) moechte ich unterbinden, damit keine der notwendigen Formatierungen zerstoert werden koennen.

Habe bisher nur Loesungen gefunden die "Paste" verhindern (Zwischenablage loeschen usw.).

Hat jemand eine Idee ?

Gruss Volker

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "Paste" unterbinden, aber "PasteSpecial" zulassen?
02.11.2003 14:16:04
Josef Ehrensberger
Hallo Volker,

schreibe in das modul "DieseArbeitsmappe" folgendes.


Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Die standardeinstellung für [STRG]+[V]/[STRG]+[X] wird wieder hergestellt
Application.OnKey "^v"
Application.OnKey "^x"
'Die Menüpunkte für Einfügen und Ausschneiden werden wieder aktiviert
With Application.CommandBars("Worksheet Menu bar").Controls("Bearbeiten")
.Controls("E&infügen").Enabled = True
.Controls("A&usschneiden").Enabled = True
End With
With Application.CommandBars("Cell")
.Controls("E&infügen").Enabled = True
.Controls("A&usschneiden").Enabled = True
End With
End Sub



Private Sub Workbook_Open()
'Bei [STRG]+[V] wird das Makro "WerteEinfügen" aufgerufen
Application.OnKey "^v", "WerteEinfügen"
'[STRG]+[X] wird deaktiviert
Application.OnKey "^x", ""
'Die Menüpunkte für Einfügen und Ausschneiden werden deaktiviert
With Application.CommandBars("Worksheet Menu bar").Controls("Bearbeiten")
.Controls("E&infügen").Enabled = False
.Controls("A&usschneiden").Enabled = False
End With
With Application.CommandBars("Cell")
.Controls("E&infügen").Enabled = False
.Controls("A&usschneiden").Enabled = False
End With
End Sub


Und in ein StandardModul diesen Code.

Sub WerteEinfügen()
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End Sub


Ich hoffe das es deinen Vorstellungen entspricht.

Gruß Sepp
Anzeige
Toll, aber noch nicht ganz ... (Zwischeninfo) ...
02.11.2003 14:48:52
Volker Croll
Hallo Sepp,

herzlichen Dank; aber irgendwo ist noch ein Fehler, denn die Schaltflaeche "Ausschneiden" wird nicht ausgeblendet, "Einfuegen" ist mal ausgeblendet, mal nicht.

Bin noch am Testen, wollte mich aber schon mal gemeldet haben !

Gruss Volker
noch Offen...
02.11.2003 15:01:47
Josef Ehrensberger
Hi Volker,

also unter XL9 (Office 2000 Pro)
funktioniert alles wunderbar,
XL8 kann ich leider nicht Testen.

Vieleicht weis einer der mit XL8 arbeitet woran
es liegen könnte
versuch
02.11.2003 15:12:20
Josef Ehrensberger
Hi nochmal,

probier mal

With Application.CommandBars
.FindControl(ID:=21).Enabled = False
.FindControl(ID:=22).Enabled = False
End With

Gruß Sepp
Anzeige
Bringt mich schon mal weiter, aber ...
02.11.2003 18:38:54
Volker Croll
Hallo Sepp,

sorry, konnte eine Weile nicht online sein.

Das funktioniert schon sehr zuverlaessig. Wo finde ich denn eine Auflistung, welche ID fuer welche Schaltflaeche steht?

Es besteht aber noch ein Problem: Wenn man kopiert und ueber BEARBEITEN -> INHALTE EINFUEGEN geht (wer weiss, was der DAU so alles macht), ist dort wieder "Alles" auswaehlbar.

Aber bis hierher schon mal 1000 Dank. Du hast mir schon sehr geholfen!

Gruss Volker
Symbolleisten
02.11.2003 18:57:30
Josef Ehrensberger
Hi Volker,

freut mich das es klappt.

Hier ein Code mit dem du alle Symbolleisten/Controls

mit Namen und ID aufgelistet bekommst.

Einfach in einer leeren Tabelle laufen lassen.


Sub Symbolleisten_auflisten()
Dim SymbL As CommandBar
Dim con As CommandBarControl
Dim x As Long
' Auflistung der einzelnen Symbolleisten:
x = 1
For Each SymbL In Application.CommandBars
Cells(x, 1) = SymbL.Name
Cells(x, 2) = SymbL.NameLocal
Cells(x, 3) = SymbL.Index
For Each con In Application.CommandBars(SymbL.Name).Controls
Cells(x, 4) = con.Caption
Cells(x, 5) = con.ID
x = x + 1
Next
Next
End Sub


Gruß Sepp
Anzeige
Nachfrage(n)
02.11.2003 19:50:02
Volker Croll
Hallo Sepp,

Danke fuer die Auflistung! Verstehe ich das jetzt richtig: Weil die ID fuer EINFUEGEN bzw. AUSSCHNEIDEN immer dieselbe ist, brauche ich zum TRUE oder FALSE setzen nicht
einmal

With Application.CommandBars("Worksheet Menu bar").Controls("Bearbeiten") ...

und einmal

With Application.CommandBars("Cell") ...

sondern Dein

With Application.CommandBars
.FindControl(ID:=21).Enabled = False
.FindControl(ID:=22).Enabled = False
End With

deckt beides ab ?

Und faellt Dir zum vorhin beschriebenen Problem BEARBEITEN -> INHALTE EINFUEGEN noch was ein?

Gruss Volker
Anzeige
AW: Nachfrage(n)
02.11.2003 20:21:30
Josef Ehrensberger
Hi Volker,
leider funktioniert ".FindControl" nicht immer
(hab noch nicht herausgefunden warum) dshalb
vieleicht so.


Sub Ausschalten()
On Error Resume Next
With Application.CommandBars("Worksheet Menu Bar").Controls("Bearbeiten")
.Controls("A&usschneiden").Enabled = False
.Controls("E&infügen").Enabled = False
.Controls("I&nhalte einfügen...").Enabled = False
End With
With Application.CommandBars("Cell")
.FindControl(ID:=21).Enabled = False
.FindControl(ID:=22).Enabled = False
.FindControl(ID:=755).Enabled = False
End With
End Sub



Sub Einschalten()
On Error Resume Next
With Application.CommandBars("Worksheet Menu Bar").Controls("Bearbeiten")
.Controls("A&usschneiden").Enabled = True
.Controls("E&infügen").Enabled = True
.Controls("I&nhalte einfügen...").Enabled = True
End With
With Application.CommandBars("Cell")
.FindControl(ID:=21).Enabled = True
.FindControl(ID:=22).Enabled = True
.FindControl(ID:=755).Enabled = True
End With
End Sub


Gruß Sepp
Anzeige
Danke, jetzt ist's wohl (nur) noch Fleissarbeit...
02.11.2003 22:17:44
Volker Croll
Hallo Sepp,

bin mit dem Probieren jetzt so weit, dass man wohl doch jede CommandBars gezielt ansprechen muss. Bei mir waren die normalen Schaltflaechen "Ausschneiden" und "Einfuegen" jetzt permanent ausgeschaltet bis ich sie mit

With Application.CommandBars("Standard") ...

gezielt wieder auf "True" gesetzt habe.

Um mein Eingangs geschildertes DAU-Problem in den Griff zu kriegen, muss ich jetzt alles gezielt aus- und einschalten (z.B. ist mir noch "Zellen loeschen" aufgefallen etc.).

Dank Deiner Hilfe weiss ich jetzt, wie ich's angehe. Dafuer nochmals 1000 Dank!

Gruss Volker
Anzeige
Danke für die Rückmeldung + Tipp
02.11.2003 22:30:55
Josef Ehrensberger
Hi Volker,

freut mich das ich dir wenigstens zum teil
helfen konnte.

noch ein kleiner Tipp.

mit " .Reset " kannst du die einzellnen CommandBars
zurücksetzen ohne das du jedes einzelne Control
ansprechen musst.

Gruß Sepp
Auch fuer diesen Tipp noch Danke ...
02.11.2003 22:37:05
Volker Croll
Hallo Sepp,

... kann heute allerdings nicht mehr "Weiterbasteln".

Gruss Volker
Zwischenablage löschen ?
02.11.2003 14:46:19
Jorainbo
hallo - wie löscht man denn den Inhalt der Zwischenablage per VBA ?

Gruß
Tom
Mit "Application.CutCopyMode = False" (o.T.)
02.11.2003 14:50:26
Volker Croll
AW: Mit "Application.CutCopyMode = False" (o.T.)
02.11.2003 15:42:10
Jorainbo
damit lässt sich nicht der Inhalt der Zwischenablage leeren - ich meinte so wie wenn man auf 'alle löschen' drückt

Gruß
Tom
Anzeige
AW: Mit "Application.CutCopyMode = False" (o.T.)
02.11.2003 17:28:54
josef
hallo, das geht damit:

Private Declare

Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare 

Function EmptyClipboard Lib "user32" () _
As Long
Private Declare 

Function CloseClipboard Lib "user32" () _
As Long

Sub Zwischenablage_leeren()
If OpenClipboard(0&) <> 0 Then
Call EmptyClipboard
Call CloseClipboard
End If
End Sub


gruß

josef
AW: Mit "Application.CutCopyMode = False" (o.T.)
02.11.2003 19:27:50
Jorainbo
hmm danke - funktioniert aber leider bei mir nicht :-(
habs 1:1 kopiert

Gruß
Tom
Anzeige
Aus dem Forums-Archiv ...
08.03.2002 22:44:26
MRR
Hallo Tom,

zum Thema zwei Zitate aus dem Archiv:
---------------------------------------------------------------------------------
...
es kommt darauf an, ob es sich um Daten aus Excel oder externe Daten handelt. Für externe Daten gibt es keinen VBA-Lösch-Zugriff auf die Zwischenablage, handelt es sich um Excel-Daten, folgender Befehl:
Application.CutCopyMode = False
...
---------------------------------------------------------------------------------
...
versuch es mal hiermit:

Private Declare

Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Private Declare 

Function EmptyClipboard Lib "user32" () As Long
Private Declare 

Function CloseClipboard Lib "user32" () As Long

Sub DumpClipboard()
Dim lReturn As Long
lReturn = OpenClipboard(0&)
If lReturn <> 0 Then
lReturn = EmptyClipboard()
lReturn = CloseClipboard()
End If
End Sub

------------------------------------------------------------------

Gruss Volker
Anzeige
Sorry ...
02.11.2003 20:09:42
Volker Croll
... habe uebersehen, dass Josef Dir diesen Code schon gepostet hatte.

Nur dann verstehe ich nicht, was nicht klappen soll. Beschreib's mal genau.

Gruss Volker
AW: Sorry ...
02.11.2003 22:12:37
Jorainbo
hallo Volker - es passiert überhaupt gar nichts, wenn ich den code ausführe :-/
is ja auch nicht so wichtig :-) - aber danke Euch beiden
Gruß
Tom

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige