Hi,
(23.06.2016, 10:30)ToXiC schrieb: [ -> ]1.) Ich habe eben mit dem Chef gesprochen. Eine Sicherheitsabfrage möchte er nicht.
2.) Er hätte dafür gerne, dass man im Bereich unter Arbeitsschritte/ Aktivitäten nicht nur am Ende, sondern auch dazwischen Zeilen einfügen kann.
Natürlich mit Formelübertragung.
3.) Außerdem ist aufgefallen, dass sich in diesem Bereich die Eingaben bei H:I nicht linksbündig ausrichten, selbst bei manueller Ausrichtung nicht.
Ich weiß aber nicht, woran es liegt...
Bitte beachten: Du kannst nicht einfach ohne Veränderung der Makros (zusätzliche) Spalten oder Zeilen einfügen oder löschen!
zu 1) dann muß aber klar sein: wenn der Cursor in einer Zelle im oberen Bereich steht und der Benutzer drückt auf den Button mit der roten Schrift, dann ist die komplette Zeile unwiederbringlich weg und alle Makros stimmen nicht mehr, da sie sich auf die fest verdrahteten Bereich beziehen.
Überlegung:
Evtl. könnte das Makro auf den Bereich ab Zeile 24 beschränkt werden, durch Abfrage der aktuellen Zeile und Überprüfung, ob sie sich im Bereich 24 bis eine Zeile vor "Summe:" befindet, erst dann die Zeile löschen.
[edit]
Siehe Makro: "ZwischenZeileEinfügen()"
zu 2.)
nimm mal das zweite Makro und weise es einem neuen Button "Zeile unterhalb einfügen" zu, es wird die Formel in A und in C von einer Zeile drüber kopiert:
Welche Formel soll übertragen werden?
Hier die Makros:
Option Explicit
Sub Zeile_einfügen() 'Zeile am Ende des Blocks einfügen
'
' © by Rabe of Clever-Excel-Forum.de
' 2016-06-23
'
Dim loZeile As Long
'
loZeile = 1000
loZeile = Application.WorksheetFunction.Match("Summe:", Range("B24:B" & loZeile), 0) ' gibt Zeile im Suchbereich aus
loZeile = 24 + loZeile - 1 'Addition der Such-Startzeile, => Zeile der letzten Datenzeile vor "Summe:"
' MsgBox loZeile 'Anzeige der Zahl zu Testzwecken
ActiveSheet.Unprotect Password:="PW"
Application.EnableEvents = False
Rows(loZeile & ":" & loZeile).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B" & loZeile).FormulaR1C1 = "=ROW()-23"
Range("C" & loZeile).Select
Range("B" & loZeile - 1 & ":I" & loZeile - 1).Copy Range("B" & loZeile)
Range("C" & loZeile & ":I" & loZeile).ClearContents
Range("G" & loZeile + 1).Formula = "=Sum(G24:G" & loZeile & ")"
Range("H" & loZeile + 1).Formula = "=Sum(H24:H" & loZeile & ")"
Range("I" & loZeile + 1).Formula = "=Sum(I24:I" & loZeile & ")"
Application.EnableEvents = True
' ActiveSheet.Protect Password:="PW", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowFormattingCells:=True
End Sub
Sub ZwischenZeileEinfügen() 'Zeile unterhalb der aktuellen Zeile einfügen
'
' © by Rabe of Clever-Excel-Forum.de
' 2016-06-23
'
Dim loZeile As Long
'
loZeile = ActiveCell.Row
' ActiveCell.EntireRow.Insert
Rows(loZeile + 1 & ":" & loZeile + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B" & loZeile - 1).Copy Range("B" & loZeile + 1)
' Range("C" & loZeile - 1).Copy Range("C" & loZeile + 1)
Range("C" & loZeile + 1).Select
Application.CutCopyMode = False
End Sub
Sub Zeile_löschen() 'aktuelle Zeile löschen
'
' © by Rabe of Clever-Excel-Forum.de
' 2016-06-23
'
Dim LöschZeile As Range
Dim loZeile As Long
'
loZeile = 1000
loZeile = Application.WorksheetFunction.Match("Summe:", Range("B24:B" & loZeile), 0) ' gibt Zeile im Suchbereich aus
loZeile = 24 + loZeile - 2 'Addition der Such-Startzeile, => Zeile der letzten Datenzeile vor "Summe:"
' MsgBox loZeile 'Anzeige der Zahl zu Testzwecken
ActiveSheet.Unprotect Password:="PW"
Application.EnableEvents = False
If Not Intersect(Rows(ActiveCell.Row), Rows("24:" & loZeile)) Is Nothing Then
ActiveCell.EntireRow.Delete 'löschen der aktuellen Zeile, wirkt aber im gesamten Blatt!
End If
Application.EnableEvents = True
' ActiveSheet.Protect Password:="PW", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowFormattingCells:=True
End Sub
Sub letzte_Zeile_löschen()
'
' © by Rabe of Clever-Excel-Forum.de
' 2016-06-23
'
Dim loZeile As Long
'
loZeile = 1000
loZeile = Application.WorksheetFunction.Match("Summe:", Range("B24:B" & loZeile), 0) ' gibt Zeile im Suchbereich aus
loZeile = 24 + loZeile - 2 'Addition der Such-Startzeile, => Zeile der letzten Datenzeile vor "Summe:"
' MsgBox loZeile 'Anzeige der Zahl zu Testzwecken
ActiveSheet.Unprotect Password:="PW"
Application.EnableEvents = False
Rows(loZeile).EntireRow.Delete 'löschen der letzten Zeile
Application.EnableEvents = True
' ActiveSheet.Protect Password:="PW", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowFormattingCells:=True
End Sub
zu 3.) das muß getestet werden. Da komme ich gerade nicht dazu.
Eigentlich können nun die Buttons "Zeile einfügen" und "letzte Zeile löschen" entfernt werden, die und die dazugehörigen Malros werden nicht mehr benötigt.
[
attachment=5797]