Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1664to1668
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
Inhaltsverzeichnis

Rechte Maustaste / Kopieren und Einfügen

Rechte Maustaste / Kopieren und Einfügen
10.01.2019 11:27:06
Micha
Hallo liebe Spezialisten,
ich habe mal wieder ein Problem und hoffe sehr auf Eure Hilfe.
In meinem Tabellenblatt dürfen beim kopieren nur Inhalte (Werte) eingefügt werden.
Hierzu habe ich hier im Forum den unten folgenden Code gefunden.
Es erscheint dann im Menü der rechten Maustaste nur der Befehl "einfügen"
Das funktioniert soweit gut.
- Kann mir bitte jemand den Code so anpassen das zusätzlich der Befehl "kopieren" im Menü vorhanden ist.
- Gibt es eine Möglichkeit das das eingeschränkte Menü nur im Tabellenblatt "Produktion" ist. Alle anderen Tabellenblätter sollen das vollumfängliche Menü haben.
Wäre spitze wenn das klappt!
Lieben Gruß, Micha
Public Sub KonText_Neu()
Dim Ctrl As CommandBarButton
Dim intZahl As Integer
For intZahl = CommandBars("Cell").Controls.Count To 1 Step -1
CommandBars("Cell").Controls(intZahl).Delete
Next
Set Ctrl = CommandBars("Cell").Controls.Add(msoControlButton)
With Ctrl
.Caption = "einfügen"
.OnAction = "einfügen"
End With
Set Ctrl = Nothing
End Sub
Public Sub einfügen()
On Error Resume Next
ActiveCell.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
Public Sub KonText_Reset()
CommandBars("Cell").reset
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rechte Maustaste / Kopieren und Einfügen
10.01.2019 12:03:00
PeterK
Hallo

Public Sub KonText_Neu()
Dim Ctrl As CommandBarButton
Dim intZahl As Integer
For intZahl = CommandBars("Cell").Controls.Count To 1 Step -1
CommandBars("Cell").Controls(intZahl).Delete
Next
Set Ctrl = CommandBars("Cell").Controls.Add(msoControlButton)
With Ctrl
.Caption = "einfügen"
.OnAction = "einfügen"
End With
Set Ctrl = CommandBars("Cell").Controls.Add(msoControlButton)
With Ctrl
.Caption = "kopieren"
.OnAction = "kopieren"
End With
Set Ctrl = Nothing
End Sub
Public Sub einfügen()
On Error Resume Next
ActiveCell.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
Public Sub kopieren()
On Error Resume Next
ActiveCell.Copy
End Sub
Public Sub KonText_Reset()
CommandBars("Cell").Reset
End Sub

Im Tabellenblatt "Produktion" folgenden Code einfügen

Private Sub Worksheet_Activate()
KonText_Neu
End Sub
Private Sub Worksheet_Deactivate()
KonText_Reset
End Sub

Anzeige
AW: Rechte Maustaste / Kopieren und Einfügen
10.01.2019 12:54:25
Micha
Hallo lieber PeterK.
Das funktioniert Prima :-)
Vielen vielen Dank für Deine Unterstützung.
Du hast mir sehr geholfen!
Besten Gruß, Micha
AW: Rechte Maustaste / Kopieren und Einfügen
10.01.2019 12:06:59
Nepumuk
Hallo Micha,
es ist keine gute Idee das Zell-Kontextmenü von Excel zu verbiegen. Erstelle ein eigenes Popup und zeige das an.
Beispiel:
In das Modul "DieseArbeitsmappe":
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not Saved Then
        Select Case MsgBox("Sollen Ihre Änderungen in '" & Name & _
                    "' gespeichert werden", vbExclamation Or vbYesNoCancel)
            Case vbYes
                Save
            Case vbNo
                Saved = True
            Case vbCancel
                Cancel = True
        End Select
    End If
    If Not Cancel Then Call DeleteCommandbar
End Sub

Private Sub Workbook_Open()
    Call CreateCommandbar
End Sub

In das Modul der Tabelle:
Option Explicit

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    
    Cancel = True
    
    CommandBars(COMMANDBAR_CELL).ShowPopup
    
End Sub

In ein Standardmodul (Menüleiste im VBA-Editor - Einfügen - Modul):
Option Explicit
Option Private Module

Private Declare PtrSafe Function IsClipboardFormatAvailable Lib "user32.dll" ( _
    ByVal wFormat As Long) As Long

Private Const CF_TEXT As Long = 1

Public Const COMMANDBAR_CELL As String = "Copy&Paste"

Public Sub CreateCommandbar()
    
    Dim objCommandBar As CommandBar
    Dim objCommandBarButton As CommandBarButton
    
    Call DeleteCommandbar
    
    Set objCommandBar = CommandBars.Add(Name:=COMMANDBAR_CELL, _
        Position:=msoBarPopup, Temporary:=True)
    
    Set objCommandBarButton = objCommandBar.Controls.Add( _
        Type:=msoControlButton)
    
    With objCommandBarButton
        
        .Caption = "Kopieren"
        .OnAction = "CopyFromRange"
        .FaceId = 19
        
    End With
    
    Set objCommandBarButton = objCommandBar.Controls.Add( _
        Type:=msoControlButton)
    
    With objCommandBarButton
        
        .Caption = "Einfügen"
        .OnAction = "PasteInRange"
        .FaceId = 22
        
    End With
    
    Set objCommandBarButton = Nothing
    Set objCommandBar = Nothing
    
End Sub

Public Sub DeleteCommandbar()
    
    Dim objCommandBar As CommandBar
    
    For Each objCommandBar In CommandBars
        
        If objCommandBar.Name = COMMANDBAR_CELL Then _
            objCommandBar.Delete
        
    Next
End Sub

Public Sub CopyFromRange()
    Call Selection.Copy
End Sub

Public Sub PasteInRange()
    If IsClipboardFormatAvailable(CF_TEXT) = 1 Then
        Call ActiveCell.PasteSpecial(Paste:=xlPasteValues)
    Else
        Call Beep
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Rechte Maustaste / Kopieren und Einfügen
10.01.2019 12:59:16
Micha
Hallo Nepumuk,
vielen Dank für Deine Hilfe
Ich komme leider erst heute Nachmittag zu testen.
Auch wenn die Lösung von PeterK für mich ausreicht, werde ich Deine Lösung ebenfalls studieren.
Man lernt ja nie aus :-)
Vielen lieben Dank,
Micha
AW: Rechte Maustaste / Kopieren und Einfügen
10.01.2019 13:11:10
Nepumuk
Hallo Micha,
deine Version bewirkt eine Änderung in allen geöffneten Mappen, denn das Deactivate-Event wird nicht ausgelöst wenn du von deiner Tabelle in eine andere Mappe wechselst. Zudem, wenn Excel unerwartet beendet wird, dann ist das Kontextmenü verbogen. Damit machst du dir keine Freunde.
Mit meine Version kannst du das Kontextmenü auf einzelne Tabelle und darin auf einzelne Bereiche begrenzen und wenn Excel abstürzen sollte, dann ist immer noch alles in Ordnung.
Gruß
Nepumuk
Anzeige
AW: Rechte Maustaste / Kopieren und Einfügen
10.01.2019 14:17:45
Micha
Hallo lieber Nepumuk,
ohne die Hilfe von PeterK schmälern zu wollen,...
DEINE LÖSUNG IST GENIAL!
Vielen lieben Dank dafür.
Es ist schon toll wie uneigennützig einem hier geholfen wird.
Lieben Gruß, Micha

336 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige