Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Auslesen des Ranges eines Kopierbereichs





Frage

Hallo, ich habe eine Frage bzgl. des Kopierens in Excel. ich will die Kopiermethode in Excel (STRG+C bzw. STRG+V) innerhalb einer ExcelTabelle nutzen. Allerdings in Kombination mit einem Makro, das das Feld derselben Zeile in Spalte 1 grau färbt, um in einer großen Tabelle es übersichtlicher zu machen, in welcher Zeile man sich befindet. Mal angenommen ich gehe in eine Zelle (Feld in Spalte 1 wird grau), kopiere sie, gehe nun in eine andere Zelle. das Feld in Spalte 1 der neuen Zeile wird grau, das der vorherigen wieder weiß - so wie das Makro programmiert ist. Nur geht bei der zwischenzeitlichen Umformatierung einer Zelle damit auch der Kopierbereich (laufende gestrichelte Linie) verloren, und das Kopieren funktioniert nicht. Ich würde gerne beides kombinieren. Daher meine Fragen: 1. Es muss doch in Excel ein Objekt geben, dass genau diesen Kopierbereich enthält, den es per Strg+C dynamisch zugewiesen bekommt. Wie lautet dieses bzw. kann man auch in Makros darauf zugreifen, z.B. um zu fragen, ob dem Objekt ein Bereich zugewiesen wurde (und damit ein Kopieren aktiv ist) 2. Kann man soeinen Bereich auch über ein Makro setzen. Funktioniert dann das Einfügen oder müssen noch andere Einstellungen vorgenommen werden? 3. Oder gibt es eine Möglichkeit, zu verhindern, dass der Kopierbereich verloren geht, wenn man zwischendurch eine Zelle formatiert? Vielen Dank. Dirk

Antwort 1 von Beverly

Hi Dirk,

ich hoffe, ich habe dein Anliegen richtig verstanden. Sobald du in die neue Zelle gehst und das Makro für die Farbe dadurch wieder ausgelöst wird, wird sozusagen der Zwischenspeicher gelöscht und dein Kopierbereich ebenfalls. Du musst also zum Kopieren das Makro zwischenzeitlich abschalten. Schau mal auf die HP von Hajo Ziplies http://home.media-n.de/ziplies/, da gibt es auf der Seite VBA 2 Beispiele "Fadenkreuz". Vielleicht hilft dir das ja weiter.

Bis später,
Karin

Antwort 2 von Dirki

Hallo Karin,

erstmal vielen Dank für die superschnelle Hilfe.

Aber ich möchte ja zum Kopieren das Makro gerade nicht abschalten.

D.h. wenn ich eine Zelle kopiere, möchte ich bei der Auswahl eines Zielfeldes sehen, in welcher Zeile ich mich nun befinde, sprich das Fadenkreuz (oder Markierung in welcher Form auch immer) UND die kopierte Zelle sollten sichtbar sein. Deshalb möchte ich ja gerne das Makro derart anpassen so frei nach der Devise (es wird aufgerufen, wenn ich in einer Zelle "lande")

1. Ist irgendwo gerade ein Kopiervorgang (d.h. gibt´s irgendwo einen markierten Kopierbereich), dann merke dir den Bereich

2. Setze die Zeilenmarkierung (und damit verschwindet der Kopierbereich ja)

3. Falls ein markierter Kopierbereich markiert worden ist, stelle dies wieder her mittels des gespeichert Werts.

Damit wird die Markierung der Zielzelle durchgeführt und der Kopiervorgang kann wie geplant durchgeführt werden.

Ich kann mir nicht vorstellen, dass Excel diesen Kopierbereich mit dem laufenden, gestrichelten Rahmen nicht als Objekt irgendwo speichert und darauf basierend kopiert. Und dann müsste man doch per Makro auch auf dieses Objekt zugreifen bzw. selbst einen Wert zuweisen können.

Ich hoffe, ich bin jetzt verstanden worden, es ist schwierig, das zu beschreiben, aber ich gebe mir Mühe. :-)

