Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Möchte meinen Excel-VBA-Code verbesern





Frage

Ich bin totaler VBA-Anfänger und versuche, aus dem Code von anderen was zu lernen. Zum Kopieren einer Zelle meine ich, dass ich die beiden Varianten schon gesehen habe: 1. Sheets("Tabelle1").Select Range("A1").Select Application.CutCopyMode = False Selection.Copy Sheets("Tabelle2").Select Range("A").Select ActiveSheet.Paste 2. Sheets("Tabelle1").Range("A1").Select Application.CutCopyMode = False Selection.Copy Sheets("Tabelle2").Range("A").Select ActiveSheet.Paste Ich würde lieber die 2. Variante nehmen, weil die kürzer und übersichtlicher ist, aber die funktioniert nicht (Fehler 1004) und ich weiß nicht warum? Kann das sein, dass das bei jemand anders so funktioniert hat und dass das von irgendwelchen Umständen abhängt? Ich hätte noch viel mehr Fragen zu dem Thema, aber ich könnte auch eine gute Einführung in VBA gebrauchen und würde die dann erstmal lesen. Im VB-Editor die Eigenschaften/Methoden anzeigen ist ja ziemlich blöd. Da sieht man zwar, was es alles gibt, aber nirgendwo ist ein Rat oder eine Bewertung oder ein Code-Beispiel, was für einen bestimmten Zweck besser ist und was schlechter. Eine Frage noch als Beispiel: Wann schreibe ich besser Worksheets("Tabelle1").Activate und wann besser Sheets("Tabelle1").Select und wo findet man dazu mal eine Erklärung? Nur mit Intuition ist es ein bisschen schwierig. In der VB-Hilfe steht natürlich auch kein Hinweis oder Querverweis, dass ").Activate und .Select ziemlich ähnlich sind und dass man sich auch mal die andere Methode angucken soll. Ach ja, und über die Buchautoren mit ihren 800-900-Seiten-Wälzern, wo nichts drin steht, schweige ich mal lieber. Was nehmt Ihr denn so? Ein schönes Wochenende wünscht Euch der Klaus

Antwort 1 von JoeKe

Hallo Klaus,

dein Beispiel in kurz:

Sub kopieren()
Sheets("Tabelle1").Range("A1").Copy
Sheets("Tabelle2").Range("A1").PasteSpecial
Application.CutCopyMode = False
End Sub


Der unterschied zwischen Select und Activate wird am besten hierdurch sichtbar:

Sub Activate_Select()
Range("A1:C5").Select
Range("B3").Activate
End Sub


Allgemein lässt sich aber sagen das auf Select in den meisten fällen verzichtet werden kann. Es ist z.B. nicht nötig eine Zelle anzusteuern um sie zu kopieren (siehe Beispiel "kopieren").

Einen Einblick in die VBA Programmierung kannst du zum Teil in der Hilfe finden (auch mit Beispielen). In der VBA-Umgebung F1 drücken oder auf das "?" in der Menueleiste.


MfG

JöKe

Antwort 2 von nighty

hi klaus :)

selectionen wie aktivierungen sind zu 99% überflüssig,schnell mal wieder weg davon

noch ein beispiel

Sheets(1).Range("A1").Copy Sheets(2).Range("A1")

gruss nighty

Antwort 3 von M.K.

Hallo JöKe,

ich wollt wenigstens mal schnell danke sagen, aber ich denke noch drüber nach, ob ich das wirklich verstanden habe.

Ob nun .Paste oder .PasteSpecial kann mir ja egal sein (Fußnote), muss ich mal nachlesen, worin der Unterschied besteht. Aber den Unterschied zwischen .Select und .Activate habe ich glaube ich noch nicht begriffen.

Wenn man mit der Maus was auswählt, ist ja die zuerst markierte Zelle innerhalb einer Markierung weiß und die restlichen Zellen, wenn es mehrere sind, sind blau. Soll das der Unterschied sein?

Oder einfach nur, dass man mit .Select mehrere Zellen/Bereiche auswählen kann und mit .Activate nur eine einzelne Zelle? Ja, aber .Activate geht auch für Worksheets und für wer weiß was noch. Und da könnte ich also mit .Activate immer nur eins auswählen und mit .Select immer gleich mehrere? Na gut, muss ich mal probieren.

Hilfe, F1, ? ist klar.

Schöne Grüße,
Klaus

Fußnote: Bin ja schließlich kein Italiener. Sonst würde ich dauernd ein e hinten dranhängen oder PastaSpeciale schreiben.

Antwort 4 von JoeKe

Hallo Klaus,

Select und Activate sind augenscheinlich dasselbe. Mein Beispiel sollte dir den unterschied gezeigt haben. Bereich A1:C5 war selektiert (ausgewählt) und B3 war aktiv.
Wie du richtig erkannt hast kann man immer nur die aktive Zelle bearbeiten aber mehrere Zelle selektieren.
Aber wie @nighty auch schrieb kann darauf zu 99% verzichtet werden. Also denk da im Moment nicht so viel drüber nach.

Paste = Einfügen

PasteSpacial = Inhalte Einfügen

Gruß

JöKe

Antwort 5 von M.K.

Ja, danke erstmal an alle. Ist mir schon klar, dass das kein so spannendes Thema ist und dass man als Fortgeschrittener über manchen Kleinkram gar nicht mehr nachdenkt, sondern vieles mit Routine erledigt. Mich hält der Kleinkram im Moment nochwahnsinnig auf, aber das kann ja mit der Zeit nur besser werden.

Routine und Erfahrung, was geht und was nicht geht, muss man sich eben erarbeiten, wahrscheinlich mühsam, aber auf jeden Fall mit dem eigenen Kopf. Erfahrung von einem anderen an- (bzw. ab-)zapfen funktioniert nicht und nur mal schnell eine Lösung abkupfern bringt auch nicht viel.

Trotzdem werde ich hier immer wieder mal reingucken, was Ihr so treibt und schreibt, und wenn ich mal wieder eine Frage habe, dann lasse ich es Euch wissen. (Oh ja, ich habe noch Fragen, verlasst Euch drauf! Aber erst später.)

Grüße an alle und noch einen schönen Abend!

Klaus

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


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: