Clever-Excel-Forum

Normale Version: VBA kopieren klappt einfach nicht
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo ich habe folgendes Problem:
 
Ich habe eine Datei mit 3 Tabellen
Tabelle1 = Kompletteingabe
Erfassung der Werte durch Zeilenweise in den Spalten A,B und C (Eingabe von A3:C102).
In Spalte D ist zeilenweise ein Dropdownfeld in dem man den Wert „i.O.“ oder „NIO“ auswählen kann.
 
Tabelle 2 = i.O.
Hier sollen alle Zeilen von Tabellenblatt 1 hineinkopiert werden, welche mit „i.O.“ definiert wurden.
Dazu gibt es 4 x 25 Zeilenbreiche, in welche diese hineinkopiert werden sollen.
4x25 deswegen da ja 100 in Tabellenblatt 1 definiert werden können sollen und es könnten ja auch alle 100 i.O. sein.
25 Zeilen pro Tabelle deswegen da ich immer einen max. 25 Stck. Ausdruck brauche.
Die Bereiche sind hier jeweils Bereich1 von A3:C27; Bereich 2 von E3:G27; Bereich 3 von I3:K27 und Bereich 4 von M3:O27.
 
Tabelle 3 = NIO
Ist genau gleich wie Tabelle 2 nur das hier alle NIO eingefügt werden sollen.
 
Nun habe ich als Noob mal etwas gebastelt, was aber nicht klappen will.
 
Kann da mal wer drüber schauen und mir erklären was ich falsch mache ( hier nur die Copy in i.O.)
 
Was mache ich falsch und wie muss ich es richtig machen?
Code:
Sub ZeilenKopieren()
Dim Zeile As Long
Dim ZielZeile As Long

Tabelle2.Range("A3:O27").ClearContents

With Tabelle1

ZielZeile = Range("A3:C27", "E3:G27", "I3:K27", "M3:O27")


For Zeile = 1 To Range("A3:C102")

If .Cells(Zeile, 4).Value = "i.O." Then
.Rows(Zeile).Copy Destination:=Tabelle2.Rows(ZielZeile)
ZielZeile = ZielZeile + 1
End If

Next Zeile
End With
End Sub

 
Vielen Dank an die Helfer
Hi

auf die schnelle fällt mir das auf.
Code:
Range("A3:C27", "E3:G27", "I3:K27", "M3:O27")
richtig ist
Code:
Range("A3:C27, E3:G27, I3:K27, M3:O27")
ob das schon alle Fehler sind?
Sonst bitte eine Bsp-Datei zur Verfügung stellen.

Gruß Elex
Hallo Danke für die Antwort.

Leider war es das noch nicht.

Hier mal die Datei.

Bin echt gespannt was ich noch falsch gemacht habe.
Hallo,

hmm, ich hatte gerade schon eine Lösung entwickelt.

ich stell sie mal rein, ohne mir Deine Beispieldatei anzuschauen.

Code:
Sub ZeilenKopieren()
   Dim Zeile As Long
   Dim ZielIoZeile As Long
   Dim ZielNioZeile As Long
   Dim x As Long, y As Long
   
   Tabelle2.Range("A3:O27").ClearContents
   Tabelle3.Range("A3:O27").ClearContents
   
   x = 1
   y = 1
   ZielIoZeile = 3
   ZielNioZeile = 3
   
   With Tabelle1
      For Zeile = 3 To 102
         If ZielIoZeile = 28 Then
            x = x + 4
            ZielIoZeile = 3
         End If
     
         If ZielNioZeile = 28 Then
            y = y + 4
            ZielNioZeile = 3
         End If
         
         If .Cells(Zeile, 4).Value = "i.O." Then
            .Range(.Cells(Zeile, 1), .Cells(Zeile, 3)).Copy Destination:=Tabelle2.Cells(ZielIoZeile, x)
            ZielIoZeile = ZielIoZeile + 1
         ElseIf .Cells(Zeile, 4).Value = "NIO" Then
            .Range(.Cells(Zeile, 1), .Cells(Zeile, 3)).Copy Destination:=Tabelle3.Cells(ZielNioZeile, y)
            ZielNioZeile = ZielNioZeile + 1
         End If
     
      Next Zeile
   End With
End Sub

Nachher schau ich mal ob es mit Deiner Datei passt.
Hallo Atilla,

das funktioniert hervorragend.

Nur meine Tabellenrahmen ändert er jetzt von Fett auf normal.
Kann man das noch umbauen?

Was ich gerne verstehen würde, bin erst am lernen - warum meine Version nicht funktionieren will.
Jetzt hab ich zwar - und danke dafür - echr super - einen Code, der funktioniert, aber ich verstehe noch nicht was an meinem jetzt genau falsch ist und wo ich die Fehler gemacht habe.


Ganz ganz lieben Dank schon mal für die super Hilfe.
Hallo Mike,

es ist schwer zu sagen, was in Deiner Version falsch ist.
Einfach ausgedrückt, Dir fehlen anscheinend Grundlagen.
Ist nicht böse gemeint. Besser ist es, zu versuchen, den funktionierenden Code zu verstehen.
So bin ich vorgegangen um VBA zu lernen.

Elex hat ja schon eine Sache herausgestellt, aber ob Du das jetzt von der Syntax her richtig schreibst, so wie Elex es gezeigt hat, oder nicht,
das ändert nichts. Denn dieser Konstrukt macht keinen Sinn. Auch danach die Versuche sind ähnlich. Ich müsste Dir Grundlagen erklären, damit
Du ein Wenig begreifst, dass man dieses oder jenes so oder so macht.

Versuch zu Vergleichen und zu verstehen.

So, jetzt schaue ich mir Deine Datei mal an.
Das mit dem Rahmen wird wahrscheinlich mit dem kopieren zu tun haben.
Dann nicht alles kopieren und einfügen, sondern nur die Werte, oder ohne kopieren direkt die Werte übertragen.
Mal schauen....

Hallo,

unten der gesamte Code, statt kopieren und Einfügen werden gleich die werte eingetragen.
Ich habe die Zeilen zum Kopieren auskommentiert und darunter die Zeile zum Übertragen der Werte geschrieben,
damit Du den Unterschied erkennen kannst.
Also, insgesamt nur zwei Zeilen getaucht.

Code:
Sub ZeilenKopieren()

   Dim Zeile As Long
   Dim ZielIoZeile As Long
   Dim ZielNioZeile As Long
   Dim x As Long, y As Long

   Tabelle2.Range("A3:O27").ClearContents
   Tabelle3.Range("A3:O27").ClearContents
   
   x = 1
   y = 1
   ZielIoZeile = 3
   ZielNioZeile = 3
   
   With Tabelle1
      For Zeile = 3 To 102
         If ZielIoZeile = 28 Then
            x = x + 4
            ZielIoZeile = 3
         End If
     
         If ZielNioZeile = 28 Then
            y = y + 4
            ZielNioZeile = 3
         End If
         
         If .Cells(Zeile, 4).Value = "i.O." Then
'            .Range(.Cells(Zeile, 1), .Cells(Zeile, 3)).Copy Destination:=Tabelle2.Cells(ZielIoZeile, x)
            Tabelle2.Range(Tabelle2.Cells(ZielIoZeile, x), Tabelle2.Cells(ZielIoZeile, x + 2)).Value = .Range(.Cells(Zeile, 1), .Cells(Zeile, 3)).Value
            ZielIoZeile = ZielIoZeile + 1
         ElseIf .Cells(Zeile, 4).Value = "NIO" Then
'            .Range(.Cells(Zeile, 1), .Cells(Zeile, 3)).Copy Destination:=Tabelle3.Cells(ZielNioZeile, y)
            Tabelle3.Range(Tabelle3.Cells(ZielNioZeile, y), Tabelle3.Cells(ZielNioZeile, y + 2)).Value = .Range(.Cells(Zeile, 1), .Cells(Zeile, 3)).Value
            ZielNioZeile = ZielNioZeile + 1
         End If
     
      Next Zeile
   End With
End Sub
ok dann fange ich nochmal bei den Grundlagen an.

Ganz lieben Dank für deine Hilfe.

Ich vergleiche dann deinen neuen Code mit dem alten und versuche daraus zu verstehen.

Das funktioniert perfekt - dankeschöööön.