HERBERS Excel-Forum - das Archiv

Thema: Einfügen ohne Select

Einfügen ohne Select
wennerfaellt
Hallo,
es ist mal wieder ne Kleinigkeit:
In einer Tabelle die im Programm erstellt wird, und unterschiedlich viele Zeilen haben kann, muß ich für eine Legende den Inhalt der Spalten G und H in Spalte A untereinander setzen.
Zunächst sah meine Formel so aus:
Range(Erste.Offset(0, 5), Letzte.Offset(0, 5)).Copy Erste.Offset(0, -1)

Aktuelle, Erste und Letzte sind Variablen (Range) die vorher definiert wurden.
Aktuelle ist vorher durch alle Zeilen gewandert und bleibt am Ende unter der Tabelle stehen.
Letze ist eine Zelle höher
Set Letzte = Aktuelle.Offset(-1, 0).Range("A1")

Erste ist immer B2.
Somit war mir aufgefallen, daß ich mir die Variablen Erste und Letzte sparen kann, und habe meine Formel angepasst.
Zuerst habe ich den Copy-Teil angepasst:
Range("G2", Aktuelle.Offset(-1, 5)).Copy Erste

.So funktioniert sie auch noch.
Aber mit dem Paste-Teil komm ich nicht zurecht
Range("G2", Aktuelle.Offset(-1, 5)).Copy ("A2")/pre>

Was mach ich hier verkehrt?

Hier nochmal der Problemteil des Codes. Ich habe diesen zunächst als separaten Code vom großen abgetrennt, um ihn schneller testen zu können.

Sub Legende()

Dim Erste As Range
Dim Letzte As Range
Dim Aktuelle As Range
Range("B28").Select
Set Aktuelle = ActiveCell

Sheets("Selection").Select
Set Erste = Range("A2")
'Set Letzte = Aktuelle.Offset(-1, 0).Range("A1")

Range("G2", Aktuelle.Offset(-1, 5)).Copy ("A2")
Range("G2", Aktuelle.Offset(-1, 6)).Copy Aktuelle.Offset(-1, 0)
End Sub
AW: Einfügen ohne Select
Oppawinni
Bei dir hab ich immer den Eindruck, dass du denkst VBA könnte hellsehen, was du von ihm willst.
Du kannst da nicht einfach irgend einen Käse hin schreiben und hoffen, dass VBA etwas damit anfangen kann.
Hatte ich dir eigentlich schon geraten, dir Tutorials anzuschauen ?
AW: Einfügen ohne Select
schauan
Hallöchen,
Ganz allgemein und mal abgesehen ob ein TE lernwillig ist oder nicht, werden sie mit 100% Fertignahrung nicht unbedingt zum Lernen animiert. 😋
Wennerfällt, schau Dir die Hinweise zur Zell- und Bereichs Adressierung genau an.

Mal ein paar Stichpunkte von mir:
range(..)
cells(..)
range (cells(..), cells(..))
offset(..)
resize(..)
Gerne auch [..]
oder die Verwendung von
- Variablen
- With in Zusammenhang mit Bereichen

Schau auch auf den Unterschied bei ein - und zweiteiligen Kopieaktionen (ohne und mit Paste)

Und, teste so was zum lernen unabhängig von Deinem Code.






AW: Einfügen ohne Select
Oppawinni
Ist dir langweilig, oder was willst du mir erzählen ?
Off Topic
Oppawinni
Klartext, weil du mich schon einige male mit deinen Streuposts genervt hast.
Wenn du dem TO etwas sagen willst, dann antworte bitte auf den betreffenden Beitrag des TO
Man kann auch, das solltest du als alter Forist wissen, auf verschiedene Beiträge spezifisch antworten.
Wenn du mir etwas erzählen willst, dann bitte NUR DAS auf meinen Beitrag antworten.
Was mich nicht betrifft, kannst du sonst wohin posten.
Danke
AW: Einfügen ohne Select
Oppawinni
Schau mal da:
https://learn.microsoft.com/en-us/office/vba/api/excel.range.copy

Ich weiß auch nicht, warum es weh tut, wenn ich das lese:
Set Letzte = Aktuelle.Offset(-1, 0).Range("A1")
Ich hoffe, dass du wenigstens verstehst, was da raus kommt.
AW: Einfügen ohne Select
Oppawinni
Ich weiß ja nicht welchen "gigantischen" Code du da produzierst, aber...
das was du da in dem Teil tun willst konnte ich tatsächlich nicht nachvollziehen.
Ich hab da den Eindruck, dass du gerne ein wenig .offset verwendest, wozu ist mir aber ein Rätsel geblieben.
Sind denn deine Ranges alle auf dem gleichen Worksheet, weil du zwischendurch mal ein Worksheet selektierst, was du ja eigentlich vermeiden wolltest ?

Im Grunde brauchst du, schätze ich, aber nur etwas in der Art:

Sub Legende()

Dim wksSel As Worksheet
Set wksSel = ThisWorkbook.Worksheets("Selection")

wksSel.Range("G2:G7").Copy wksSel.Range("A2")
wksSel.Range("H2:H7").Copy wksSel.Range("A8")
End Sub


und so oft du hier schon gepostet hast, solltest du vielleicht auch langsam mal herausfinden wie das mit den Code-Tags funktioniert
AW: Einfügen ohne Select
Piet
Hallo

bevor du die ganze MS Bibliotherk durchforsten musst, einfach mal dein Code im Detail erklärt.
Bei Set Aktuelle brauchst du nicht zuerst die Zelle zu Selektieren, schreibe sie bitte direkt in die Set Anweisung.
Dein Copy Versuch mit "A2" konnte nicht funktionieren, weil du nicht Range("A2") angegeben hast.
Kleine Fehler, aber Excel ist da stur. Die Syntacs muss halt stimmen, sonst klappt es nicht.

mfg Piet

Sub Legende()

Dim Erste As Range
Dim Letzte As Range
Dim Aktuelle As Range
Sheets("Selection").Select

Set Erste = Range("A2")
Set Aktuelle = Range("B28")

'** das ergibt Laufzeitfehler!!
'Set Letzte = Aktuelle.Offset(-1, 0).Range("A1")

Range("G2", Aktuelle.Offset(-1, 5)).Copy Range("A2")
Range("G2", Aktuelle.Offset(-1, 6)).Copy Aktuelle.Offset(-1, 0)
End Sub
AW: Einfügen ohne Select
Piet
Hallo

Sorry, hat euer privater Streit noch irgendwas mit der Forum Anfrage zu tun???

@"gesunder Menschenverstand"
Fragt man einen Sufimeister oder Derwisch nach dem gesunden Menschenverstand, wird der freundlich lächeln und fragen - "Was bitte ist das"???
Seine zweite höfliche Frage lautet: "Wer besitzt ihn"??? -- Ich sehe hier eher unbewusste Abwehrmechanismen und Rechtfertigungen.

Will man wissen, was er damit meint, fragte er höflich: - "Hast du bitte mal an deine - eigene Gesundheit - gedacht?? An das Adrenalin im Blut"??
Jeder Streit, jede Diskussion, hat eine direkte psychische Wirkung auf unsere Gefühle, unser Wohlbefinden. Das wusste auch der grosse Meister Jesus, Isa!
Man kann von diesen alten Meistern sehr viel lernen- -- Dann wird es sicher auch ruhiger und gelassener hier im Forum.

mfg Piet
AW: Einfügen ohne Select
Oppawinni
Entschuldige die etwas ausgedehnte Off-Topic Diskussion.
Ich will nochmal versuchen dir zu helfen.
Der Code den du gepostet hattest bedeutete unter dem Strich nichts anders als:
    Dim Erste As Range


Dim wksSel As Worksheet
Set wksSel = ThisWorkbook.Worksheets("Selection")

With wksSel
.Range("G2:G27").Copy Destination:=.Range("A2")
.Range("G2:H27").Copy Destination:=.Range("B27")
End With


"Gefährlich" bei deinem Code, dass nicht gesichert ist, dass der Range "Aktuelle" auch auf dem gleichen Worksheet liegt, wie die Ranges, die du anschließend definierst.
Dir scheint auch nicht klar zu sein, dass einem Range immer ein Worksheet zugeordnet ist, auch wenn du das nicht explizit angibst.

Unklar ist, wie ich schon sagte, wozu du diese offsets machst. Das erleichtert die Lesbarkeit jedenfalls nicht.

