Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Zeile nicht überschreiben und Position wählen
#1
Hallo zusammen,
ich versuche gerade, einen VBA-Code auf meine Bedürfnisse anzupassen, doch leider scheitere ich kurz vor dem Ziel. Bin auch noch Anfängerin.

Ich möchte aus einer Tabelle eine Zeile ausschneiden und in eine Tabelle auf einem anderen Arbeitsblatt in die nächste freie Zeile einfügen. Obwohl ich hier mit xlUp arbeite, wird die Zeile immer in Zeile 24 der Zieldatei eingefügt und nicht in die nächste freie Zeile. Der Rest funktioniert aber gut. Könnt ihr mir hier weiterhelfen? Und wenn es nicht zu viel Mühe macht würde ich mich noch über einen Tipp freuen, wie ich es anstellen kann, dass ich mich nicht nur in Spalte 1, sondern auch in anderen Spalten der entsprechenden Zeile befinden kann, um diese zu verschieben.   Danke, Maria


Option Explicit

Sub Schüler_archivieren()
'Abfrage, ob Schüler wirklich archiviert werden soll
Dim Antwort
Antwort = MsgBox("Schülerin/Schüler archivieren?", vbYesNo + vbQuestion, "Schüler archivieren?")
If Antwort = vbYes Then

    Dim lngErste As Long
    If ActiveCell.Column = 1 Then
        If ActiveCell.Count = 1 Then
                            With Worksheets("Archiv")
                    lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
                        .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
                    ActiveCell.EntireRow.Copy
                    .Cells(lngErste, 1).PasteSpecial Paste:=xlValues
                    ActiveCell.EntireRow.Delete shift:=xlUp
                End With
            End If
        End If
       End If
    End Sub
Antworten Top
#2
Hi,

sollte so funktionieren:

Code:
Sub Schüler_archivieren()
'Abfrage, ob Schüler wirklich archiviert werden soll
Dim Antwort As Long
Dim lngErste As Long
If ActiveCell.Column <> 1 Or Selection.Count <> 1 Then Exit Sub

Antwort = MsgBox("Schülerin/Schüler archivieren?", vbYesNo + vbQuestion, "Schüler archivieren?")
If Antwort = vbYes Then
    With Worksheets("Archiv")
        lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
        ActiveCell.EntireRow.Copy
        .Cells(lngErste, 1).PasteSpecial Paste:=xlValues
        ActiveCell.EntireRow.Delete shift:=xlUp
    End With
End If
End Sub

für lngErste sollte das reichen:
Code:
lngErste = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • MariaL.
Antworten Top
#3
Hallo Edgar,

vielen Dank. Ich konnte den Code jetzt kürzen und kann mich in jeder Zelle der Zeile befinden. Das ist schon mal super.

Leider wird die kopierte Zeile immer nur in die Zeile 24 eingetragen. Siehe Anhang. Irgendwas mach ich da wohl noch falsch... Danke, Maria

Option Explicit

Sub Schüler_archivieren()
'Abfrage, ob Schüler wirklich archiviert werden soll
Dim Antwort

Antwort = MsgBox("Schülerin/Schüler archivieren?", vbYesNo + vbQuestion, "Schüler archivieren?")
If Antwort = vbYes Then

    Dim lngErste As Long
   
    With Worksheets("Archiv")
        lngErste = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        ActiveCell.EntireRow.Copy
        .Cells(lngErste, 1).PasteSpecial Paste:=xlValues
        ActiveCell.EntireRow.Delete shift:=xlUp
    End With
End If
End Sub


Angehängte Dateien
.pdf   Archivieren.pdf (Größe: 364,88 KB / Downloads: 7)
Antworten Top
#4
Hi,

1. es kann eigentlich nur beim ersten Durchlauf die Zeile 24 sein, bei jedem weiteren Start müsste es weiter gehen.
2. Lösche mal die Zellen von A19 bis A23, da muß ja irgendwas drin sein!
3. Dim-Anweisungen sollten immer am Anfang des Codes stehen. Die korrekte Anweisung für Antwort lautet: Dim Antwort as boolean, wobei die Variable besser blANtwort heißen sollte.
4. Es ist bei Deinem Code möglich mehrere Zeilen auf einmal auszuwählen, ist das gewollt?
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • MariaL.
Antworten Top
#5
Hallo Edgar, es funktioniert.

Danke für den Hinweis mit dem Löschen der Zeilen. Da waren noch Zeichen drinnen, die aufgrund der Formatierung nicht zu sehen waren.

Aber mehrere Zeilen auswählen möchte ich eigentlich nicht. Es soll immer nur eine ausgewählt werden - und zwar die, in der ich mich befinde.

Funktioniert aber jetzt prima, bin jetzt wirklich erleichtert. Maria
Antworten Top
#6
Hi,

Zitat:Es soll immer nur eine ausgewählt werden

Dein Code kontrolliert das aber nicht, d.h. wenn Du aus Versehen zwei Zeilen auswählst, werden auch 2 Zeilen kopiert!

Diese Zeile sollte dann am Anfang stehen:


Code:
If Selection.Count <> 1 Then Exit Sub
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste