Verbessertes Einfügen einer Leerzellen unter der Verwendung von Feldern
#1
Hallo Experten,

ich stehe mit meinem (funktionierendem) Code  zum einfügen einer Leerzelle in ein Exceltabellenblatt vor einem Problem.

Code:
Function TryLeereZelleEinf(Zeile, Spalte)
Dim vbSpalte As Variant
vbSpalte = Range(Cells(Zeile, Spalte), Cells(Cells(Rows.Count, Spalte).End(xlUp).Row, Spalte))
Range(Cells(Zeile + 1, Spalte), Cells(Cells(Rows.Count, Spalte).End(xlUp).Row + 1, Spalte)) = vbSpalte
Cells(ActiveCell.Row, Spalte) = "" ' häßlich!!- aber derzeit notwendig
End Function

Sub ZelleEinf()
Call TryLeereZelleEinf(ActiveCell.Row, ActiveCell.Column)
End Sub

Wie schaffe ich es beim Einfügen einer Leerzelle, dass diese dritte häßliche Programmierzeile wegfällt und nur noch ganz elegant die ersten beiden Programmierzeilen übrigbleiben.
Top
#2
Hallo!
Stimmt, hübsch hässlich …  :21:
Würde nicht (kompletter Code!) folgendes reichen?
ActiveCell.Insert xlShiftDown

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#3
Hallo Ralf,

danke für deine Antwort, aber leider reicht dies nicht. Es muss über Felder laufen, da es darum geht sehr viel Text eine Zelle nach unten zu verschieben.
Top
#4
Nichts anderes macht mein Einzeiler, Algor.
Vielleicht bin ich heute begriffsstutzig, vielleicht hast Du Deine Anforderung aber auch ungenau formuliert.

Beispieldatei?

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#5
Hi,

und warum nicht so?

Code:
Function TryLeereZelleEinf(Zeile, Spalte)
    Range(Cells(Zeile, Spalte), Cells(Cells(Rows.Count, Spalte).End(xlUp).Row, Spalte)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Function

Sub ZelleEinf()
Call TryLeereZelleEinf(ActiveCell.Row, ActiveCell.Column)
End Sub

oder noch kürzer:
Code:
Sub ZelleEinf()
   ActiveCell.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub

[edit]
Ooh, sehe grade, das ist ja genau das, was Ralf schon vorgeschlagen hat.
Top
#6
Hi Ralf!
Siehe #2
Ich nehme allerdings immer die korrekte XlInsertShiftDirection-Enumeration auch, wenn es "kürzer" geht.
Zu CopyOrigin wollte ich nichts schreiben, da TE zu ungenau war.

Ebenfalls EDIT:
Dann sind wir uns ja mal wieder einig!  :19:

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#7
Hallo Zusammen,

Insert ist langsamer als das Verschieben per Feldvariable. Siehe http://www.clever-excel-forum.de/Thread-...meldung-NV

@Algor
Geht es um einen Codedesignwettbewerb? Ich verstehe Dein Problem gar nicht. Wenn eine Zelle geleert werden soll, muss das halt entsprechend programmiert werden. Da ist doch gegen Deine "hässliche" Zeile nichts einzuwenden. Schneller gehts nicht. Wink

Gruß Uwe
Top
#8
Hi,

(08.02.2016, 16:22)Kuwer schrieb: Da ist doch gegen Deine "hässliche" Zeile nichts einzuwenden. Schneller gehts nicht. Wink

.ClearContents
oder so?
Top
#9
Hi Uwe!
Zitat:Insert ist langsamer als das Verschieben per Feldvariable.
Akademische Diskussion?
Es geht um das Einfügen EINER leeren Zelle.
Auch, wenn Algor wohl eine Kalkulation mit einer Textverarbeitung (Zitat: "Sehr viel Text") verwechselt, kann ich mir nicht vor- und werde es auch nicht nachstellen, dass dies bei einer Zelle bemerkbar sein sollte.
Es werden sicherlich (intern) nicht alle Zellen einzeln ausgeschnitten und im Offset eingefügt, sondern eher die Bezüge angepasst.

My two cents,

Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#10
(08.02.2016, 16:50)RPP63 schrieb:
Zitat:Insert ist langsamer als das Verschieben per Feldvariable.
Akademische Diskussion?
Es geht um das Einfügen EINER leeren Zelle.
Auch, wenn Algor wohl eine Kalkulation mit einer Textverarbeitung (Zitat: "Sehr viel Text") verwechselt, kann ich mir nicht vor- und werde es auch nicht nachstellen, dass dies bei einer Zelle bemerkbar sein sollte.
Es werden sicherlich (intern) nicht alle Zellen einzeln ausgeschnitten und im Offset eingefügt, sondern eher die Bezüge angepasst.

vielleicht, vieleicht auch nicht ...  Sleepy

Gruß Uwe
Top


Gehe zu:


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