Discussion:
In Markierung leere Felder mit vorherigen Werten füllen
(zu alt für eine Antwort)
Ahmed Martens
2013-06-18 12:58:12 UTC
Permalink
Hallo Leute,

ich komme hier einfach nicht weiter.

Ich möchte in einer Tabelle einen bestimmten Bereich markieren und in
diesem Bereich alle leeren Tabellenfelder mit dem vorherigen Werten
füllen.

Hier mein Lösungsansatz, der nicht funktioniert:

With Range(Cells(Selection.Row, Selection.Column),
Cells(Selection.Rows.Count + Selection.Row - 1, Selection.Columns.Count
+ Selection.Column - 1))
.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
.Value = .Value
End With

Ich bekomme immer die Fehlermeldung:

Laufzeitfehler '1004':
Anwendungs- oder objektdefinerter Fehler

und zwar immer an dieser Stelle:
=> .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"

Hat einer eine Idee was ich falsch mache?
Vielen Dank im voraus.

Gruß Ahmed
--
Antworten bitte nur in der Newsgroup.
Win7 Prof. 64bit / MS-Office 2010 Prof. 32bit
Claus Busch
2013-06-18 13:07:12 UTC
Permalink
Hallo Ahmed,
Post by Ahmed Martens
Ich möchte in einer Tabelle einen bestimmten Bereich markieren und in
diesem Bereich alle leeren Tabellenfelder mit dem vorherigen Werten
füllen.
machs doch gleich mit den Werten anstatt mit Formel und dann wandeln.
Probiers mal so:
Sub Ausfuellen()
Dim LRow As Long
Dim rngC As Range

With Selection
LRow = Cells(Rows.Count, .Column).End(xlUp).Row
For Each rngC In Range(Cells(1, .Column), Cells(LRow, .Column)) _
.SpecialCells(xlCellTypeBlanks)
rngC = rngC.Offset(-1, 0)
Next
End With
End Sub

Mit freundlichen Grüßen
Claus Busch
--
Win XP Prof SP3 / Vista Ultimate SP2
Office 2003 SP3 /2007 Ultimate SP3
Ahmed Martens
2013-06-18 13:15:57 UTC
Permalink
Hallo Claus,
Post by Claus Busch
Sub Ausfuellen()
Dim LRow As Long
Dim rngC As Range
With Selection
LRow = Cells(Rows.Count, .Column).End(xlUp).Row
For Each rngC In Range(Cells(1, .Column), Cells(LRow, .Column)) _
.SpecialCells(xlCellTypeBlanks)
rngC = rngC.Offset(-1, 0)
Next
End With
End Sub
das sieht ja schon ganz gut aus, aber ich möchte ja gleich mehrere
Spalten und Zeilen bearbeiten.

Wie bekomme ich das denn hin?

Gruß Ahmed
--
Antworten bitte nur in der Newsgroup.
Claus Busch
2013-06-18 13:24:21 UTC
Permalink
Hallo Ahmed,
Post by Ahmed Martens
das sieht ja schon ganz gut aus, aber ich möchte ja gleich mehrere
Spalten und Zeilen bearbeiten.
probiere mal:

Sub Ausfuellen()
Dim LRow As Long
Dim LCol As Integer
Dim rngC As Range
Dim i As Integer

With ActiveSheet
LCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
For i = 1 To LCol
LRow = .Cells(Rows.Count, i).End(xlUp).Row
For Each rngC In Range(Cells(1, i), Cells(LRow, i)) _
.SpecialCells(xlCellTypeBlanks)
rngC = rngC.Offset(-1, 0)
Next
Next
End With
End Sub

Mit freundlichen Grüßen
Claus Busch
--
Win XP Prof SP3 / Vista Ultimate SP2
Office 2003 SP3 /2007 Ultimate SP3
Ahmed Martens
2013-06-18 13:24:28 UTC
Permalink
Ich habe es jetzt wie folgt gelöst:
Dim rngC as Range

For Each rngC In Selection
If Len(rngC.Text) = 0 Then
rngC = rngC.Offset(-1, 0)
End If
Next

Erst der Hinweis auf rngC = rngC.Offset(-1, 0) hat mich zur Lösung
gebracht.

Also vielen Dank für den Denkanstoß.

Gruß Ahmed
--
Antworten bitte nur in der Newsgroup.
Claus Busch
2013-06-18 13:26:30 UTC
Permalink
Hallo Ahmed,
Post by Ahmed Martens
Dim rngC as Range
For Each rngC In Selection
If Len(rngC.Text) = 0 Then
rngC = rngC.Offset(-1, 0)
End If
Next
Erst der Hinweis auf rngC = rngC.Offset(-1, 0) hat mich zur Lösung
gebracht.
dann musst du aber immer selektieren und musst alle Zellen durchlaufen.
Mit den SpecialCells musst du nur durch die leeren Zellen. Schau dir mal
meinen zweiten Vorschlag an, der das für alle Spalten der Tabelle
nacheinander macht.


Mit freundlichen Grüßen
Claus Busch
--
Win XP Prof SP3 / Vista Ultimate SP2
Office 2003 SP3 /2007 Ultimate SP3
Ahmed Martens
2013-06-18 13:33:18 UTC
Permalink
Post by Claus Busch
dann musst du aber immer selektieren und musst alle Zellen durchlaufen.
Mit den SpecialCells musst du nur durch die leeren Zellen. Schau dir mal
meinen zweiten Vorschlag an, der das für alle Spalten der Tabelle
nacheinander macht.
Habe ich gerade ausprobiert und funktioniert einwandfrei.
Werde ich jetzt auch so nehmen.

Problem ist nur, wenn die erste Zeile keinen Wert hat, dann funktioniert
das so leider auch nicht. Die Spalte ohne führenden Wert wird dann
nämlich komplett überlaufen.

Ist in diesem Fall aber kein Problem, da es immer einen vorherigen Wert
gibt. :-)

Vielen Dank für die prompte Hilfe.

Gruß Ahmed
--
Antworten bitte nur in der Newsgroup.
Ahmed Martens
2013-06-18 13:36:56 UTC
Permalink
Blödsinn was ich da gesagt habe.
Ein einfaches On Error resume next löst das Problem absolut einwandfrei.

Daher => optimale Lösung


Gruß Ahmed
--
Antworten bitte nur in der Newsgroup.
Loading...