PDA

Vollständige Version anzeigen : Schleifenproblem


Monty Burns
09.03.2009, 19:34
Hallo

Ich habe folgendes Makro:
Sub SpalteVerschiebenÜberGesamteMappe ()

Dim i As Long
Dim zeile As Integer
Dim zeilemax As Integer
Dim Tabname As Variant

With ThisWorkbook
Application.ScreenUpdating = False
For i = 1 To ThisWorkbook.Sheets.Count
Tabname = ThisWorkbook.Sheets(i).Name
Debug.Print Tabname
zeilemax = Worksheets(Tabname).UsedRange.Rows.Count
For zeile = 1 To zeilemax
Worksheets(Tabname).Range("C1" & ":C" & zeilemax) = Worksheets(Tabname).Range("D1" & ":D" & zeilemax).Value
Next zeile
Next i
Application.ScreenUpdating = True
End With
End Sub

Das läuft einmal fehlerfrei durch und beim 2. Mal bleibt es an der Stelle:
zeilemax = Worksheets(Tabname).UsedRange.Rows.Count
hängen.

Über Debug.Print Tabname habe ich 2 Tabellennamen im Direktfenster stehen, aber anscheinend wird das nicht richtig in den nächsten Schleifendurchlauf integriert. Wer kann mir helfen?

ransi
09.03.2009, 20:13
Hallo Monty

Dim ZeileMax as long

sollte das Problem lösen.

ransi

Monty Burns
09.03.2009, 20:29
Hallo ransi

Das geht nicht. Es bleibt jetzt eine Zeile weiter stecken. Daraufhin habe ich Zeile auch as long gesetzt und dann bricht Excel endgültig zusammen...

Gruß

- Monty Burns -

IngGi
09.03.2009, 20:50
Hallo Monty,

wenn ich das richtig sehe, geht das auch einfacher:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Sub</span> Spalte_verschieben()
<span class="TOKEN">With</span> ThisWorkbook
.Activate
.Worksheets.Select
ActiveSheet.Columns(&quot;C:C&quot;).Delete
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>
&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Ingolf

Monty Burns
09.03.2009, 21:11
Hallo

Ich habe folgendes Makro:
Code:

Sub SpalteVerschiebenÜberGesamteMappe ()

Dim i As Long
Dim zeile As Integer
Dim zeilemax As Integer
Dim Tabname As Variant

With ThisWorkbook
Application.ScreenUpdating = False
For i = 1 To ThisWorkbook.Sheets.Count
Tabname = ThisWorkbook.Sheets(i).Name
Debug.Print Tabname
zeilemax = Worksheets(Tabname).UsedRange.Rows.Count
For zeile = 1 To zeilemax
Worksheets(Tabname).Range("C1" & ":C" & zeilemax) = Worksheets(Tabname).Range("D1" & ":D" & zeilemax).Value
Next zeile
Next i
Application.ScreenUpdating = True
End With
End Sub

Das läuft einmal fehlerfrei durch und beim 2. Mal bleibt es an der Stelle:
Code:

zeilemax = Worksheets(Tabname).UsedRange.Rows.Count

hängen.

Über Debug.Print Tabname habe ich 2 Tabellennamen im Direktfenster stehen, aber anscheinend wird das nicht richtig in den nächsten Schleifendurchlauf integriert. Wer kann mir helfen?

hary
10.03.2009, 07:21
Moin Monty
Was soll eigentlich passieren? Hab mal Deinen Code genommen, ausgefuehrt und er lief ohne murren durch. Habe mal was in Spalte C eingetragen. Nach ausfuehren Deines Codes verschwand dass aus C ins Nirvana. Hab hier aber Excel2007.
Gruss Hary

Monty Burns
10.03.2009, 11:49
Hallo Hary

Worksheets(Tabname).Range("C1" & ":C" & zeilemax) = Worksheets(Tabname).Range("D1" & ":D" & zeilemax).Value

...hier wird der Inhalt der Spalte D nach Spalte C kopiert. Wenn man natürlich nix in D stehen hat und das nach C kopiert, verschwindet der Inhalt von C in ein unbekanntes Land...das ist wohl wahr. Laut Debug.Print habe ich genau 2 Schleifenanläufe: Der 1. ist ein kompletter Durchmarsch und der 2. hängt fest, sodaß auf dem 2. Tabellenblatt nicht verschoben wird...

Inzwischen habe ich aber die Sache repariert und es funktioniert einwandfrei.
Vielen Dank für die Mühe! Ich denk mir bei Zeiten wieder was neues aus und richte damit irgendeinen Schaden an. Du weißt ja: Ich handle stets nach dem Angela ich - merkel - garnichts - Motto Wo ich bin da klappt es nicht...und überall kann ich nicht sein...dann können wir uns wieder messen.

Gruß

- Monty Burns -