Clever-Excel-Forum

Normale Version: Automatisch eine neue Zeile einfügen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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?
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.
Hallöchen,

Probleme, die sich fast von selbst lösen, sind doch die besten Smile
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?
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.
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 Wink , wie z.B. auch hier erklärt wird: Option Explicit, Intellisense und Techniken des Schreibens

Gruß Uwe
Hallo Uwe,

aber zumindest beim ersten mal hab ich noch recht Smile
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 Smile
Seiten: 1 2