Supportnet Computer Supportnet Games Supportnet Kochen Explipedia
Login: guestBesucher online: 116
Supportnet Computerforum
SUPPORT
Home
Forum
Tipps & Infos
Blitz Angebote
Members
Hilfe
Video

TOP THEMEN
SSD Test
Alles über SSDs

Android Tipps
iPad Tipps
Google Tipps
Windows 8 FAQ
Windows 7 FAQ
E-Mail FAQ
Netzwerk FAQ
Festplatten FAQ
Datenrettung FAQ
Bildbearbeitung FAQ

Top iPhone Apps
Computer Einsteiger
Die 5 besten...
Explipedia
Themen
Direktlinks

Neue Einträge
News einsenden News einschicken
Tipps einsenden Tipp einschicken

SN-LINKS

Suche
Befreundete Seiten
Top Seiten

Supportnet/Forum/Tabellenkalkulation



Supportnet/Forum/Tabellenkalkulation
von Makroschnacker vom 14.07.2017, 14:41 Diese Seite den Supportnet Favoriten hinzufügen  Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden


VBA: Werte mit Makro kopieren und einfügen

 (313 Hits)

Guten Mittag liebes Forum,

ich möchte Datensätze aus verschiedenen Tabellenblättern in das Tabellenblatt "Datensätze" derselben Arbeitsmappe kopieren und untereinanderschreiben. Dabei sollen nur die Werte (und wenn möglich auch die Formate) kopiert werden, nicht jedoch die Formeln mit denen die Datensätze zuvor in den einzelnen Tabellenblättern ermittelt wurden.
Folgendes Makro habe ich mir bereits zusammen kopiert und es funktioniert auch soweit ganz gut - allerdings würde ich gerne programmieren, dass die Daten aus den einzelnen Tabellenblättern immer erst dort eingefügt werden, wo eine leere Zeile vorliegt, da die Länge der Datensätze aus den Tabellenblättern nicht konstant ist. Soll dann im Endeffekt so aussehen, dass die einzelnen Datensätze ohne Zwischenraum untereinander kopiert werden und keine Daten überschrieben werden.

Sub Kopieren()
Set Summarysheet = ThisWorkbook.Sheets("Datensätze")
Summarysheet.Rows.Delete xlUp 'clear summary sheet
For Each ws In ThisWorkbook.Sheets
If ws.Name <> "Datensätze" Then
Set DestCell = Summarysheet.Cells(Rows.Count, 1).End(xlUp).Offset(1)
ws.Range("a5:u214").Copy
DestCell.PasteSpecial xlPasteValues
DestCell.PasteSpecial xlPasteFormats
End If
Next
Application.CutCopyMode = False
End Sub

Die Hilfe von einem der schlauen Köpfe dieses Forums würde mich sehr freuen.

Gruß Mr. M


Antwort schreiben 50 Bonuspunkte

Antworten...
Antwort 1 von M.O. vom 14.07.2017, 17:31 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo,

dein Makro fügt doch die Daten untereinander ein, ohne dass Daten überschrieben werden.

Es könnte höchstens Probleme geben, wenn Spalte A leer ist, aber in der betreffenden Zeile in anderen Spalten noch Daten stehen.


Gruß

M.O.


Antwort noch nicht bewertet Als gute Antwort bewerten
Diese Antwort hat mein Problem gelöst
Antwort 2 von Makroschnacker vom 17.07.2017, 08:52 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo,

du hast es erkannt. Genau das ist das Problem. Die Daten gehen immer über drei Zeilen, wobei in Spalte A jeweils in der ersten Zeile nur eine Identifikationsnummer steht, allerdings in den anderen Zeilen Spalte A leer ist.
Hast du irgendeine Lösung dafür?

Gruß Mr. M.


Antwort noch nicht bewertet
Antwort 3 von M.O. vom 17.07.2017, 10:46 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo,

das hättest du ja in deiner Problembeschreibung schon sagen können ;-).

Falls es in der Spalten B das Problem nicht gibt, dann ändere die Zeile
Set DestCell = Summarysheet.Cells(Rows.Count, 1).End(xlUp).Offset(1)

in
Set DestCell = Summarysheet.Cells(Rows.Count, 2).End(xlUp).Offset(1)