Vielen Dank.

Dirk

Antwort 3 von CaroS

Hallo Karin und "in Abwesenheit" auch hallo Hajo,

ich muss mal außer der Reihe einen Dank an Euch loswerden für die bereits geleistete Arbeit zum Thema "Fadenkreuz und kopieren".

Nach stundenlangen eigenen Versuchen nähere ich mich der Einsicht, dass das, was Dirki sich wünscht, wahrscheinlich wirklich nicht geht, auch wenn er es sich jetzt noch nicht vorstellen kann, dass es so ist und nicht wie er es gerne hätte.

Das Leben kann ziemlich gemein sein, aber ich versuche es mit Fassung zu tragen. Um so mehr möchte ich mich denen bedanken, die das Gebiet schon mal nach einer möglichen Lösung abgeklopft und auch eine gefunden haben. Da ist zumindest etwas Licht im Tunnel, was ja nicht heißen muss, dass man in alle Ewigkeit nicht versucht, doch mal einen ganz neuen Stollen zu graben. Aber im Moment schaffe ich es nicht.

Es scheitert leider daran, dass ich einen gemerkten Zellinhalt per Makro nicht aus einer Variablen in die Zwischenablage hineinbekomme, so dass der Benutzer diesem Inhalt dann - so als wäre nichts gewesen außer seinem vorherigen Strg+C - nur noch mit Strg+V in die markierte Zelle kopieren braucht. Schade, aber trotzdem ganz interessant.

Gruß,
CaroS

Antwort 4 von JoeKe

Hallo zusammen,

auch wenn ich denn Vorschlag von @Karin nutzen würde, hier mal ein Denkansatz.

In das VBA-Projekt "DieseArbeitsmappe":

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnKey "^{c}"
Application.OnKey "^{v}"
End Sub

Private Sub Workbook_Open()
Application.OnKey "^{c}", "Kopieren"
Application.OnKey "^{v}", "Einfügen"
End Sub


In ein Standartmodul:

Option Explicit

Public a As String
Sub Kopieren()
a = ActiveCell
End Sub

Sub Einfügen()
ActiveCell = a
End Sub


Beim öffnen der Datei wird der Tastenkombi "Strg+c" das Makro "Kopieren" zugewiesen und der Kombi "Strg+v" das Makro "EInfügen". Beim schließen der Mappe werden die Standart Funktion gesetzt.
Das Makro "Kopieren" liest den Wert der aktive Zelle in die Variable a ein. Das Makro "Einfügen" liest die Variable in die aktieve Zelle aus.
Um in Spalte A die Zeile der aktiven Zelle grau zu färben, könnte folgender Code im VBA-Projekt der Tabelle verwendet werden:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Zeile As Long
Cells.Interior.ColorIndex = xlNone
Zeile = ActiveCell.Row
Cells(Zeile, 1).Interior.ColorIndex = 15
End Sub


Nachteile des Ganzen:

- Es funktioniert bloß für eine Zelle.
- Alle Zellhintergrundformatierungen, die eventuell bestehen, gehen verloren.
- Es ist immer heikel die Standart Einstellungen auf diese Weise zu verändern. Meine Empfehlung wäre eine andere Tastenkombi zu wählen. Strg+k und Strg+e z.B. Sollten die Belegungen dann nicht zurück gesetzt werden, können sie keinen Schaden anrichten. Und Nutzer die die neue Belegung nicht kennen, können in der Datei keinen Schaden anrichten.

MfG

JöKe

Antwort 5 von nighty

hi caros :)

beschaeftige dich mal mit globalen ein oder mehrdimensionalen variablen
das sollte deine beschriebene problematik leicht beheben koennen

gruss nighty

Antwort 6 von CaroS

Hallo nighty,

vielleicht kannst Du mir noch etwas weiter auf die Sprünge helfen, denn genau damit probiere ich es schon seit längerer Zeit, schaffe es aber nicht. Das Problem waren bisher auch nicht die Variablen.

