1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

VBA Excel Zeile Kopieren und woanders einfügen

Dieses Thema im Forum "Visual Basic 6.0, VBA & VBScript" wurde erstellt von Mejo, 13. Februar 2018.

  1. Mejo

    Mejo Grünschnabel

    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
     
  2. Yaslaw

    Yaslaw n/a Moderator

    Den Change-Event des Worksheetes nutzen um die Eingabe der Spalte Aktiv auszuwerten.

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

    Mejo Grünschnabel

    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 (Text):
    1. Dim a As Long
    2. Dim i As Long
    3. Dim b As Long
    4.  
    5. a = Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
    6.  
    7. For i = 2 To a
    8.     If Worksheets("Tabelle1").Cells(i, 20).Value = "1" Then
    9.     Worksheets("Tabelle1").Rows(i).Copy
    10.     Worksheets("Tabelle2").Activate
    11.     b = Worksheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row
    12.     Worksheets("Tabelle2").Cells(b + 1, 1).Select
    13.     ActiveSheet.Paste
    14.     Worksheets("Tabelle1").Activate
    15.     End If
    16. Next
    17.     Application.CutCopyMode = False
    18.     DieseArbeitsmappe.Worksheets("tabelle1").Cells(1, 1).Select
    19.    
     
  4. Yaslaw

    Yaslaw n/a Moderator

    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
    Code (Visual Basic):
    1.     Dim wsSource    As Worksheet
    2.     Dim wsTarget    As Worksheet
    3.     Dim rngRow      As Range
    4.    
    5.     Set wsSource = Worksheets("tabelle1")
    6.     Set wsTarget = Worksheets("tabelle2")
    7.    
    8.     For Each rngRow In wsSource.Range("A2", wsSource.Range("A2").SpecialCells(xlCellTypeLastCell)).rows
    9.         If rngRow.Cells(1, 20) = 1 Then
    10.             rngRow.Copy wsTarget.Cells(wsTarget.rows.Count, 1).End(xlUp).Offset(1)
    11.         End If
    12.     Next rngRow
     
  5. Mejo

    Mejo Grünschnabel

    Danke :) es soll überprüfen ob in der 20. spalte eine 1 steht, wenn ja soll es kopieren und in die "Tabelle2" einfügen
     
  6. Yaslaw

    Yaslaw n/a Moderator

    Das macht mein Code
    rngRow ist die ganze Zeile.
    If rngRow.Cells(1, 20) = 1 Then prüft ob in der Spalte 20 eine 1 steht.
     
  7. Mejo

    Mejo Grünschnabel

    Okay Dankeschön. Ich probier es gleich mal aus und schreibe dann
     
  8. Mejo

    Mejo Grünschnabel

    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 (Text):
    1. Dim x As String
    2. Dim y As String
    3. Dim t As Integer
    4. Dim i As Long
    5. Dim z As String
    6. z = ActiveSheet.UsedRange.Rows.Count
    7. x = TextBox1
    8. y = TextBox2
    9. t = 0
    10.  
    11. If TextBox1 = "" And TextBox2 = "" Then
    12. MsgBox "nicht gefunden!", vbExclamation
    13. End If
    14.  
    15. For i = 2 To z
    16.     If Cells(i, 1) = x And Cells(i, 2) = y Then
    17.     t = 1
    18.     Exit For
    19.  
    20. End If
    21. Next
    22. If t = 1 Then
    23. ActiveSheet.Cells(i, 1).Select
    24.  
    25.  
    26. Else
    27.     MsgBox "nicht gefunden!", vbExclamation
    28.     TextBox1 = ""
    29.     TextBox2 = ""
    30.     End If
    31.  
    32.    
     
  9. Yaslaw

    Yaslaw n/a Moderator

    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. Mejo

    Mejo Grünschnabel

    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 (Text):
    1. 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. Yaslaw

    Yaslaw n/a Moderator

    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 (Text):
    1. "=SUMME(G" & last "+"H" & last & ")"
     
  12. Mejo

    Mejo Grünschnabel

    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?
     
  13. Yaslaw

    Yaslaw n/a Moderator

    Dann starten die Berechnung über VBA
    Code (Text):
    1. ActiveSheet.Cells(last, 19).Calculate
     
  14. Mejo

    Mejo Grünschnabel

    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 (Text):
    1. Public x As String
    2. Public y As String
    3. Public t As Integer
    4. Public i As Long
    5. Public z As String
    und in der Click methode steht das hier jetzt

    Code (Text):
    1. z = ActiveSheet.UsedRange.Rows.Count
    2. x = TextBox1
    3. y = TextBox2
    4.  
    5. If t = 2 Then
    6.  
    7. For i = i To z
    8.     If Cells(i, 1) = x And Cells(i, 2) = y Then
    9.     t = 2
    10.     Exit For
    11.    
    12. End If
    13. Next
    14.  
    15. If t = 2 Then
    16. ActiveSheet.Cells(i, 1).Select
    17.  
    18.  
    19. Else
    20.     MsgBox "nicht gefunden!", vbExclamation
    21.     TextBox1 = ""
    22.     TextBox2 = ""
    23.     End If
    24. End If
    25.  
    26.  
    27.  
    28. If TextBox1 = "" And TextBox2 = "" Then
    29. MsgBox "nicht gefunden!", vbExclamation
    30. End If
    31.  
    32. For i = 2 To z
    33.     If Cells(i, 1) = x And Cells(i, 2) = y Then
    34.     t = 1
    35.     Exit For
    36.  
    37. End If
    38. Next
    39.  
    40. If t = 1 Then
    41. ActiveSheet.Cells(i, 1).Select
    42. t = 2
    43.  
    44. Else
    45.     MsgBox "nicht gefunden!", vbExclamation
    46.     TextBox1 = ""
    47.     TextBox2 = ""
    48.     End If
    das funktioniert auch nicht
     
  15. Yaslaw

    Yaslaw n/a Moderator

    OK. Jetzt habe wir Chaos. mehrere Fragen, irgendwelche Codeschnipsel mit dem Kommentar "Funktioniert nicht"

    Das Hiflt nicht.
     
  16. Mejo

    Mejo Grünschnabel

    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. Yaslaw

    Yaslaw n/a Moderator

    Kein Wunder. Du speicherst zwar i im Modul. Jedoch beginnst du immer wieder von vorne
    Code (Visual Basic):
    1. Private lastI As Long
    2.  
    3. Public Sub mySearch()
    4.  Dim x, y, i, t
    5.  x = TextBox1
    6.  y =TextBox2
    7.  
    8.  for i = lastI+1 to ActiveSheet.UsedRange.Rows.Count
    9.   if Cells(i, 1) = x and Cells(i, 2) = y then
    10.    t = 2
    11.    lastI = i
    12.    exit for
    13.   end if
    14.  next
    15.  
    16.  ...
    17.  
    18. End Sub
     
  18. Mejo

    Mejo Grünschnabel

    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=?" .
     
  19. Yaslaw

    Yaslaw n/a Moderator

    Ist schwer, ohne konkretes Beispiel.
     
  20. Mejo

    Mejo Grünschnabel

    Das steht in der Zelle:

    [​IMG]

    und das in der Leiste

    [​IMG]

    und das ist der Code

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