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

VBA kopieren und einfügen

VBA kopieren und einfügen
03.03.2022 20:16:36
Burghard
Hallo Freunde, ich habe die Aufgabe aus Tabelle 1 den Inhalt der Zeile 2 Spalte 1-4 in Tabelle 2 per Button zu listen und gleichzeitig die Werte aus Tabelle 1 Spalte 1- 4 Zeile 2 zu löschen, damit eine neue Eingabe erfolgen kann.
Ich kenn die Datenmaske und würde das damit auch realisieren wollen, Aber der Wunsch ist eben so. Kann mir hierbei jemand helfen.
Mit dem Macror. habe ich folgenden Code erzeugt:

Sub store()
Range("A2:D2").Select
Selection.Copy
Sheets("Liste").Select
Range("A2").Select
ActiveSheet.Paste
Range("A3").Select
Sheets("Basis").Select
Range("A2:D2").Select
ActiveCell.FormulaR1C1 = ""
Application.CutCopyMode = False
Selection.ClearContents
Range("A2").Select
End Sub
Problem: der nächste Eintrag in Tabelle 2
Gruß Burghard

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA kopieren und einfügen
03.03.2022 22:39:37
ralf_b
wieso bekommt Jemand eine Aufgabe, der er nicht gewachsen ist?

Sub store()
With Sheets("Liste")
Sheets("Basis").Range("A2:D2").Copy .Range("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
End With
With Sheets("Basis").Range("A2:D2")
.ClearContents
.Cells(1).Select
Application.CutCopyMode = False
End With
End Sub

noch ein paar Varianten dazu
04.03.2022 07:01:43
Udo
Guten Morgen Burghard,
wie sagt man so schön , jeden Tag eine gute Tat ;-)
Bitte sehr ... kopiere dir mal den ganzen unteren Text und füge ihn in ein Modul, den Abschnitt mit Private...Sel.Change musst du dann aber in das
Tabellenblatt"Basis" Modul reinkopieren damit es seine Wirkung zeigt ( in einem normalen Modul funktionierst sonst nicht )
Nimm was du davon brauchen kannst, letztlich hast du nun alle Möglichkeiten darauf aufzubauen ..
' ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Sub Store()
' ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
' zunächst einmal einige Abruf Varianten zum Übertragen, kannst dir die aussuchen die du magst.
' Sie erfüllen alle deine Anforderung, birgen aber je Var noch darüber hinaus Möglichkeiten die du
' noch erweiternd darauf aufbauend nutzen könntest.
GoTo A: ' « hier änderst du mal zum Testen den Buchstaben um die 4 Varianten einzeln zu testen
A: ' 1. Ansatz: Abruf ohne copy paste ( fixe Angabe )
Sheets("Liste").Range("A2:D2") = Sheets("Basis").Range("A2:D2").Value
GoTo X:
B: 'oder 2. Ansatz: Abruf ohne copy paste ( fixe Angabe / aber schon anders geschrieben ) Grund siehst du dann ab Var 3
Sheets("Liste").Range(Cells(2, 1).Address & ":" & Cells(2, 4).Address) = _
Sheets("Basis").Range(Cells(2, 1).Address & ":" & Cells(2, 4).Address).Value
' Im Abschnitt Cells() ist die erste Zahl die Zeilenangabe, nach dem Komma die Spaltenangabe
GoTo X:
C: 'oder 3. Ansatz: Abruf ohne copy paste - per variablen Bezug ( anhand Formelauswertung oder Direktangabe über eine Bezugszelle )
' Nun wird dir auch klar warum es so aufgeführt wird ...
' Geh mal davon aus du hättest in TAB"Liste" in der Zelle [A1] einen Zahlenwert stehen der angibt
' welche Zeile du in TAB "Basis" abfragen möchtest ( ganz egal ob der Wert in [A1] per Formel errechnet wird
' oder du ihn dort direkt eingibst ... Also TAB "Liste" ... [A1] = 2 für Zeile 2 demnach
Sheets("Liste").Range(Cells([A1], 1).Address & ":" & Cells([A1], 4).Address) = _
Sheets("Basis").Range(Cells([A1], 1).Address & ":" & Cells([A1], 4).Address).Value
GoTo X:
D: 'oder 4. Ansatz: Abruf ohne copy paste - per variablen Bezug ( anhand der aktiven Zeile beim ausführen )
' hier würde durch die in Codeabschnitt Cells( ActiveCell.Row , ... ) verwiesene aktive Zeile dann eben
' diejenige Zeile in TAB "Basis" in diejenige Zeile"Liste" übernommen, in der du dich gerade befindest zum
' Zeitpunkt in dem du das Makro dann startest
Sheets("Liste").Range(Cells(ActiveCell.Row, 1).Address & ":" & Cells(ActiveCell.Row, 4).Address) = _
Sheets("Basis").Range(Cells(ActiveCell.Row, 1).Address & ":" & Cells(ActiveCell.Row, 4).Address).Value
' —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
X: ' dann gehts nach dem Übertragen nun weiter auf Tab "Liste"
[A3].Select ' da du aus der Tab " Liste " heraus aufrufst brauchst du Blattbezeichnung nicht
' nach deinem Codebeispiel nach löschst du ja nur den Inhalt "Basis A2:D2" ohne die darunter gelegenen Zeile hochwärst
' hochzurutschen, dazu müsstest du nicht explizit zunächst wieder auf TAB"Basis" zurückspringen, du
' könntest zunächst auf TAB "Liste" bleiben und folgend in "Basis" entsprechend löschen
Sheets("Basis").Range("A2:D2") = "" ' oder ...
Sheets("Basis").Range("A2:D2").ClearContents ' oder ...
Sheets("Basis").FormulaR1C1 = "" ' dein Eintrag / is aber unnötig da eine Formel dafür ... oder ...
Sheets(1).Range("A2:D2").ClearContents ' wenn TAB "Basis" von deiner Anordnung her die erste TAB wäre oder ...
Sheets(1).Range("A2:D2") = "" ' oder ...
Sheets(1).[A2:D2] = "" ' damit Haste mal Überblick wie du sowas definieren könntest
' wenn du nun warum auch immer in TAB "Basis" die Zelle [A2] schon anspringen musst, du aber noch aktiv in TAB "Lsite" wärst
' müsstest du nun eben zunächst nach TAB "Basis" wechseln und danach dann die Zelle A2 anspringen, dies lässt sich leider nicht kombinieren,
' also » Sheets("Tabelle1").Range("A2").Select « funktioniert so leider nicht
Sheets("Basis").Select
Range("A2").Select
End Sub
' ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'           Mal ganz abgesehen von deiner Aufgabenstellung, im Prinzip könntest du das ganze in TAB " Liste " natürlich auch in diese übertragen
'           ohne dabei extra in diese zu wechseln mit den oben aufgeführten Varianten funktioniert es einerseits wie auch andererseits, du musst dabei lediglich
'           deine Zuweisung im Code entspr. anpassen.
'           Darauf das du entspr. Eintrag & Verhalten deiner Aktionen zB in TAB 1 ( je nach dem was du da gerade tust ) das Tabellenblatt 1 als Reaktio
'           darauf sofort eigenständig Werte schon nach Tab 2 überträgt, während du also in Tab "Basis" gerade die Daten eingibst, diese sozusagen gleich schon
'           zeitgleich nach Tab 2 übernommen werden ... könntest du die hier oben genannten Ansätze im Tabellenblatt-Modul in dem du aktiv eine Aktion ausführst
'           sprich in dem du gerade Einträge vornimmst ( z.B in TAB "Basis" wenn du also in A2:D2 wieder neue Einträge eingibst ) eine der Anweisungen hier oben
'           dort z.B. im SelectionChange() Ereignis platzieren oder in Change() , Calculate() ... das wäre dann z.B. im TAB.Modul "Basis" folgender Code
Sheets("Liste").Range(Cells(2, 1).Address & ":" & Cells(2, 4).Address) = Range(Cells(2, 1).Address & ":" & Cells(2, 4).Address).Value
End Sub
mach was draus ;-)
LG Udo
Anzeige
zu deinem Problem nächste Zeile
04.03.2022 07:18:42
Udo
' ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

Sub Store()
Sheets("Liste").Range(Cells(ActiveCell.Row, 1).Address & ":" & Cells(ActiveCell.Row, 4).Address) = _
Sheets("Basis").Range(Cells(ActiveCell.Row, 1).Address & ":" & Cells(ActiveCell.Row, 4).Address).Value
Sheets("Basis").Range(Cells(ActiveCell.Row, 1).Address & ":" & Cells(ActiveCell.Row, 4).Address).ClearContents
'           damit wird demnach der Eintrag aus TAb"Basis" nach Tab "Liste" verschoben anhand der aktiven Zeile in der
'           du diesen Code startest ( von Tab "Lsite" aus !! )
'           nach dem Übertrag musst du nun also nun nur noch in die nächste Zeile springen
'           hochzurutschen, dazu müsstest du nicht explizit zunächst wieder auf TAB"Basis" zurückspringen, du
'           könntest zunächst auf TAB "Liste" bleiben und folgend in "Basis" entsprechend löschen
Range(ActiveCell.Row + 1, 1).Select
'           Du musst nun in TAB " Basis den Cursor auch gar nicht mehr irgendwo hinspringen lassen dadurch,
'           kannst den Code nun Zeile für Zeile starten, wird somit nach un nach verschoben
End Sub
' ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

Sub Store_mehrere_Zeilen_verschieben()
'           z.B. 10 Zeilen gemessen ab der aktiven Zeile
Sheets("Liste").Range(Cells(ActiveCell.Row, 1).Address & ":" & Cells(ActiveCell.Row + 9, 4).Address) = _
Sheets("Basis").Range(Cells(ActiveCell.Row, 1).Address & ":" & Cells(ActiveCell.Row + 9, 4).Address).Value
Sheets("Basis").Range(Cells(ActiveCell.Row, 1).Address & ":" & Cells(ActiveCell.Row + 9, 4).Address).ClearContents
Range(ActiveCell.Row + 10, 1).Select
'           usw.
End Sub

Anzeige
AW: zu deinem Problem nächste Zeile
04.03.2022 09:04:30
GerdL
Moin Burghard!

Sub Unit()
Dim Quelle As Range, Ziel As Range
Set Quelle = Worksheets("Basis").Range("A2:D2")
Set Ziel = Worksheets("Liste").Cells(Worksheets("Liste").Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 4)
Ziel.Value = Quelle.Value
Quelle.ClearContents
Application.Goto Quelle.Cells(1, 1)
Set Quelle = Nothing: Set Ziel = Nothing
End Sub
Gruß Gerd
AW: zu deinem Problem nächste Zeile
04.03.2022 10:43:47
Burghard
Hallo Freunde,
recht vielen Dank für Eure schnellen und hilfreichen Antworten.
Ihr habt mir sehr geholfen, insbersondere die Erläuterungen.
Gruß
Burghard
AW: zu deinem Problem nächste Zeile
05.03.2022 01:03:04
Udo
gern geschehen, mir wurde und wird hier auch immer geholfen, alles gut,
Chapeau an Gerd, sauber !
Grüße
udo
Anzeige

332 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige