Ergebnis 1 bis 9 von 9

Thema: Kopieren und Einfügen, schaffe es nicht (Office 2016)

  1. #1
    Office-Hilfe.com - Neuling
    Registriert seit
    03.10.2020
    Beiträge
    5

    Kopieren und Einfügen, schaffe es nicht

    Hallo liebe Profis,
    habe ein fuer mich grosses Problem, ich schaffe es nicht, einen Zellinhalt aus einer Tabelle in eine andere Tabelle zu kopieren. Die Besonderheit ist, dass die Namen der Tabellenblaetter in einer anderen Tabelle(Daten) zusammmengefasst unter B7 stehen. Jetzt soll z.B. aus Tabelle(Name1) die Zelle N5 kopiert werden. Das habe ich geschafft. Habe es geprueft ueber msgbox, blattname und xa werden korrekt angezeigt
    Jetzt soll dieser Zellwert in die Tabelle(Daten) kopiert werden, in der alle Tabellen(Name1, Name2, usw) untereinander ab B7 stehen. Und zwar die Zelle N5 aus
    Tabelle(Name1) in die Tabelle(Daten) und zwar in die Zeile, wo Name1 vorkommt. Habe ich micht verstaendlich ausgedruekt ? Klar eine Beispieletabelle waere besser, kommt dann noch

    Dim i As Integer
    Dim xa As Variant

    blattname = TextBox1.Value

    xa = Worksheets(blattname).Range("N5").Value


    With Sheets("Daten")


    For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
    If .Range("B7" & i) Like blattname Then .Range("H7" & i) = xa
    Next i


    End With
    End Sub

    Sage schon mal Danke

    Gruss Boris

  2. #2
    Office-Hilfe.com - Profi
    Registriert seit
    24.11.2008
    Beiträge
    2.359
    Hallo Boris,

    der Range-Ausdruck .Range("B7" & i) in Verbindung mit With Sheets("Daten") und For i = 1 To ... bedeutet doch, dass du auf folgende Zellen zugreifst:
    Daten!B71, Daten!B72, Daten!B73, usw.
    Analoges gilt auch für .Range("H7" & i):
    Daten!H71, Daten!H72, Daten!H73, usw.

    Da du aber auf Zeilen bzw. Zellen, die unterhalb von Daten!B7 stehen, zugreifen willst, müsste der einschlägige Range-Ausdruck lauten:
    .Range("B" & (i+7))
    bzw.
    .Range("H" & (i+7))

    Du könntest alternativ auch folgende Formeln einsetzen:
    .Cells(i+7, "B") oder auch .Cells(i+7, 2)
    bzw.
    .Cells(i+7, "H") oder auch .Cells(i+7, 8)
    Geändert von Exl121150 (09.10.2020 um 09:21 Uhr)
    Liebe Grüße
    Anton Exl

    Windows 10 (x64)
    Office 2016 Professional Plus

  3. #3
    Office-Hilfe.com - Neuling
    Registriert seit
    03.10.2020
    Beiträge
    5
    Danke für die schnelle Antwort Anton, werde mich am WE jetzt mal hinsetzen und es ausprobieren. Melde mich nochmals! Gruss

    Habe es nicht ausgehalten, musste es gleich probieren! Und Super, es klappt! Bist halt ein Profi :-) Hast mir das WE gerettet!

    Vielen Dank!
    Geändert von Chang (09.10.2020 um 18:20 Uhr)

  4. #4
    Office-Hilfe.com - Neuling
    Registriert seit
    03.10.2020
    Beiträge
    5
    Hallo, bin erst heute dazu gekommen, mich damit wieder zu beschäftigen. Es ist mir etwas aufgefallen, es wird in das Blatt Daten (bei gleichem Blattnamen) nur in der ersten Zeile etwas eingetragen, weiter Einträge werden ignoriert.
    Dim i As Integer

    blattname = TextBox1.Value

    With Sheets("Daten")

    For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
    If .Range("B" & (i + 6)) Like blattname Then .Range("H" & (i + 6)) = Worksheets(blattname).Range("M3").Value
    Next i

    For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
    If .Range("B" & (i + 6)) Like blattname Then .Range("I" & (i + 6)) = Worksheets(blattname).Range("M4").Value
    Next i

    For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
    If .Range("B" & (i + 6)) Like blattname Then .Range("J" & (i + 6)) = Worksheets(blattname).Range("N3").Value
    Next i

    End With

    Wenn also Einträge aus einem anderen Blatt dazukommen und die dann ja darunter stehen, dies funktioniert nicht?
    ich denke, dass es mit der Zählvariable zu tun haben könnte, habe das auf i+6 geändert, dann wird die erste Zeile, wenn gefunden gefüllt, bei i+7 die zweite.

    Kannst Du dir das nochmal anschauen? Danke
    Geändert von Chang (16.10.2020 um 09:52 Uhr)

  5. #5
    Office-Hilfe.com - Profi
    Registriert seit
    24.11.2008
    Beiträge
    2.359
    Hallo,

    ich verstehe leider überhaupt nicht, was du möchtest, weil alles widersprüchlich ist: sowohl das Makro als auch der darunter angefügte Text.
    Ich beschreibe daher im Folgenden, was dein Makro macht:
    1. blattname = TextBox1.Value
      Der Inhalt der "TextBox1" wird in der Variable "blattname" gespeichert. Das soll offenbar der Name eines Arbeitsblattes sein, von dem Daten holst und im Arbeitsblatt "Daten" speichern willst.
    2. With Sheets("Daten"): WithBlock: End With
      Alle Funktionen, die im "WithBlock" enthalten sind und mit einem "." beginnen, sollen sich auf das Arbeitsblatt "Daten" beziehen.
    3. For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row: ForBlock: Next i
      Der Ausdruck ".Cells(.Rows.Count, 1).End(xlUp).Row" schaut in Spalte A des Arbeitsblattes "Daten" nach, in welcher Zeile sich der letzte Dateneintrag befindet. D.h. befindet sich in Spalte A in Zelle Daten!A14 der letzte Dateneintrag (also in den Zellen darunter in A15, A16, A17, ..., A1048576 keine Daten), dann ergibt dieser Ausdruck den Wert 14, weil Zelle A14 die letzte Zelle der A-Spalte ist mit Daten.
      Somit durchläuft die Variable "i" die Ganzzahlwerte von 1 bis 14 (wenn ich vorgenanntes Beispiel hernehme) und jeder dieser Werte wird auf den ForBlock angewendet.
    4. If .Range("B" & (i + 6)) Like BlattName Then .Range("H" & (i + 6)) = Worksheets(BlattName).Range("M3").Value
      Wenn ich das Beispiel von vorhin mit letzte Datenzelle in A14 anwende, so wird der ForBlock 14 mal durchlaufen mit "i"-Werten von 1 bis 14:
      If .Range("B7") Like BlattName Then .Range("H7") = Worksheets(BlattName).Range("M3").Value 'weil i=1 --> i+6 = 7
      If .Range("B8") Like BlattName Then .Range("H8") = Worksheets(BlattName).Range("M3").Value
      If .Range("B9") Like BlattName Then .Range("H9") = Worksheets(BlattName).Range("M3").Value
      ...
      If .Range("B18") Like BlattName Then .Range("H18") = Worksheets(BlattName).Range("M3").Value
      If .Range("B19") Like BlattName Then .Range("H19") = Worksheets(BlattName).Range("M3").Value
      If .Range("B20") Like BlattName Then .Range("H20") = Worksheets(BlattName).Range("M3").Value
      'weil i=14 --> i+6 = 20
    5. For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
      If .Range("B" & (i + 6)) Like BlattName Then .Range("I" & (i + 6)) = Worksheets(BlattName).Range("M4").Value
      Next i

      Da sich in der Spalte A nichts geändert hat, ist die Zelle A14 immer noch die letzte Zelle dieser Spalte mit Daten, daher ergibt der Ausdruck
      .Cells(.Rows.Count, 1).End(xlUp).Row immer noch 14 und somit läuft die Variable "i" immer noch von 1 bis 14 und es werden folgende 14 Befehlszeilen ausgefüht:
      If .Range("B7") Like BlattName Then .Range("I7") = Worksheets(BlattName).Range("M4").Value 'weil i=1 --> i+6 = 7
      If .Range("B8") Like BlattName Then .Range("I8") = Worksheets(BlattName).Range("M4").Value
      If .Range("B9") Like BlattName Then .Range("I9") = Worksheets(BlattName).Range("M4").Value
      ...
      If .Range("B18") Like BlattName Then .Range("I18") = Worksheets(BlattName).Range("M4").Value
      If .Range("B19") Like BlattName Then .Range("I19") = Worksheets(BlattName).Range("M4").Value
      If .Range("B20") Like BlattName Then .Range("I20") = Worksheets(BlattName).Range("M4").Value
      'weil i=14 --> i+6 = 20
    6. For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
      If .Range("B" & (i + 6)) Like BlattName Then .Range("J" & (i + 6)) = Worksheets(BlattName).Range("N3").Value
      Next i

      Da sich in der Spalte A nichts geändert hat, ist die Zelle A14 immer noch die letzte Zelle dieser Spalte mit Daten, daher ergibt der Ausdruck
      .Cells(.Rows.Count, 1).End(xlUp).Row immer noch 14 und somit läuft die Variable "i" immer noch von 1 bis 14 und es werden folgende 14 Befehlszeilen ausgefüht:
      If .Range("B7") Like BlattName Then .Range("J7") = Worksheets(BlattName).Range("N3").Value 'weil i=1 --> i+6 = 7
      If .Range("B8") Like BlattName Then .Range("J8") = Worksheets(BlattName).Range("N3").Value
      If .Range("B9") Like BlattName Then .Range("J9") = Worksheets(BlattName).Range("N3").Value
      ...
      If .Range("B18") Like BlattName Then .Range("J18") = Worksheets(BlattName).Range("N3").Value
      If .Range("B19") Like BlattName Then .Range("J19") = Worksheets(BlattName).Range("N3").Value
      If .Range("B20") Like BlattName Then .Range("J20") = Worksheets(BlattName).Range("N3").Value
      'weil i=14 --> i+6 = 20

    Ich muss nur wissen, wo du welche Zellbereiche mit deinen 3 For-Schleifen bespeichern willst.
    Am besten ist eine (anonymisierte) Musterdatei, an der ich sehen kann, wo du was hin haben willst.

    ... nur in der ersten Zeile etwas eingetragen, weiter Einträge werden ignoriert.
    Oder besteht das Problem darin, dass du mit dem Ausdruck .Cells(.Rows.Count, 1).End(xlUp).Row die falsche Spalte abfragst. Wenn nämlich in Spalte A nur in Zelle Daten!A1 Daten enthalten sind, so ergibt der Ausdruck .Cells(.Rows.Count, 1).End(xlUp).Row den Wert 1 und die Variable "i" läuft in "For i = 1 to 1" und es wird nur je ein Befehl pro ForBlock ausgeführt.
    Wenn du nämlich in Wahrheit diesen Zeilenabfrageausdruck auf Spalte B anwenden möchtest, müsstest du die 1 durch eine 2 ersetzen, also:
    .Cells(.Rows.Count, 2).End(xlUp).Row
    Geändert von Exl121150 (16.10.2020 um 14:13 Uhr)
    Liebe Grüße
    Anton Exl

    Windows 10 (x64)
    Office 2016 Professional Plus

  6. #6
    Office-Hilfe.com - Neuling
    Registriert seit
    03.10.2020
    Beiträge
    5
    Hallo Anton,
    Danke, dass Du dir soviel Mühe gibst mir zu helfen! ich habe etwas zustammengestellt, was eigentlich dem Sinn entspricht. Der Wert aus Blattname kommt jetzt zwar nicht aus der userform, sondern aus der Tabelle(Test, A1), die Fehler sind aber wie im Original die gleichen. Ich habe z.B. unter Daten die Reihenfolge geändert,weggelassen usw. Diie zu kopierenden Daten kommen alle aus AB-LC 4,...6,...1 und zwar aus M3,M4,N3. Im Original können Blätter hinzukommen oder entfernt werden
    Angehängte Dateien Angehängte Dateien

  7. #7
    Office-Hilfe.com - Profi
    Registriert seit
    24.11.2008
    Beiträge
    2.359
    Hallo,

    ich habe dir in der beiliegenden Excel-Datei im Arbeitsblatt "Test" einen zweiten Button "Blätter D-Spalte übertragen" eingefügt.
    Klickst du auf diesen, werden die Daten der Arbeitsblätter, die in der Spalte D ab Zelle D1 enthalten sind, ins Blatt "Daten" zeilenweise übertragen.
    Dabei werden die übertragenen Zeilen an bestehende Datenzeilen angefügt.
    Angehängte Dateien Angehängte Dateien
    Liebe Grüße
    Anton Exl

    Windows 10 (x64)
    Office 2016 Professional Plus

  8. #8
    Office-Hilfe.com - Neuling
    Registriert seit
    03.10.2020
    Beiträge
    5
    Wow, da hast Du ja etwas auf die Beine gestellt, wäre für mich undenkbar! Morgen probiere ich es aus! Weiß gar nicht, wie ich mich mal revanchieren könnte! (Vielleicht hast Du ja mal etwas im Rhein-Neckar Raum mit dem LKW zu fahren :-) )
    Gruß und Danke

  9. #9
    Office-Hilfe.com - Profi
    Registriert seit
    24.11.2008
    Beiträge
    2.359
    Hallo,

    ich habe das Makro aus Posting #7 etwas verbessert, etwas schneller gemacht und mit Kommentar versehen.
    (Vielleicht hast Du ja mal etwas im Rhein-Neckar Raum mit dem LKW zu fahren :-) )
    Ich bin leider in der Nähe von Linz an der Donau (in Österreich) zu Hause.
    Angehängte Dateien Angehängte Dateien
    Liebe Grüße
    Anton Exl

    Windows 10 (x64)
    Office 2016 Professional Plus

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
Excel Ticker - News, Tipps und Tricks zu Microsoft Excel