Ich kann ja kurz mal meinen Ansatz erklären. Ich habe eine globale Range-Variable und eine globale Wert-Variable (da habe ich erstmal String genommen, die kann aber ebenso gut auch Variant sein). Wenn sie beide leer sind, selektiere ich im Workbook_Open irgendeine Zelle (A1 oder so) und initialisiere damit die beiden Variablen (A1 und Wert von A1). Bei jedem Worksheet_SelectionChange weiß ich nun, welche die letzte Zelle war und was drinne steht. Nachdem ich den alten Wert in die Zwischenablage kopiert habe, schreibe ich aus Target gleich die neuen Werte in die globalen Variablen, während der letzte Wert so in der Zwischenablage steht , als ob ihn der Benutzer in der letzten Zelle mit Strg+C dort hineinkopiert hätte. Hatte er ja vielleicht auch, aber das bleibt leider effektiv ohne Wirkung, aber das wiederung braucht er ja nicht wissen.

Der Benutzer drückt also in der alten Zelle Strg+C und denkt, er hat den Inhalt der Zelle in die Zwischenablage kopiert. Da das im Zusammenhang mit dem Fadenkreuz aber wirkungslos bleibt, mache ich das (mit Hilfe der globalen Variablen) noch einmal "richtig", nachdem er in eine andere Zelle gewechselt ist und er kann dort nun in aller Ruhe Strg+V drücken und bekommt den alten Wert in die neue Zelle eingefügt. Das Fadenkreuz kann man dann nebenbei auch irgendwann setzen. Wenn man ScreenUpdating zeitweilig ausgeschaltet hat, kommt es gar nicht so darauf an, wann man das tut.

So könnte das (vielleicht) gehen, aber das Reinkopieren des alten Wertes aus der globalen Variablen in die Zwischenablage kriege ich leider nicht hin. Wobei ich mich auch noch nicht richtig mit Application.OnKey beschäftigt habe, das sollte ich vielleicht mal als nächstes tun.

Ich weiß übrigens auch, dass dieses Vorgehen einen ziemlich großen Nachteil hat, aber bevor es nicht läuft, brauchen wir darüber auch nicht diskutieren. Vielleicht gibt´s ja sowieso noch andere, bessere Vorschläge.

Gruß,
CaroS

Antwort 7 von nighty

hi caros :)

hier ein beispiel was von einer mehrfachmarkierung die werte wie den farbindex wie die addresse in einem array speichert

1 selection einer mehrfachmarkierung
2 mehrfachmarkierung wird farblich hervorgehoben

3 von der activen zelle ausgehend werden die zuvor in einem array gespeicherten werte wieder dargestellt

4 loeschung der zuvor hervorgehobenen farbmarkierung

viel spass damit :))

gruss nighty

Public zellen() As String
Public zaehler As Long
Option Explicit
Sub Kopieren()
zaehler = 0
Dim zelle As Range
Dim selekt As Long
ReDim zellen((Selection.Count + 1) * 3)
If Selection.Count > 1 Then
For Each zelle In Selection
zellen(zaehler) = Cells(zelle.Row, zelle.Column).Address(0, 0)
zellen(zaehler + 1) = Cells(zelle.Row, zelle.Column).Interior.ColorIndex
zellen(zaehler + 2) = Cells(zelle.Row, zelle.Column).Value2
zaehler = zaehler + 3
Cells(zelle.Row, zelle.Column).Interior.ColorIndex = 3
Next zelle
End If
End Sub


Sub einfuegen()
Dim bereich As Range
Dim zaehler1 As Long
Dim anzahl As Long
If zaehler > 0 Then
Set bereich = ActiveCell
For anzahl = 0 To zaehler - 1 Step 3
Range(zellen(anzahl)).Interior.ColorIndex = Val(zellen(anzahl + 1))
Cells(bereich.Row + zaehler1, bereich.Column) = Val(zellen(anzahl + 2))
zaehler1 = zaehler1 + 1
Next anzahl
ReDim zellen(0)
zaehler = 0
End If
End Sub

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: