Frage von gnuman79, 72

Welche Befehle gibt es in Visual-Basic (Excel) für die Tastenbefehle -links-, -rechts-, -copy- und -paste-?

Hallo,
ich möchte in Excel ein kleines Makro programmieren, das mir die aktuelle Zeit, die in eine benachbarten Zelle als [jetzt()] gespeichert ist in die gewünschte Zeile einfügt. Kling vielleicht unverständlich, sollte aber hier nicht wirklich das Thema sein. Ich wollte nur wissen, welche Befehle in VB für Pfeiltasten es gibt und für Tastenkombination "Kopieren" (Strg+C) und "Einfügen" (Strg+v).

Mit Makro aufzeichnen klappt das nicht, da der Makrorecorder sich nicht meine Tastenbefehle merkt, sondern die ausgewählte Zelle.

Antwort
von PWolff, 37

Strg+C und Strg+V lassen sich per Makro aufzeichnen (Selection.Copy bzw. ActiveSheet.Paste).

Ändern der ausgewählten Zelle in Einzelschritten per

Cells(Selection.Row, Selection.Column - 1).Select
Cells(Selection.Row - 1, Selection.Column).Select

 etc., hier muss aber noch sichergestellt werden, dass man nicht aus dem Zellbereich der Tabelle herauskommt, insbesondere wenn Row oder Column den Wert 0 erhalten.

Expertenantwort
von Oubyi, Community-Experte für Excel, 38

Das löst man in der Regel nicht über Tasten sondern so:

Dim start As Range
Set start = Range("C3")
start.Offset(0, -1) = start 'linker Nachbar
start.Offset(0, 1) = start 'rechter Nachbar
start.Offset(-1, 0) = start 'oberer Nachbar
start.Offset(1, 0) = start 'unterer Nachbar
'Kopieren und einfügen:
start.Copy Range("A1") ' nach A1 kopieren
start.Copy ActiveCell 'in die aktive Zelle kopieren

Hilft Dir das weiter?

Expertenantwort
von DeeDee07, Community-Experte für Excel, 23

Wenn die aktuelle Zeit als fixer Wert (also nicht veränderlich wie JETZT()) eingefügt werden soll, kannst du das mit Strg + Shift + . (Punkt) machen. Der zusätzliche Klick bzw. Pfeiltastendruck um die Zielzelle zu aktivieren, scheint mir jetzt nicht so aufwändig.

Expertenantwort
von Iamiam, Community-Experte für Excel, 29

Range("A1").offset(1,3).value = Range("A1").value

(auch ohne .value, möglich, da das Standardargument ist) schreibt Den Wert von A1 nach D2, ohne Copy/paste. Offset(±Zeilenversatz, ±Spaltenversatz)

Wenn das nicht geht, dann Range("A1").copy destination:=Range("D2")

i'wie gehts auch ohne das Wort destination, müsste ich selbst erst wieder ausprobieren, kannst DU auch. (sehe grade, das hat Oubyi schon formuliert)

  • oder Cells(1, 1).copy
  • Cells(2, 4).paste
  • (das nimmt auch Formate mit)

Daneben gibts auch noch .Pastespecial(xlvalues) und xlformats und xlcomments (macht manchmal bei Kopie nach anderem Blatt weniger Probleme als Paste alleine. Kann aber sein, dass der Bug inzwischen behoben ist.

Expertenantwort
von Ninombre, Community-Experte für Excel, 30

in VBA kannst Du die Zellen direkt ansteuern, nicht mit Pfeiltasten dorthin navigieren. Wenn Du einen Wert von A10 nach A1 übernehmen willst:
cells(1,1).value=cells(10,1).value
Bei diesem konkreten Fall entfällt damit auch das Kopieren und Einfügen

Noch direkter: Schreib die Zeit mit VBA direkt in die Zelle
cells(1,1).value=now()


Kommentar von gnuman79 ,

das wollte ich doch nicht wissen. Ich brauche "relative" Adresse! Ich bestimmte die Zelle, und das Makro soll den Inhalt aus einer benachbarten Zelle kopieren und als "Wert" in die von mir ausgewählte Zelle einfügen.

Kommentar von gnuman79 ,

"der" Marko??? :-/

Kommentar von Ninombre ,

Wenn die Zelle fest im Makro benannt ist, kann Du mit der Angabe der "Koordinaten", also Zeile/Spalte, ja wie beschrieben benachbare Zellen ansprechen. Aus cells(10,1) wird dann eben cells(9,1) -> geht auch mit Variablen i und i-1

Wenn das Makro die Zelle übernehmen soll, die im Augenblick aufgewählt ist, wäre das Activecell.

ActiveCell.Offset(-1, 0).Value = activecell.value schreibt (nur als Beispiel) den Wert der aktuell ausgewählten Zelle in die Zelle "ein darüber"

Oder dreh es um (ich hab die Frage nicht genau verstanden):
Activecell.value=activecell.offset(1,0).value

Keine passende Antwort gefunden?

Fragen Sie die Community