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, 22:43
(Dieser Beitrag wurde zuletzt bearbeitet: 01.06.2017, 22: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, 16: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 Schreibens
Gruß 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)
|