Deinem Text folgend würde ich annehmen, dass du folgendes benötigst und hoffe, dass du das nachvollziehen kannst:

Sub unit()


Dim Aktuelle As Range
Dim rngSource As Range
Dim rngTarget As Range
Dim lngRowEndList As Long

ThisWorkbook.Worksheets("Selection").Select

Set Aktuelle = Range("B28")

lngRowEndList = Aktuelle.Row - 1

Set rngSource = Range("G2", Cells(lngRowEndList, "G"))
Set rngTarget = Range("A2")

rngSource.Copy Destination:=rngTarget

Set rngSource = Range("H2", Cells(lngRowEndList, "H"))
Set rngTarget = Cells(Aktuelle.Row, "A")

rngSource.Copy Destination:=rngTarget

lngRowEndList = Aktuelle.Row + rngSource.Rows.Count - 1

MsgBox "Die Liste endet jetzt" & vbCr & "in Zeile " & lngRowEndList

End Sub





AW: Einfügen ohne Select
Oppawinni
Es gibt im Grunde natürlich viele andere Möglichkeiten das zu lösen.
Eine etwas kompaktere Alternative:



Sub unit()

Dim Aktuelle As Range
Dim lngRowEndList As Long

ThisWorkbook.Worksheets("Selection").Select

Set Aktuelle = Range("B28")

'Im Direktfenster mal anzeigen welches Worksheet hinter "Aktuelle" steht
Debug.Print Aktuelle.Address(, , , True)

lngRowEndList = Aktuelle.Row - 1

Range("G2", "G" & lngRowEndList).Copy Range("A2")
Range("H2", "H" & lngRowEndList).Copy Range("A" & Aktuelle.Row)

lngRowEndList = Aktuelle.Row + lngRowEndList - 2

MsgBox "Die Liste endet jetzt" & vbCr & "in Zeile " & lngRowEndList

End Sub

AW: Einfügen ohne Select
Onur
Schön und gut, aber: Wer streitet denn hier? Das ist höchstens eine Diskussion.
AW: Einfügen ohne Select
Piet
Hallo

okay, Einverstanden, dann wünsche ich euch -Fröhliches Diskutieren-. Das hat dann ja positive Wirkung aufs Wohlbefinden.

mfg Piet
AW: Einfügen ohne Select
Oppawinni
Janee, irgendwann ist auch mal gut. Ich hab mir das ne Weile angeschaut. Weil der das selbst aber nicht merkt. Merkbefreit ? Muß halt mal Klartext her.
Da machen sich Leute nen Kopp, wie man das machen kann, dass Lösungen zu einer Fragestellung getrennt diskutiert werden können und dann kommt da einer und meint er müsse seine Kommentare ziellos in der Gegend herum werfen und die Leute sollen dann halt schauen, wie sie das für sich jeweils einsortiert bekommen. Das ist doch der blanke Hirnriss. Wenn der das bei mir macht, wird er ab sofort jedes mal wieder einen Spruch bekommen.
AW: Einfügen ohne Select
schauan
Hallöchen,

1)
wenn Du mit der Angabe der Bereiche nicht zurecht kommst, kannst Du diese auch erst mal prüfen, z.B. im Überwachungsfenster oder mit
Sub test()

MsgBox Range("G2", "B28").Address
Set Aktuelle = Range("B28")
MsgBox Range("G2", Aktuelle.Offset(-1, 5)).Address
MsgBox Range("G2", Aktuelle.Offset(-1, 6)).Address
End Sub


2)
Wie startest Du das Makro eigentlich? Wenn Du Dich dabei auf dem Blatt Selection befindest oder besser noch dort einen Button hast, der es startet, kannst Du auf
Sheets("Selection").Select
verzichten. Ansonsten würde z.B. auch Dein ursprüngliches Konstrukt nicht funktionieren. Du ermittelst erst auf einem anderen Blatt die Position der aktiven Zellen dann wechselst Du das Blatt, dann kopierst Du usw.
Siehe Code von Piet, da passt das. Natürlich auch bei OW, der das etwas anders gelöst hat, wo es egal ist, auf welche Blatt Du Dich befindest.

Wobei in beiden Varianten das fehlt:
Aktuelle ist vorher durch alle Zeilen gewandert und bleibt am Ende unter der Tabelle stehen.

Bei Dir aber auch, Du hast nur
Set Aktuelle = ActiveCell

Wie bist Du denn ans Ende unter der Tabelle gekommen? Da fehlt der entsprechende Code.





Off Topic
Oppawinni
Warum antwortest du Piet wenn du den TO anschreibst.
Lerne du mal, wo man Antworten hin schreibt.
AW: Off Topic ... Chronologisch ...
schauan
...
AW: Off Topic ... Chronologisch ...
Oppawinni
Du willst dein Streuposterei auch noch rechtfertigen.
Sowas hab ich noch in keinem Forum erlebt, dass einer immer auf den letzten Post antwortet, so nach dem Motto, ich will das letzte Wort haben, oder was?
Dir sollte klar sein, dass das eben gerade nicht chronologisch sein soll, sonst bräuchte man diese ganze Baumstruktur nicht.

AW: Off Topic ... Chronologisch ...
schauan
Hallöchen,

also, ich will keineswegs das letzte Wort haben. Ich habe auf Deinen Beitrag von 17:16 nicht geantwortet, habe auf Deinen Beitrag von 18:57 nicht geantwortet, erst 19:10 und da auch nur mit einem Wort ...
Ich denke, das jeder aus meinen Antworten das für ihn zutreffende entnehmen kann, ohne dass ich jemanden direkt ansprechen muss. Das sollte doch nun nicht schwer sein.
Zudem ist für die Antworten in der Regel der bisherige komplette Verlauf eines Threads relevant. Ich werde sicher keine 3 Antworten schreiben, nur weil es 3 Personen oder "Entwicklungsstände" betrifft.
Ich fände es auch nicht schlecht, wenn in der Ansicht "Forumthread" Antworten nicht zeitlich durcheinander kämen. Ok, vielleicht kenne ich den Schalter "chronologische Ansicht" bzw. "Linearer Modus" nicht, wie in vielen anderen Foren, oder gibt es das nicht?


AW: Off Topic ... Chronologisch ...
Onur
Userbild
AW: Off Topic ... Chronologisch ...
schauan
Hallöchen,
Habe ich doch geschrieben. Schau dann auf die Daten der Beiträge, z.B. von diesem Thread, und Du wirst sehen, dass die nicht chronologisch sind.
Gehe z.B. ins MOF, dort kannst Du zwischen Baumstruktur und linear wechseln.
AW: Off Topic ... Chronologisch ...
Onur
Wen interessiert denn chronologisch oder nicht? Ich antworte der jeweiligen Frage und nicht prinzipiell dem, der zuletzt was gepostet hat.
Wenn Jemand eine Frage gestellt hat und Einige haben bereits geantwortet, klicke ich doch auf die FRAGE (und nicht auf irgend eine Antwort) und poste da meine Antwort hin.
In diesem Forum ist es (warum auch immer) anders, aber normalerweise wird bei einer Antwort nur Derjenige per Mail informiert, der direkt im Thread eine Position höher liegt - also (normalerweise) der Frager.
AW: Off Topic ... Chronologisch ...
Oppawinni
Fakt ist, dass es nicht Sinn ist auf irgend einen Beitrag zu antworten zu dem deine Antwort keinen Bezug hat.
Wenn das in deiner Welt so ist, dann gehe direkt dort hin, gehe nicht über Los...
Mann....
AW: Off Topic ... Chronologisch ...
Onur
Warum sollte Jemand sowas chronologisch auflisten? Es wäre doch total hirnrissig. Das wäre so, wie einen Ahnenbaum chronologisch nach den Geburtsdaten der Einzelnen zu listen. Völliger Blödsinn und nichtssagend, da du nicht sähest, wer zu wem gehört.
AW: Off Topic ... Chronologisch ...
schauan
schönen Abend 🍻 und bis morgen 😉
AW: Off Topic ... Chronologisch ...
Onur
Du solltest mal einen VHS Grundkurs besuchen : "Wie benutzt man ein Forum im Internet richtig?". Aber sowas gibt es wohl nicht wirklich, denn normalerweise reicht dafür der gesunde Menschenverstand.