Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1584to1588
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA:Zahlen (je Zeile) werden nicht richtig kopiert

VBA:Zahlen (je Zeile) werden nicht richtig kopiert
13.10.2017 07:50:30
Joerschi
Hallo liebes Forum,
heute mal ein VBA-Problem (?), welches ich nicht nachvollziehen kann.
Vorweg genommen - ich bin absoluter VBA-Anfänger und die Lösungen hatte ich mir damals erfragt, dann selbst adaptiert und deswegen kann Form und Aufbau ein bisschen "komisch" aussehen.
Aber zumindest funktionieren sie und ich verstehe grob, was da passiert.
Allerdings verstehe ich folgendes nicht:
Bei mir wird durch verschiedene Rechenoperationen eine Zeile mit Zahlen erzeugt (ca. 300 Stück, alle zwichen 0 und 1 mit ca. 4 Nachkommastellen).
Diese Zeile wird immer und immer wieder mit ihren jeweiligen Ergebnissen zeilenweise nach unten kopiert.
Soweit die Theorie und Aufgabe der Befehle. Funktioniert im Ablauf auch ganz gut.
Problem ist, dass beim Kopieren scheinbar nicht bei jedem Kopiervorgane alle Ergebnisse der Zeile richtig übernommen werden. Sondern eines der häufigsten Ergebnisse bei mir (0,5000) an die Stelle kopiert werden.
Die Rechenergebnisse bzw. stimmen jedoch immer in der zu kopierenden Ausgangszeile.
In meiner "Verzweiflung" habe ich nun schon zigmal
Application.CutCopyMode = False
eingefügt, um vielleicht an irgendeinem entscheidenden Schritt irgendein Artefakt aus dem Zwischenspeicher zu löschen.
Hilft aber nichts, der Fehler bleibt.
Nachfolgend der komplette Code, falls es hilft.
Sub durchlauf()
Dim avntArray As Variant, iavntItem As Variant
Dim i As Long
avntArray = Array("testen") 'Anpassen !!!
For Each iavntItem In avntArray
Worksheets(iavntItem).EnableCalculation = False
Next
Z = Sheets("Analyse").Cells(1, 20) + 82 ' Zielzeile und Kartei, ab wo Eintragung Ergebnisse  _
beginnt (+82 um Ausgleich zwischen Beginn Analysedaten und Beginn Auswertungskopien zu schaffen)
For i = Sheets("Analyse").Cells(1, 20) To Sheets("Analyse").Cells(1, 22)
Sheets("Analyse").Cells(1, 9) = i ' Definiere Zelle (immer in Reihenfolge Nr. Zeilennr. /  _
Spaltennr.)
Application.CutCopyMode = False
Application.Run "Alles_kopieren_fuer_Analyse15_mit14er"
Application.CutCopyMode = False
Sheets("Analyse").Cells(Z, 1) = i
Sheets("Analyse").Cells(Z, 2) = Sheets("Analyse").Cells(48, 44)
Sheets("Analyse").Cells(Z, 3) = Sheets("Analyse").Cells(48, 38)
Sheets("Analyse").Cells(Z, 4) = Sheets("Analyse").Cells(48, 39)
Sheets("Analyse").Cells(Z, 5) = Sheets("Analyse").Cells(48, 40)
Application.CutCopyMode = False
Sheets("Analyse").Cells(Z, 21) = Sheets("Analyse").Cells(52, 22)
Sheets("Analyse").Cells(Z, 22) = Sheets("Analyse").Cells(48, 12)
Sheets("Analyse").Cells(Z, 23) = Sheets("Analyse").Cells(48, 13)
Sheets("Analyse").Cells(Z, 24) = Sheets("Analyse").Cells(48, 14)
Sheets("Analyse").Cells(Z, 25) = Sheets("Analyse").Cells(48, 15)
Sheets("Analyse").Cells(Z, 26) = Sheets("Analyse").Cells(48, 16)
Sheets("Analyse").Cells(Z, 27) = Sheets("Analyse").Cells(48, 17)
Sheets("Analyse").Cells(Z, 28) = Sheets("Analyse").Cells(48, 18)
Sheets("Analyse").Cells(Z, 29) = Sheets("Analyse").Cells(48, 19)
Sheets("Analyse").Cells(Z, 30) = Sheets("Analyse").Cells(48, 20)
Sheets("Analyse").Cells(Z, 31) = Sheets("Analyse").Cells(48, 21)
Sheets("Analyse").Cells(Z, 32) = Sheets("Analyse").Cells(48, 22)
Sheets("Analyse").Cells(Z, 33) = Sheets("Analyse").Cells(48, 23)
Sheets("Analyse").Cells(Z, 34) = Sheets("Analyse").Cells(48, 24)
Sheets("Analyse").Cells(Z, 35) = Sheets("Analyse").Cells(48, 25)
Sheets("Analyse").Cells(Z, 36) = Sheets("Analyse").Cells(48, 26)
Sheets("Analyse").Cells(Z, 37) = Sheets("Analyse").Cells(48, 27)
Sheets("Analyse").Cells(Z, 38) = Sheets("Analyse").Cells(48, 28)
Sheets("Analyse").Cells(Z, 39) = Sheets("Analyse").Cells(48, 29)
Sheets("Analyse").Cells(Z, 40) = Sheets("Analyse").Cells(48, 30)
Sheets("Analyse").Cells(Z, 41) = Sheets("Analyse").Cells(48, 31)
Sheets("Analyse").Cells(Z, 42) = Sheets("Analyse").Cells(48, 32)
Sheets("Analyse").Cells(Z, 43) = Sheets("Analyse").Cells(48, 33)
Sheets("Analyse").Cells(Z, 44) = Sheets("Analyse").Cells(48, 34)
Sheets("Analyse").Cells(Z, 45) = Sheets("Analyse").Cells(48, 35)
Sheets("Analyse").Cells(Z, 47) = Sheets("Analyse").Cells(48, 41)
Sheets("Analyse").Cells(Z, 48) = Sheets("Analyse").Cells(48, 42)
Sheets("Analyse").Cells(Z, 49) = Sheets("Analyse").Cells(48, 43)
Sheets("Analyse").Cells(Z, 50) = Sheets("Analyse").Cells(48, 45)
Sheets("Analyse").Cells(Z, 51) = Sheets("Analyse").Cells(48, 46)
Sheets("Analyse").Cells(Z, 55) = Sheets("Analyse").Cells(18, 11)
Sheets("Analyse").Cells(Z, 56) = Sheets("Analyse").Cells(18, 12)
Application.CutCopyMode = False
Sheets("Analyse").Cells(Z, 59) = Sheets("Analyse").Cells(48, 47)
Sheets("Analyse").Cells(Z, 60) = Sheets("Analyse").Cells(48, 48)
Sheets("Analyse").Cells(Z, 61) = Sheets("Analyse").Cells(48, 49)
Sheets("Analyse").Cells(Z, 62) = Sheets("Analyse").Cells(48, 50)
Sheets("Analyse").Cells(Z, 63) = Sheets("Analyse").Cells(48, 51)
Application.CutCopyMode = False
'  ab hier Kopieren
Sheets("Analyse").Range(Sheets("Analyse").Cells(26, 29), Sheets("Analyse").Cells(26, 370)).Copy
Sheets("Analyse").Cells(Z, 810).PasteSpecial xlPasteValues
Z = Z + 1
Next i
Application.CutCopyMode = False
For Each iavntItem In avntArray
Worksheets(iavntItem).EnableCalculation = True
Next
Application.CutCopyMode = False
End Sub
Der obere Teil ist für eine etwaige Hilfe wahrscheinlich komplett egal (die ganzen Zuordnungen), aber lieber doch mit reinkopiert.
Es würde mich freuen, wenn jemand einen Hinweis hätte, wie man das Problem beheben kann.
Herzliche Grüße
Joerschi

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA:Zahlen (je Zeile) werden nicht richtig kopiert
14.10.2017 21:28:38
onur

Sheets("Analyse").Cells(Z, 810).PasteSpecial xlPasteValues

Arbeitest du mit 810 Spalten?
"Aber zumindest funktionieren sie und ich verstehe grob, was da passiert." Beides wage ich schwer zu bezweifeln, da der Code Müll ist.
1x

Application.CutCopyMode = False
reicht, und zwar NACH Paste.
For i = Sheets("Analyse").Cells(1, 20) To Sheets("Analyse").Cells(1, 22)

Keine Ahnung, was in Z1S20 und Z1S22 steht, aber der ganze Code in der Schleife wird x-mal wiederholt,obwohl nur
Sheets("Analyse").Cells(Z, 1) = i

von i abhängt.
Wenn du mit variablen arbeiten würdest, bräuchtest du nichjt dauernd ähnliche Zeilen zu wiederholen und hättest nur 10% der Zeilenanzahl.
Anzeige
AW: VBA:Zahlen (je Zeile) werden nicht richtig kopiert
14.10.2017 21:32:56
Joerschi
Hallo Onur,
vielen Dank für Deine Antwort.
Wie gesagt - ich bin nur Anfänger. :-/
Aber mal angenommen, die Zeilenanzahl würde auf die 10% reduziert - würde damit das Problem der Fragestellung beseitigt?
(ja, ich arbeite mit so vielen Spalten)
Beste Grüße
Joerschi
AW: VBA:Zahlen (je Zeile) werden nicht richtig kopiert
14.10.2017 21:39:40
onur
Dafür musst du schon die ganze Datei posten, sonst sinnlos (ohne die datei zu sehen).
AW: VBA:Zahlen (je Zeile) werden nicht richtig kopiert
14.10.2017 21:41:55
Joerschi
Das ist leider unmöglich, weil 150 MB groß.... :-(
(wüsste auch nicht, wie ich das in einer separaten Datei simulieren kann. Hatte gehofft, dass das Problem oder ähnliche Sachen eventuell schon bekannt sind)
AW: VBA:Zahlen (je Zeile) werden nicht richtig kopiert
14.10.2017 21:48:57
onur
Das einzige, was ich machen kann, ist Folgendes:
Du erklärst mir GANZ genau (fast Zeile für Zeile), was der code deiner Meinung nach macht und ich schaue mal, was er wirklich macht.
Anzeige
AW: Erklärung Zeile für Zeile...
15.10.2017 16:45:19
Joerschi
Hallo Onur
Per dropbox möchte/darf ich die Datei nicht laden, da auch vertrauliche/sensible Daten enthalten. Und ich weiß wie gesagt leider nicht, wie man das Problem "spiegeln" könnte.
Aber gern nehme ich Dein Angebot an, den Code Zeile für Zeile zu erklären und hoffe, Du kannst mir dabei helfen, mehr zu verstehen oder bestenfalls das Problem zu beseitigen.
Z = Sheets("Analyse").Cells(1, 20) + 82 ' Zielzeile und Kartei, ab wo Eintragung Ergebnisse beginnt (+82 um Ausgleich zwischen Beginn Analysedaten und Beginn Auswertungskopien zu schaffen)
Definiert den Beginn der Zielzeile, wo Ergebnisdaten hinkopiert werden sollen.
For i = Sheets("Analyse").Cells(1, 20) To Sheets("Analyse").Cells(1, 22)

Definiert Start- und Zielwert der zu analysierenden Datensätze (bei mir Spaltenzahlen einer anderen Kartei)
 Sheets("Analyse").Cells(1, 9) = i ' Definiere Zelle (immer in Reihenfolge Nr. Zeilennr. / Spaltennr.)

Definiert den aktuellen Datensatz (Zeilennr aus Kartei "Analyse", mit der aktuell gerechnet werden soll)
Application.Run "Alles_kopieren_fuer_Analyse15_mit14er"
Führt für den aktuellen Datensatz eine andere Berechnungs-Routine durch, wodurch in dem zu kopierenden Zielbereich stets (je Datensatz) neue Werte errechnet werden (alle stets zwischen 0 und 1).
Diese sind dann zu kopieren.
 Sheets("Analyse").Cells(Z, 1) = i
Sheets("Analyse").Cells(Z, 2) = Sheets("Analyse").Cells(48, 44)
Sheets("Analyse").Cells(Z, 3) = Sheets("Analyse").Cells(48, 38)
Sheets("Analyse").Cells(Z, 4) = Sheets("Analyse").Cells(48, 39)
Sheets("Analyse").Cells(Z, 5) = Sheets("Analyse").Cells(48, 40) 

Stark gekürzt. vorher waren da viel mehr Zeilen - alle jedoch mit gleicher Herangehensweise:
Es werden unterschiedliche Zellen weiter oben im Dokument zum Kopieren zugeordnet.
Sheets("Analyse").Range(Sheets("Analyse").Cells(26, 29), Sheets("Analyse").Cells(26, 370)).Copy
Sheets("Analyse").Cells(Z, 810).PasteSpecial xlPasteValues
Es werden aus Zeile 26, Spalte 29 bis Spalte 370 die Daten (als reine Werte) nach unten kopiert.
Unten werden sie Zeile für Zeile untereinander eingefügt (und hier ist das Problem, dass zu kopierende Daten aus der Berechnung oben nicht immer richtig von oben übernommen werden).
 Z = Z + 1
Next i
Definition nächste Zeile und Start nächste Berechnung, solange bis der obige Enddatensatz erreicht ist, mit dem gerechnet/kopiert werden soll.
Ich hoffe, die Erklärungen passen so.
Beste Grüße
Joerschi
Anzeige
AW: Erklärung Zeile für Zeile...
15.10.2017 16:59:59
onur
Sehe ich das richtig:
Sheets("Analyse").Cells(Z, 2) = Sheets("Analyse").Cells(48, 44)
Sheets("Analyse").Cells(Z, 3) = Sheets("Analyse").Cells(48, 38)
Sheets("Analyse").Cells(Z, 4) = Sheets("Analyse").Cells(48, 39)
Sheets("Analyse").Cells(Z, 5) = Sheets("Analyse").Cells(48, 40) 

Du kopierst in cells(z,2 bis xy) immer die gleichen Werte, nämlich
Cells(48, 38 bis xyz)?
Dann hast du ja -zig mal die gleichen werte untereinander, unabhängig von z.
Z wird zwar immer wieder verändert, aber die Quelle ist unabhängig von z immer gleich.
Anzeige
AW: Erklärung Zeile für Zeile...
15.10.2017 18:10:52
Joerschi
Jain.
Durch die Änderung von z wird auch in diesen Zellen ein Wert aus dem jeweiligen Zeilen-Datensatz der Kartei "Analyse" ent-/übernommen (bzw. Wörter und statische Werte - keine Rechenergebnisse).
AW: Erklärung Zeile für Zeile...
15.10.2017 18:17:18
onur
Ohne die Datei hat es keinen Sinn - Es wäre eine Mischung aus Ratespiel und Blindschach.
Für dich sind das vielleicht "hochsensible Daten", aber für mich wären sie nur irgendwelche nichtssagende Zahlenkolonnen.
AW: Erklärung Zeile für Zeile...
15.10.2017 18:26:43
Joerschi
Gäbe es eine Möglichkeit, sie Dir persönlich zukommen zu lassen?
Offen für alle in eine Dropbox möchte ich sie dennoch nicht legen...
Vielleicht könntest Du mir eine Mail schicken (Thomas.Berg3@web.de) und ich schicke Dir einen Download-Link?
Beste Grüße
Joerschi
Anzeige
AW: Erklärung Zeile für Zeile...
15.10.2017 18:30:24
onur
mc22@mailbox.org
Hierhin kannst du den dropbox-link schicken.
AW: VBA:Zahlen (je Zeile) werden nicht richtig kopiert
14.10.2017 21:50:55
onur
Du kannst bei dropbox bis 2 GB posten.

325 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige