Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Automatisch eine neue Zeile einfügen
#11
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?
Antworten Top
#12
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.
Antworten Top
#13
Hallöchen,

Probleme, die sich fast von selbst lösen, sind doch die besten Smile
.      \\\|///      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:
  • dusticelli
Antworten Top
#14
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?
Antworten Top
#15
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)
Antworten Top
#16
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
Antworten Top
#17
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste