Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1192to1196
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

Inhalt und Formatierung per Mausklick kopieren

Inhalt und Formatierung per Mausklick kopieren
Christian
Hallo Leute,
ich bin VBA-Anfänger und benötige daher eure Hilfe für ein Makro:
Ich möchte eine beliebige Zelle mit Text/Zahleninhalt UND Formatierung (hier: Hintergrundfarbe) per Doppelklick in die Zwischenablage kopieren und dann per LINKSklick in eine andere beliebige Zelle wieder einfügen. Das Einfügen
per LINKSklick von Inhalt UND Hintergrund A soll solange möglich sein, bis durch Doppelklick Inhalt und Formatierung B in die Zwischenablage kopiert wird. Klick man zweimal links, soll abwechselnd der Inhalt mit Formatierung erscheinen und eine leere, unformatierte Zelle, immer im wechsel.
Der VBA-Editor hilft mir da leider nicht weiter...meine ich zumindest.
Für Vorschläge bin ich dankbar :-)
Christian

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Inhalt und Formatierung per Mausklick kopieren
01.01.2011 18:07:44
Josef

Hallo Christian,
für einen Anfänger ganz schön heftig;-))
Hier mal ein Ansatz. der Code kommt in das Modul "DieseArbeitsmappe".
Zellen hinzufügen mit Doppelklick, einfügen mit Rechtsklick, alle Einträge entfernen mit [ESC]+Doppelklick.
Es können so viele Zellen wie gewünscht hinzugefügt werden, bei Rechtsklick werden die Einträge nacheinander durchlaufen. Nach dem letzten Eintrag wird die Zelle geleert und es beginnt wieder beim ersten Eintrag.

' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit


Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Const VK_ESCAPE = &H1B

Dim rng() As Object
Dim lngIndex As Long

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Cancel = True
  If GetAsyncKeyState(VK_ESCAPE) <> 0 Then
    Erase rng
    lngIndex = -1
  Else
    If IsArray(rng) Then
      Redim Preserve rng(UBound(rng) + 1)
      Set rng(UBound(rng)) = Target
    Else
      Set rng(0) = Target
    End If
    lngIndex = 0
  End If
End Sub

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  On Error Resume Next
  Cancel = True
  If lngIndex > -1 Then
    If lngIndex > UBound(rng) Then
      Target(1, 1).Clear
    Else
      rng(lngIndex).Copy Target(1, 1)
      Target(1, 1) = Target(1, 1).Value
    End If
    lngIndex = lngIndex + 1
    If lngIndex > UBound(rng) + 1 Then lngIndex = 0
  End If
End Sub

Gruß Sepp

Anzeige
AW: Inhalt und Formatierung per Mausklick kopieren
01.01.2011 19:52:34
Christian
Hallo Josef,
danke. Funktioniert perfekt. *uff* In der Tat, viel zu schwer für einen Anfänger.
Um ehrlich zu sein verstehe ich von dem nur bahnhof. Hast du das so nebenbei beim Abendbrot gemacht? "Mal eben?" wie lange hast du dran gesessen?
Es würde mir bestimmt helfen, wenn du mir jede Zeile am ende kommentierst, damit ich zumindest ansatzweise dahinterkomme, was da steht
und das wichtigste. WIE lernt man das ? gibts da literatur? Kurse? Muss man die Weisheit mit Löffeln essen?
Viele Dank nochmals *beeindruckt*
Christian
AW: Inhalt und Formatierung per Mausklick kopieren
01.01.2011 21:43:27
Josef

Hallo Christan,
das erstellen des Code hat 15-20 Min gedauert.
Ich habe den Code och etwas verändert und mit Kommentaren versehen.
"wie lernt man das?" In den Foren mitlesen und vor allem probieren, probieren, probieren, ...

' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

'API-Fuktion um den Tastaturstatus abzufragen
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

'Constante für die [ESC]-Taste
Private Const VK_ESCAPE = &H1B

Dim rng() As Object 'Objektvariable, nimmt die Doppelklick-Zellen auf
Dim lngIndex As Long 'Zählvariable

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Cancel = True 'Cancel = True ist nötig um nicht in den Bearbeitungsmodus zu wechseln
  
  If GetAsyncKeyState(VK_ESCAPE) <> 0 Then 'Tastatur abfragen und wenn ESC gedrückt, dann
    Erase rng 'Objectvariable leeren
    lngIndex = 0 'Zähler auf 0 stellen
  Else 'ESC NICHT gedrückt
    If VarType(rng) > 0 Then 'wenn schon eine Zelle hinzugefügt wurde, dann
      Redim Preserve rng(UBound(rng) + 1) 'Ojekt-Array neu dimnionieren
      Set rng(UBound(rng)) = Target 'Neue Zelle in Array aufnehmen
    Else 'sonst
      Set rng(0) = Target 'Zelle dem Array hinzufügen
    End If
    lngIndex = 0 'Zähler auf 0 stellen
  End If
End Sub

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Cancel = True 'Cancel = True ist nötig um nicht das Kontextmenü zu öffnen
  
  If VarType(rng) > 0 Then 'wenn Objekt-Array nicht leer, dann
    If lngIndex > UBound(rng) Then 'wenn Zähler größer als Obergrenze-Objektarray, dann
      Target(1, 1).Clear 'Zelle leeren
    Else 'sonst
      rng(lngIndex).Copy Target(1, 1) 'Eintrag aus Objekt(Zähler) einfügen
      Target(1, 1) = Target(1, 1).Value 'evtl. Formeln in Werte umwandeln
    End If
    lngIndex = lngIndex + 1 'Zähler hochzählen
    
    'wenn Zähler größer Obergrenze-Objektarray + 1, dann Zähler auf 0 stellen
    If lngIndex > UBound(rng) + 1 Then lngIndex = 0
  End If
End Sub

Gruß Sepp

Anzeige
AW: Inhalt und Formatierung per Mausklick kopieren
01.01.2011 23:34:28
Christian
Hallo Sepp,
vielen dank für die mühe. Kann sein, dass ich mich an einer stelle unklar ausgedrückt habe. Im Moment ist es ja so, dass der kopierte Zelleninhalt durchläuft. Kopiere ich also A, dann B, erscheint beim einfügen A B A B immer so weiter, wie du selbst beschrieben hast.
Nun soll aber immer nur EIN EINZIGER Inhalt in die Zwischenablage und dieser soll beim nächsten Kopiervorgang überschrieben werden. Also A A A usw. dann Kopieren, dann nur B B B usw., nicht A B A B....
Ist bestimmt nur eine kleine Änderuing,oder *wunder*
Christian :-)
AW: Inhalt und Formatierung per Mausklick kopieren
01.01.2011 23:49:16
Josef

Hallo Christian,
dann wird's viel einfacher.

' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Dim rng As Range 'Rangevariable, nimmt die Doppelklick-Zelle auf
Dim blnPaste As Boolean

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Cancel = True 'Cancel = True ist nötig um nicht in den Bearbeitungsmodus zu wechseln
  
  Set rng = Target 'Variable füllen
  blnPaste = True 'Einfügen aktivieren
  
End Sub

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Cancel = True 'Cancel = True ist nötig um nicht das Kontextmenü zu öffnen
  
  If Not rng Is Nothing Then 'Gibt's was einzufügen
    If blnPaste Then 'wenn Einfügen aktiv
      rng.Copy Target(1, 1)
      Target(1, 1) = Target(1, 1).Value
    Else 'Einfügen nicht aktiv
      Target(1, 1).Clear
    End If
    blnPaste = Not blnPaste 'Einfügen Toggeln
  End If
End Sub

Gruß Sepp

Anzeige
Kleine Anpassung
02.01.2011 00:03:01
Josef

Hallo nochmal,
ersetze die Zeile
Target(1, 1) = Target(1, 1).Value

durch
Target(1, 1) = rng.Value

Gruß Sepp

AW: Kleine Anpassung
03.01.2011 21:42:25
Christian
Hallo Sepp,
ich mal wieder - der Anfänger in Sachen VBA. Ich benötige eine kleine Änderung in deiner Programmierung. Hab mich selbst dran versucht, ist natürlich in die Hose gegangen.
Also: Wenn man den Doppelklick auf eine beliebige Zelle macht, sollen die NÄCHSTEN 2 RECHTS ANGRENZENDEN Zellen gleich mitkopiert werden und bei linksklick wieder eingefügt werden, als drei eigenständige Zellen.
Als mit Klick auf A, soll der Inhalt/Formatierung von B und C mitkopiert werden und bei Klick auf zb. D, sollen auch E und F mit dem Inhalt von jeweils B und C ausgefüllt werden.
Ich nehme an, für dich eine Kleinigkeit...Ich weiss bisher nur, dass das wohl in "Workbook_SheetBeforeDoubleCLick" muss. HEY - ich mache Fortschritte ;-)
Ich schätze mal, du brauchst keine fünf Minuten.... :-o
Gruß aus dem Ruhgebiet,
Christian
Anzeige
AW: Kleine Anpassung
03.01.2011 23:28:37
Josef

Hallo Cristian,
das geht dann so.

' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Dim rng As Range 'Rangevariable, nimmt die Doppelklick-Zelle auf
Dim blnPaste As Boolean

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Cancel = True 'Cancel = True ist nötig um nicht in den Bearbeitungsmodus zu wechseln
  
  Set rng = Target.Resize(1, 3) 'Variable füllen
  blnPaste = True 'Einfügen aktivieren
  
End Sub

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Cancel = True 'Cancel = True ist nötig um nicht das Kontextmenü zu öffnen
  
  If Not rng Is Nothing Then 'Gibt's was einzufügen
    If blnPaste Then 'wenn Einfügen aktiv
      rng.Copy Target(1, 1)
      Target(1, 1) = rng.Value
    Else 'Einfügen nicht aktiv
      Target(1, 1).Resize(1, 3).Clear
    End If
    blnPaste = Not blnPaste 'Einfügen Toggeln
  End If
End Sub

Gruß Sepp

Anzeige

79 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige