Anzeige

 VBA Excel Zeile Kopieren und woanders einfügen

Mejo

Grünschnabel
#1
Hallo zusammen,

ich habe ein Problem. Wie kann man ein "Mitglied" kopieren und in eine andere Tabelle einfügen. Wenn er zb deaktiviert wird soll die gesamte Zeile kopiert und in eine andere Tabelle eingefügt werden, wo die anderen deaktivierten Mitglieder sich befinden. Um es genauer zu verstehen, was ich damit meine werde ich es ausführlicher erklären. Nehmen wir an es gibt eine Tabelle, in dem sich alle Mitglieder befinden mit sämtlichen Informationen wie Vorname, Nachname, Geburtsdatum usw. Es gibt noch eine Spalte mit der Überschrift "Aktiv", wenn der Mitglied in dieser Zelle zb eine 0 hat, soll es automatisch in eine andere Tabelle kopiert und in der jetzigen Tabelle gelöscht werden. Und all die unteren nach oben gerückt werden, damit keine lücke ensteht. Wie könnte ich sowas schreiben?

Lg
 

Yaslaw

n/a
Moderator
#2
Den Change-Event des Worksheetes nutzen um die Eingabe der Spalte Aktiv auszuwerten.

Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Range)
    'TODO: Prüfen ob das Feld in der Spalte Aktiv ist.
    'TODO: Kopierroutine
End Sub
 

Mejo

Grünschnabel
#3
Ich danke dir für die schnelle Antwort. Ich habe gestern etwas versucht hat fast geklappt. Es kopiert nur 2 Zeilen und fügt es in eine andere Tabelle ein. Was habe ich falsch gemacht?

Code:
Dim a As Long
Dim i As Long
Dim b As Long

a = Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To a
    If Worksheets("Tabelle1").Cells(i, 20).Value = "1" Then
    Worksheets("Tabelle1").Rows(i).Copy
    Worksheets("Tabelle2").Activate
    b = Worksheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("Tabelle2").Cells(b + 1, 1).Select
    ActiveSheet.Paste
    Worksheets("Tabelle1").Activate
    End If
Next
    Application.CutCopyMode = False
    DieseArbeitsmappe.Worksheets("tabelle1").Cells(1, 1).Select
 

Yaslaw

n/a
Moderator
#4
Sollte es mehr kopieren? Ich kenne deine Daten nicht.
Der Code selber sieht nicht falsch aus.

Aber löse dich von den activate und select. Das führt nur zu Chaos. Arbeite mit Objekten
Visual Basic:
    Dim wsSource    As Worksheet
    Dim wsTarget    As Worksheet
    Dim rngRow      As Range
   
    Set wsSource = Worksheets("tabelle1")
    Set wsTarget = Worksheets("tabelle2")
   
    For Each rngRow In wsSource.Range("A2", wsSource.Range("A2").SpecialCells(xlCellTypeLastCell)).rows
        If rngRow.Cells(1, 20) = 1 Then
            rngRow.Copy wsTarget.Cells(wsTarget.rows.Count, 1).End(xlUp).Offset(1)
        End If
    Next rngRow
 

Mejo

Grünschnabel
#8
Danke hat geklappt aber jetzt habe ich ein anderes Problem. Ich habe eine Suchoption geschrieben aber es soll wenn ich wieder auf suchen klicke weitersuchen und nicht wieder von neu anfangen. Was muss ich schreiben?

Code:
Dim x As String
Dim y As String
Dim t As Integer
Dim i As Long
Dim z As String
z = ActiveSheet.UsedRange.Rows.Count
x = TextBox1
y = TextBox2
t = 0

If TextBox1 = "" And TextBox2 = "" Then
MsgBox "nicht gefunden!", vbExclamation
End If

For i = 2 To z
    If Cells(i, 1) = x And Cells(i, 2) = y Then
    t = 1
    Exit For

End If
Next
If t = 1 Then
ActiveSheet.Cells(i, 1).Select


Else
    MsgBox "nicht gefunden!", vbExclamation
    TextBox1 = ""
    TextBox2 = ""
    End If
 

Yaslaw

n/a
Moderator
#9
Du musst ein Variable im Modul definieren (nicht in der Funktion). Diese behält den Wert auch, wenn du die Funktion verlässt.
Dann kannst du beim nächsten Suchen dort starten.
 
#10
Dankeschön werde ich versuchen. Ich habe noch eine Frage. Meine Fragen haben wohl keine Ende :D Ich möchte zb G1:S2 addieren und wenn etwas in dieser Zelle geändert wird, soll der das Ergebnis automatisch auch ändern. Dies Funktioniert, wenn man es manuell eingibt "=Summe(G1:S2)" ich habe es nicht geschafft diese Formel in die jeweilige Zelle mit VBA zu schreiben.

Code:
ActiveSheet.Cells(last, 19).Value = "=SUMME" & "(" & Range("G" & last).Value "+" Range("H"&last).Value 'hier hinten noch die andere Zellen
So funktioniert es leider nicht. "last" steht für die Reihe.
 
#11
Du mischst das VBA Berechnungen mit Excelformeln.
Soll jetzt die Zahl in VBA berechnet werden oder willst du eine Formel setzen?

Für das Zweite;
Code:
"=SUMME(G" & last "+"H" & last & ")"
 
#12
Genau das meinte ich Dankeschön. Es berechnet es aber nicht automatisch dort steht jetzt "#NAME=?" erst wenn ich in die Zelle reingehe berechnet es. Woran kann es liegen?
 
#14
Funktioniert leider nicht, dort steht immer noch "#Name=?". und zu meiner anderen Frage für das Suchen

Ich habe diese Werte ins Modul eingefügt

Code:
Public x As String
Public y As String
Public t As Integer
Public i As Long
Public z As String
und in der Click methode steht das hier jetzt

Code:
z = ActiveSheet.UsedRange.Rows.Count
x = TextBox1
y = TextBox2

If t = 2 Then

For i = i To z
    If Cells(i, 1) = x And Cells(i, 2) = y Then
    t = 2
    Exit For
    
End If
Next

If t = 2 Then
ActiveSheet.Cells(i, 1).Select


Else
    MsgBox "nicht gefunden!", vbExclamation
    TextBox1 = ""
    TextBox2 = ""
    End If
End If



If TextBox1 = "" And TextBox2 = "" Then
MsgBox "nicht gefunden!", vbExclamation
End If

For i = 2 To z
    If Cells(i, 1) = x And Cells(i, 2) = y Then
    t = 1
    Exit For
  
End If
Next

If t = 1 Then
ActiveSheet.Cells(i, 1).Select
t = 2

Else
    MsgBox "nicht gefunden!", vbExclamation
    TextBox1 = ""
    TextBox2 = ""
    End If
das funktioniert auch nicht
 
#16
Mit das funktioniert nicht meine ich, dass es bei der Suche immer noch nur den ersten auswählt. Wenn ich wieder auf Suchen klicke soll es weitersuchen. Der Code steht dafür.

Die andere Frage ist wegen der Berechnung. Es setzt die Formel in die jeweilige Zelle ein aber berechnet es nicht. Das von dir vorgeschlagene Befehl mit .Calculate berechnet die Zelle auch nicht. Wenn ich auf die Zelle draufgehe steht dort die gewünschte Formel oben in der Leiste aber in der Zelle steht "#NAME=?".

Ich hoffe, dass es jetzt deutlicher wurde.
 
#17
Kein Wunder. Du speicherst zwar i im Modul. Jedoch beginnst du immer wieder von vorne
Visual Basic:
Private lastI As Long

Public Sub mySearch()
 Dim x, y, i, t
 x = TextBox1
 y =TextBox2

 for i = lastI+1 to ActiveSheet.UsedRange.Rows.Count
  if Cells(i, 1) = x and Cells(i, 2) = y then
   t = 2
   lastI = i
   exit for
  end if
 next

 ...
 
End Sub
 
#18
Dankeschön, genau dort habe ich eine Denkblockade gehabt. Ich wusste nicht, wie er wieder dort anfangen soll aber jetzt geht es Danke für deine Hilfe.
Das Problem mit dem Rechnen konnte ich immer noch nicht lösen. Es setzt die Formel in die Zelle ein aber rechnet es nicht aus. Erst wenn ich in die Zelle und dann oben in die Leiste rein gehe rechnet es. Bis dahin steht in der Zelle nur "#Name=?" .
 
#20
Das steht in der Zelle:



und das in der Leiste



und das ist der Code

Code:
ActiveSheet.Cells(last, 19).Value = "=SUMME(G" & last & ":" & "R" & last & ")"
Erst wenn ich die Leiste anklicke fängt es an zu rechnen.
 
Anzeige
Anzeige