Falls die letzte Zeile immer in einer anderen Spalten sein kann, so kannst du das wie folgt lösen
Set DestCell = Summarysheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1

Das funktioniert aber nur ohne Fehler, wenn in deinem Summarysheet nur die Spalten A bis U genutzt werden.

Gruß

M.O.


Antwort noch nicht bewertet Als gute Antwort bewerten
Diese Antwort hat mein Problem gelöst
Antwort 4 von Makroschnacker vom 18.07.2017, 09:34 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo,

vielen Dank! Die Antwort hilft mir schon mal sehr viel.
Ich hätte noch ein paar kleinere Probleme, bei denen mir vielleicht jemand helfen kann. Zunächst mal werden die Daten jetzt im Tabellenblatt "Datensätze" beginnend in Zelle B2 eingefügt. Es wäre allerdings gut, wenn die Daten mit Zelle A1 beginnend eingefügt werden.
Zum Zweiten würde ich gerne das Format der Daten aus den einzelnen Tabellenblättern beibehalten. Beispielsweise sind einige Zellen ursprünglich mit Farben hinterlegt, was beim Einfügen am besten erhalten bleiben soll.

Gruß Mr. M.


Antwort noch nicht bewertet
Antwort 5 von M.O. vom 18.07.2017, 10:27 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo,

versuch mal das folgende Makro:

Sub Kopieren()
Dim Summarysheet As Worksheet
Dim ws As Worksheet
Dim lngLast As Long

Set Summarysheet = ThisWorkbook.Sheets("Datensätze")
Summarysheet.Rows.Delete xlUp 'clear summary sheet

For Each ws In ThisWorkbook.Sheets
   If ws.Name <> "Datensätze" Then
     'letzte beschriebene Zeile im Summarysheet feststellen
     lngLast = Summarysheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
     'Prüfen, ob diese Zeile leer ist, falls nein, Zähler um 1 erhöhen
     If Application.CountA(Rows(lngLast)) > 0 Then lngLast = lngLast + 1
     
     ws.Range("A5:U214").Copy
     With Summarysheet.Cells(lngLast, 1)
      .PasteSpecial xlPasteValues          'Werte einfügen
      .PasteSpecial xlPasteFormats         'Formate einfügen
     End With
     
   End If
Next

Application.CutCopyMode = False

End Sub


Gruß

M.O.


Antwort noch nicht bewertet Als gute Antwort bewerten
Diese Antwort hat mein Problem gelöst
Antwort 6 von Makroschnacker vom 18.07.2017, 11:07 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Leider erhalte ich die folgende Fehlermeldung: "Laufzeitfehler '1004': Die SpecialCells-Eigenschaft des Range-Objektes kann nicht zugeordnet werden."
Kannst du mir da weiterhelfen?

Gruß Mr. M.


Antwort noch nicht bewertet
Antwort 7 von M.O. vom 18.07.2017, 12:04 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo,

bei mir läuft das Makro einwandfrei.
Aber ersetze mal die Zeile
lngLast = Summarysheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

durch
lngLast = Summarysheet.Cells(Rows.Count, 2).End(xlUp).Row

Dadurch wird die letzte beschriebene Zeile in der Spalte B ermittelt.

Gruß

M.O.


Antwort noch nicht bewertet Als gute Antwort bewerten
Diese Antwort hat mein Problem gelöst
Antwort 8 von Makroschnacker vom 18.07.2017, 14:41 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Sehr gut. Funktioniert alles! Vielen Dank!

Gruß Mr. M.


Antwort noch nicht bewertet




Hinweis
Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum.

MACHEN SIE IHRE WEBSITE ATTRAKTIVER
Sie haben eine eigene Website und wollen Ihre Besucher auf den Supportnet-Service aufmerksam machen? Kopieren Sie einfach den Quellcode in Ihre Seite und jeder Besucher Ihrer Seite kann direkt auf die Supportnet-Datenbank zugreifen.

My Supportnet


SUCHE

Gruppen im Forum
Betriebsysteme
Software
Hardware
Netzwerk
Programmierung
Sonstiges

Impressum © 1997-2015 SupportNet
Version: supportware 1.8.230E / 18.10.2010, Startzeit:Sun Nov 12 22:19:35 2017