Registriert seit: 25.05.2017
Version(en): Office2010
Hallo schauan,
vielen lieben Dank wieder für Deine Hilfestellung. Soweit habe ich das verstanden, wie Du es beschreibst. Ich will das auch gleich mal ausprobieren. Nur eine Sache:
Wenn ich die aktuelle Erweiterung (also die Prüfung ob es Rabatt gibt und dann das zusätzliche Einfügen einer weiteren Zeile) nach dem Zeilenhochsetzer des ersten Aktes einfüge, muss es dann bei der Übernahme der Daten nicht wieder heißen .... Cells(iCnt + 1, 2).Value = Cells(iCnt, 2).Value Cells(iCnt + 1, 4).Value = Cells(iCnt, 4).Value ...
statt
... Cells(iCnt + 2, 2).Value = Cells(iCnt, 2).Value Cells(iCnt + 2, 4).Value = Cells(iCnt, 4).Value ...
Also iCnt +1 anstatt iCnt + 2?
Registriert seit: 25.05.2017
Version(en): Office2010
01.06.2017, 23:43
(Dieser Beitrag wurde zuletzt bearbeitet: 01.06.2017, 23:43 von dusticelli.)
Ich nochmal. Hab jetzt beides mal ausprobiert, aber irgendwo ist noch etwas falsch. Es klappt nicht. Egal ob ich iCnt+1 oder +2 mache es wird keine weitere (zweite) Zeile eingefügt. Das mit den Versandkosten klappt, aber der neue Block wird iwie nicht berücksichtigt. Es gibt aber auch keine Fehler. Hier mal der Code Code: Sub ZeileDazu() Dim iCnt iCnt = 2 'Mach es solange in Zelle icnt in Spalte A etwas anderes als nix steht Do While Cells(iCnt, 2) <> "" 'Mit der nächsten Zelle With Cells(iCnt + 1, 2) 'Wenn was anderes drin steht, dann If .Value <> Cells(iCnt, 2) Then 'Zeile hinzufuegen Rows(iCnt + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 'In Spalte A der neuen Zeile Wert aus Spalte H der alten Zeile einfuegen Cells(iCnt + 1, 2).Value = Cells(iCnt, 2).Value Cells(iCnt + 1, 4).Value = Cells(iCnt, 4).Value Cells(iCnt + 1, 7).Value = Cells(iCnt, 7).Value Cells(iCnt + 1, 30).Value = Cells(iCnt, 30).Value Cells(iCnt + 1, 70).Value = "V-001" Cells(iCnt + 1, 71).Value = "Versandkostenanteil" Cells(iCnt + 1, 73).Value = "1" Cells(iCnt + 1, 74).Value = Cells(iCnt, 50).Value 'Zeilenzaehler hochsetzen iCnt = iCnt + 1 'wenn Rabatt vorhanden If Cells(iCnt, 47).Value > 0 Then 'noch eine Zeile hinzufuegen Rows(iCnt + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 'In Spalte A der neuen Zeile Wert aus Spalte H der alten Zeile einfuegen Cells(iCnt + 1, 2).Value = Cells(iCnt, 2).Value Cells(iCnt + 1, 4).Value = Cells(iCnt, 4).Value Cells(iCnt + 1, 7).Value = Cells(iCnt, 7).Value Cells(iCnt + 1, 30).Value = Cells(iCnt, 30).Value Cells(iCnt + 1, 70).Value = "RAB" Cells(iCnt + 1, 71).Value = "Rabatt" Cells(iCnt + 1, 73).Value = "1" Cells(iCnt + 1, 74).Value = Cells(iCnt, 47).Value * -1 'Zeilenzaehler mochmal hochsetzen iCnt = iCnt + 1 'Ende wenn Rabatt vorhanden End If 'Ende Wenn was anderes drin steht, dann End If 'Ende Mit der nächsten Zelle End With 'Zeilenzaehler hochsetzen iCnt = iCnt + 1 'Ende Mache solange in Spalte A etwas anderes als nix steht Loop End Sub
NACHTRAG: Klappt jetzt! :D Ich habe im ersten Block noch das Feld mit dem Rabattwert in die neue Zeile geschrieben. Spalte 47 war halt vorher aus Sicht des Codes leer, und deshalb wurde nichts ausgeführt.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, Probleme, die sich fast von selbst lösen, sind doch die besten
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• dusticelli
Registriert seit: 25.05.2017
Version(en): Office2010
Hehe, ja das stimmt.
Schauan, danke nochmal für die Hilfestellungen.
Gibt es eigentlich irgendwo ein Register wo ich nachsehen kann was so Dinge wie "iCnt" z.B. bedeuten?
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
die eigentlichen Namen - hier cnt - sind zumeist individuelle Eigenheiten. Man sollte für Variablenbezeichnungen Kürzel verwenden, mit denen man zumindest selbst was anfangen kann und eventuell auch andere, falls man ein Projekt mal übergeben muss. Dann sollte man diese Linie aber auch in anderen Projekten weiterverfolgen.
Ich kürze z.B. Zähler gerne mit Cnt (Counter) ab.
Davor steht dann eine Abkürzung für den Variablentyp. Mir reichen bei einigen häufig gebrauchten einstellige, wie z.B. i für integer, l für Long. Bei anderen nehme ich auch 2 bis 3, z.b. sh für Sheet, wsh für worksheet oder obj für object. Darüber findet man auch was bei Google, Stichwort Variablendeklaration oder Variablenbezeichnung oder Variable Typ Prefix o.ä..
Die Variablennamen sollten nicht zu kurz, aber auch nicht sehr lang sein. Bei zu kurzen hat man ggf. Probleme, wenn man selbige mal sucht. Wen ich z.B. eine Integerzahl mit "in" (integer number) bezeichne und später im Projekt danach suche, werde ich "in" bestimmt nicht nur als Variable finden ... Bei langen Namen muss man zumindest mehr schreiben ...
Dann wäre noch ein Großbuchstabe zu nennen. Wenn Du Variablen Dimensionierst, z.B. Dim iCnt, wird das C immer automatisch groß geschrieben. Wenn Du Dich mal verschreibst, z.B. inct, wird kein Buchstabe groß und Du merkst in der Regel gleich, dass da die Bezeichnung nicht stimmt.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo André und &All, (02.06.2017, 17:02)schauan schrieb: Die Variablennamen sollten nicht zu kurz, aber auch nicht sehr lang sein. ... Bei langen Namen muss man zumindest mehr schreiben ... das ist leider ein weit verbreiteter Irrtum  , wie z.B. auch hier erklärt wird: Option Explicit, Intellisense und Techniken des SchreibensGruß Uwe
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Uwe, aber zumindest beim ersten mal hab ich noch recht  Unter Umständen stören mich zu lange Namen auch dann, wenn ich mal Code Ausdrucke und der dann im Ausdruck nur deswegen andere Zeilenumbrüche hat als im Codefenster. Ich weiß, könnte man auch mit Zeilentrenner (oder ...fortsetzer) "_" umgehen. Mal sehn, ob mir noch was einfällt zum rausreden
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
|