Microsoft Excel

Herbers Excel/VBA-Archiv

For Next Schleife - dynamisch ?? | Herbers Excel-Forum


Betrifft: For Next Schleife - dynamisch ?? von: Jürgen
Geschrieben am: 15.08.2012 02:54:59

Hallo Helferleins,

habe folgendes Problem:

Ich öffne eine Exceldatei, und richte Spalten und Zeilen aus.

Teilweise füge ich Zeilen ein. Makro funktioniert so weit so gut.

Zu beginn ermittle ich die Anzahl der Zeilen mit:

Zeilen_Datei1 = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)

Daraus ergibt sich eine For next schleife:

For zeile = 7 To Zeilen_Datei1

'For reihe = 1 To 3
'If reihe = 1 Then spalte = "A" Else If reihe = 2 Then spalte = "B" Else If reihe = 3 Then spalte = "C"
Range("C" & zeile).Select
If Left(ActiveCell(), 4) = "3 x " Or Left(ActiveCell(), 4) = "8mm " Then
zeilenzähler = ActiveCell.Row

Feederb = Left(ActiveCell(), 4)
End If
If zeilenzähler > 0 And ActiveCell() = "2" Or ActiveCell() = "3" Then
If ActiveCell.Row - 2 < zeilenzähler Then
Rows(ActiveCell.Row).Select
Selection.Insert Shift:=xlToDown, CopyOrigin:=xlFormatFromLeftOrAbove
Zeilen_Datei1 = Zeilen_Datei1 + 1
Else
zeilenzähler = ActiveCell.Row

End If
If ActiveCell() = "3" Or Feederb = "8mm " And ActiveCell() = "2" Then zeilenzähler = 0
End If

If ActiveCell() = "2" Or ActiveCell() = "3" Then
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 'Zeile nach rechts schieben
End If
'Next reihe
Next zeile
Erase Feeder ' Array löschen

Das Problem ist nun, das ich beim einfügen einer Zeile den Wert der Variablen Zeilen_Datei1 um 1 hochzähle.

Allerdings geht die Schleife nur bis zum Wert der beim Start der Schleife definiert war.

Hoffe alles ist verständlich.

Gruß Jürgen

  

Betrifft: AW: For Next Schleife - dynamisch ?? von: Josef Ehrensberger
Geschrieben am: 15.08.2012 07:25:58


Hallo Jürgen,

arbeite von unten nach oben.

Zeilen_Datei1 = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)

For zeile = Zeilen_Datei1 To 7 Step -1
  If Left(Cells(zeile, 3), 4) = "3 x " Or Left(Cells(zeile, 3), 4) = "8mm " Then
    zeilenzähler = Cells(zeile, 3).Row
    Feederb = Left(Cells(zeile, 3), 4)
  End If
  If zeilenzähler > 0 And Cells(zeile, 3) = "2" Or Cells(zeile, 3) = "3" Then
    If Cells(zeile, 3).Row - 2 < zeilenzähler Then
      Rows(zeile).Insert Shift:=xlToDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Else
      zeilenzähler = Cells(zeile, 3).Row
    End If
    If Cells(zeile, 3) = "3" Or Feederb = "8mm " And Cells(zeile, 3) = "2" Then zeilenzähler = 0
  End If
  If Cells(zeile, 3) = "2" Or Cells(zeile, 3) = "3" Then
    Cells(zeile, 3).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 'Zeile nach rechts schieben
  End If
Next





« Gruß Sepp »



  

Betrifft: AW: For Next Schleife - dynamisch ?? von: Jürgen
Geschrieben am: 15.08.2012 08:09:09

Hallo Sepp,

danke für den Tip.

Noch eine Frage, wie hast Du den Code so schön in die Antwort gebracht ?
Also das er in dem Rahmen ist ?


Jürgen


  

Betrifft: AW: For Next Schleife - dynamisch ?? von: Josef Ehrensberger
Geschrieben am: 15.08.2012 08:12:57



« Gruß Sepp »



  

Betrifft: AW: For Next Schleife - dynamisch ?? von: Hajo_Zi
Geschrieben am: 15.08.2012 08:14:32

Hallo Jürgen,

