PDA

Vollständige Version anzeigen : Zeilen ergänzen oder löschen in gesperrtem Blatt


NoRobot
31.08.2017, 13:36
Hallo, ich bin neu hier und habe das Forum bisher ohne Anmeldung durchsucht. Für einige kleinere Probleme habe ich hier auch Lösungen gefunden. VBA ist nicht wirklich mein Steckenpferd...als Anfänger würde ich wohl durchgehen.

Nun zum Problem, bzw zur Aufgabe: Ich verwende Excel 2010 und habe in einem Schätzvorlage für Projekte eine Blatt für eine 3-Punkt oder auch PERT Schätzung aufgebaut.
Um zu verhinder, dass Nutzer die Formate oder Berechnungen verändern, muss ich das Blatt für die Nutzung sperren. Damit kann ich Zeilen einfügen oder löschen nur och über VBA realisieren...und da liegt aktuell mein Problem.

Aufbau sieht so aus, dass das Blatt einen Kopf mit Beschreibungen enthält und eine Kopfzeile über den Projektablauf. Darunter habe ich aktuell drei Bereiche definiert. Jeder dieser Bereiche hat eine Kopfzeile (der dann die CommandButtons für die Einfügen/Löschen Operationen trägt) und darunter eine Tabelle (die nochmal separate Spaltenköpfe enthält, die eigentlich unnötig sind). Die Kopfzeile des Folgebereichs hängt direkt unter der Vorgängertabelle ohne Zwischenraum.

Jeder der 3 Bereiche kann sich nun unabhängig von den anderen verkleinern oder vergrößern (.d.h., die Tabellennummern verändern sich von Tabelle zu Tabelle).
Ich aus meiner Sicht 4 Operationen:
1.) Zeile am Ende einfügen (das ist mir mit Add.Row auch geglückt, allerdings noch ohne die Formeln zu übertragen).
2.) Letzte Zeile der Tabelle löschen
3.) Leerzeile mit Formeln unter der aktuellen Cursorposition einfügen
4.) Zeile mit Inhalten und Formeln an der Cursorposition löschen

Außerhalb der Tabellenbereiche werden die Zahlen auf dem Blautt noch aufsummiert und weiterverarbeitet. Das ist aber für die Betrachtung wohl nicht wichtig.

Wie kann ich das am besten lösen? Benötige ich die Tabellenbereiche überhaupt oder ist es zweckmäßiger mit unsichtbaren Markierungen die Position zu ermitteln (bspw. die nächste Kopfzeile und dann rückwärts) und dann entsprechend kopieren und einfügen...? Ich bin hier etwas ratlos, was die beste Methode ist und freue mich auf etwas Hilfe.

Beverly
31.08.2017, 14:03
Hi,

du solltest schon besser eine Beispielmappe bereitstellen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

NoRobot
01.09.2017, 08:25
Ja, das ist sicher sehr umfangreich und die Optik klärt das relativ schnell. Daher der betreffende Teil asl Auszug.

Ich habe auch noch bemerkt, dass die horizontale Gliederung auch nciht mitgezogen wird, sondern auf den ursprünglich definierten Zellen stehen bleibt. Kann man das auf einfache Weise beeinflussen oder muss das mit in die Einfüge/Lösch-Funktion programmiert werden?

Beverly
01.09.2017, 09:35
Also bei mir (Excel2016) wird die Gliederung beim Einfügen von Zeilen erweitert. Wenn das in deiner Excel-Version anders ist, dann solltest du vielleicht auf die Gliederung verzichten und stattdessen z.B. Toggle-Buttons verwenden um die Zeilen der betreffenden formatierten Tabelle aus- bzw. einzublenden.
Ich würde dir auch empfehlen, nach jeder formatierten Tabellen jeweils 1 zusätzliche Zeile frei zu lassen ehe du den nächsten Bereich formatierst - das würde das Einfügen von Zeilen erleichtern, denn beim Erweitern der formatierten Tabellen per VBA werden teilweise die Buttons in den darunter liegenden Zeilen mit verschoben, sodass sie nicht im blau formatierten Bereich sondern direkt auf der 1. Zeile der nächsten formatierten Tabelle liegen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

NoRobot
04.09.2017, 07:10
Hm...die Antwort löst mein Zeilenproblem leider nicht...

Beverly
04.09.2017, 07:17
Hm...die Antwort löst mein Zeilenproblem leider nicht...


Das ist korrekt, aber nur wenn du deine Mappe entsprechend änderst und die geänderte Mappe hochlädst, kann man sich dann mit diesem Problem beschäftigen und auf die geänderten Bedingungen zielgerichtet eingehen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

NoRobot
04.09.2017, 14:12
Ich habe mir jetzt auf einem anderen Weg geholfen: die Tabellenbereiche habe ich wieder rausgenommen und einfach die Funktion auf Einfügen und Löschen limitiert (also nur 2 Command Buttons).
Zwischen die Bereiche habe ich noch eine zusätzliche graue Zeile gesetzt, damit das besser getrennt ist.
Damit kann ich jetzt in jeder der operativen Zellen eine Zeile einfügen oder löschen und die Gliederung bleibt unberührt. Funktioniert im Test schon gut.

Public Sub Insert_Row()

Dim color As Long

color = ActiveCell.Interior.color 'Farbcode der aktiven Zellen ermitteln
If color = "15986394" Or color = "16777215" Then 'Befehl ausführen, wenn Hintergrund hellblau oder weiss
ActiveSheet.Unprotect Password:=""
Application.ScreenUpdating = False
ActiveCell.Rows("1:1").EntireRow.Select 'Aktive Zeile suchen
Selection.Copy
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.Insert Shift:=xlDown 'Zeile unterhalb einfügen
Selection.Offset(-1).Copy
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.ScreenUpdating = True
ActiveSheet.Protect userinterfaceonly:=True, Password:=""
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowInsertingRows:=True, AllowFiltering:=True
ActiveSheet.EnableSelection = xlUnlockedCells


Else: MsgBox "Bitte gültige Zeile auswählen"
End If

End Sub


Löschfunktion bin ich gerade noch bei...aber die dürfte leichter sein.

NoRobot
05.09.2017, 12:37
Löschfunktion ist auch erledigt.