das ist HTML, dafür gibt es auch Tools. Oder hier im Forum den Schalter Zitat.



' ************************************************************* _
*
'  Modul:  mdl_HTML  Typ = Allgemeines Modul
' **************************************************************

Option Explicit

Sub HTML()
    AddIns("Tabellenanzeige_In_Html_Addin") _
.Installed = False
    AddIns("Tabellenanzeige_In_Html_Addin") _
.Installed = True
End Sub

Sub FormelnEinAus()
   ActiveWindow.DisplayFormulas = Not ActiveWindow. _
DisplayFormulas
End Sub
Code eingefügt mit: Excel Code Jeanie

GrußformelHomepage


  

Betrifft: AW: For Next Schleife - dynamisch ?? von: Jürgen
Geschrieben am: 15.08.2012 15:34:52

Hallo,
gerade aufgestanden nach der Nachtschicht.
Danke für die Antworten. Von untern anfangen ist logisch, da die Zellen beim einfügen ja nach unten rutschen. Allerdings weiß ich nicht wie ich das in meinem Fall hinbekommen soll.
Habe es momentan anderst gelöst.

' _
Nicht registrierte Benutzung der Excel Code Jeanie 1.0
schleife:
For zeile = 7 To  _
Zeilen_Datei1
	If altezeile > zeile And< _
/span> schleifenzähler = 1 Then
		schleifenzähler = 0
		zeile = altezeile
	End If
	Range("C" & zeile).Select
	If Left(ActiveCell(), 4) = "3 x " Or Left(ActiveCell(), 4) = "8mm " Then
		zeilenzähler = ActiveCell.Row
		Feederb = Left(ActiveCell(), 4)
	End If
	If zeilenzähler > 0  _
And ActiveCell() = "2" Or ActiveCell() = "3" Then
		If ActiveCell.Row - 2 < zeilenzähler Then
			Rows(ActiveCell.Row).Select
			Selection.Insert Shift:=xlToDown, CopyOrigin:=xlFormatFromLeftOrAbove
			Zeilen_Datei1 = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count,  _
1).End(xlUp).Row, Rows.Count)
			schleifenzähler = 1
			altezeile = zeile
			GoTo schleife
		Else
			zeilenzähler = ActiveCell.Row
		End If
		If ActiveCell() = & _
#34;3" Or Feederb = "8mm " And ActiveCell() = "2" Then zeilenzähler = 0
	End If
	If ActiveCell() = &# _
34;2" Or ActiveCell() = "3" Then
		Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 'Zeile nach rechts schieben
	End If
Next zeile

Da ich ja gerne etwas lernen möchte, stelle ich mal Dateien dazu. Die Datei ReportD.xls in einen Ordner kopieren. Im Makro Übersicht_ASM wird dann nach dem Ordner gefragt in dem sich die Datei befindet.
Mir geht es dann hauptsächlich um den Bereich: ausrichten der Spalten in geöffneter Datei.
Wie kann ich den umstellen auf von unten nach oben ?
Denn ich denke meine Lösung ist nicht sehr gut ?

https://www.herber.de/bbs/user/81443.zip
Gruß Jürgen


  

Betrifft: AW: For Next Schleife - dynamisch ?? von: Josef Ehrensberger
Geschrieben am: 15.08.2012 20:07:20


Hallo Jürgen,

ich hab dir doch aufgezeigt wie es rückwärts geht.

Wo ist dein Problem?




« Gruß Sepp »



  

Betrifft: AW: For Next Schleife - dynamisch ?? von: Jürgen
Geschrieben am: 15.08.2012 22:06:31

Hallo Sepp,

mein Problem besteht darin, das ich von oben nach unten jede Spalte nach einen Wert dursuche und dadurch weitere Aktionen folgen. Also ich wüßte nicht wie ich das bewerkstelligen könnte mit der Variante von unten nach oben. Aber ist ok, habe mir mit einer Sprunganweisung zum Start der For..Next geholfen. Dann wird Sie jedesmal nach einfügen einer Zeile neu gestartet. Danach setzte ich den Schleifenzähler auf den alten Wert vor der Goto Anweisung.

Danke Dir

Jürgen


Beiträge aus den Excel-Beispielen zum Thema "For Next Schleife - dynamisch ??"