Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
972to976
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellen Sperren wenn Eingabe in übergeordnete Zeile

Zellen Sperren wenn Eingabe in übergeordnete Zeile
07.05.2008 15:40:00
Jessica
Hallo ihr Lieben,
draußen ist so schönes Wetter und ich sitze hier und bin am Verzweifeln.
Ich habe jetzt ca. 300 Zeilen mit einer Katalog-Struktur 0 00 0 0 0 angelegt die fortlaufend ist.
d.h. desto feiner desto größer die Zahl 0 01 0 0 0 kleiner 0 01 1 0 0 kleiner 0 29 0 0 0 usw.
Bei der ersten Zahl (oben 0) sehe ich, ob eine neue Katalog-Struktur beginnt.
d.h.
1 00 0 0 0 (neue Struktur)
2 00 0 0 0 (neue Struktur)
Ich möchte so ein Exceldatenblatt erstellen bei dem ich offen lasse, ob ich in die oberste Katalogstruktur, also die kleinstmögliche Zahlenkombination mit einem Wert versehe, oder ob die oberste Katalogstruktur sich die Werte aus den feineren Ebenen zusammenrechnet (addiert).
Irgendwie habe ich mir das einfacher vorgestellt, bis mir eingefallen ist, dass man ja nicht immer die tiefen Details zur Verfügung hat, die die oberste Katalogstruktur ergeben würden, sondern, dass manchmal auch nur eine Schätzeingabe genügen müsste, die direkt in die oberste Struktur gesetzt wird. :-(
Ich bin verzweifelt, anbei mal eine Mappe zur Erläuterung was ich damit meine (es ist nur eine Struktur dargestellt).
Hat jemand soetwas schonmal gemacht, oder wüsste wie soetwas aufzubauen wäre.
Danke schomal für die Rückmeldungen!
Lg
Jessica

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateiupload
08.05.2008 08:27:39
Jessica
Hat da keiner eine Idee, oder ist das Ganze zu umfangreich?
ich könnte die Datei auch anders aufbauen? Lg

AW: Dateiupload
08.05.2008 11:11:00
Renee
Hi Jessica,
Versuch es mal mit diesem Code (er gehört in die Tabelle1 deines Beispiels).
Statt einem Eintrag, reagiert er auf einen Doppelklick innerhalb der bereits bestehenden Tabelle, oder am Ende der Tabelle. Dabei spielt es eine entscheidene Rolle, in welche Kolonne du doppel-klickst. Je nachdem werden die Zahlen anders erhöht.

Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'   Row before target.row must already be filled (i.e. Row 1 contains initial start)
'   the level (column) clicked is increased be 1
'   if precedessor and descent
Const dStart = 0            ' Start first level (e.g. 0 or 1)
Const dMaxCol = 5           ' depth of level
Dim lCol As Long, lxCol As Long, lRow As Long
If Target.Row = 1 Or Target.Column > dMaxCol Or Target.Count > 1 Then Exit Sub
If IsEmpty(Target.Offset(-1, 0).Value) Then Exit Sub
Application.EnableEvents = False
If IsEmpty(Me.Cells(Target.Row, dMaxCol).Value) Or _
Me.Cells(Target.Row, dMaxCol).Value >= Me.Cells(Target.Row + 1, dMaxCol).Value Then
lCol = Target.Column
If IsEmpty(Target.Value) Then
Target.EntireRow.Insert (xlShiftDown)
lRow = Target.Row - 1
Else
Target.Offset(1, 0).EntireRow.Insert (xlShiftDown)
lRow = Target.Row + 1
If Target.Column  lxCol
Me.Cells(lRow, lxCol).Value = Me.Cells(lRow - 1, lxCol).Value
End Select
Next lxCol
Cancel = True
Else
MsgBox "Impossible to insert level!", vbOKOnly + vbExclamation, "Insert Level"
End If
Application.EnableEvents = True
End Sub


GreetZ Renée
P.S. bei gewissen Konstellationen, ist noch nicht alles i.O. ;-)

Anzeige
AW: Dateiupload
09.05.2008 13:45:00
Jessica
Hallo Renée,
vielen Dank, dass Du Dich meinem Anliegen angenommen hast.
Ich habe den Code mal in die Mappe bzw. in das Sheet (Tabelle 1) eingefügt, obwohl ich diesen absolut nicht verstehe. Ich komme normalerweise mit Standard VBA Code gut hin und verstehe diesen auch meist beim Lesen. Hier absolute Fehlanzeige! :-(
Vielleicht kannst Du mir den VBA Code kurz erläutern.
Ich habe eine neue Beispielmappe angelegt, die vielleicht besser erklärt aus welchen Reihen/Zeilen sich die oberste Struktur zusammensetzt und wie dabei die Katalog-Struktur vorne sich verändert. Die Katalog-Struktur gibt nämlich die Änderung des Additionsverfahrens bzw. des Additionsbereiches vor.
Das Sperren der drunterliegenden Katalogstrukturen wäre eigentlich ja die Lösung. Wobei die Zeilen sich nicht aus der Anordnung in der Tabelle ergeben, sondern aus der Zahlenkombination. Da es sein kann, dass z.B. die 5. und 6. Zeile in das Additionsverfahren nicht mit einfließen, die 7. und 8. Zelle allerdings schon, da die Zahlenkombination dementsprechend ist. Weiß nicht, ob ich das richtig erläutert habe.
Ach ich weiß irgendwie gar nichts, ...ob das überhaupt geht was ich vor habe. Ich habe schon ein, zwei nützliche Excel-Tabellen mittels VBA aufgepeppt. Hier geht es um Arbeitserleichterung die mir wöchentlich ca. 5-8 Stunden einbringen würde. Aber irgendwie kann ich mit komplexen Schleifen bzw. "schweren" VBA Codes nichts anfangen.
sonnige Grüße
Jessi

Anzeige
Dezimalklassifikation automatisieren
09.05.2008 13:52:00
Renee
Hi Jessi,
Wenn du mir was von deinen eingesparten Stunden überlassen kannst ;-) und v.a. deine neue Bespielmappe hochlädst, kann ich vielleicht nachvollziehen, was du genau willst.
Wenn du in der Beispielmappe noch die Regeln genauer erläuterst ist die Chance für eine Lösung noch grösser.
GreetZ Renée

AW: Dezimalklassifikation automatisieren
09.05.2008 14:04:00
Jessica
Hallo Renée,
neue Mappe ist ein Post über Deinem ;-)
sonnige Grüße!

AW: Dezimalklassifikation automatisieren
09.05.2008 15:51:51
Renee
Hallo Jessica,
Mit einer kleinen Anpassung, sollte der Code eigentlich auch für deine 'neue' Mappe stimmen.
Ich sehe nur ein einfache Dezimalklassifikation und darauf ist mein Code aufgebaut. Kannst du mir sagen, was am Code den nicht so läuft, wie du es willst ?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'   Code for a simple decimal classification
'   Row before target.row must already be filled (i.e. Row 1 contains initial start)
'   the level below the one clicked is increased be 1
'   clicking a empty cell below one of highest level increases highest level
Const dStart = 0            ' Start first level (e.g. 0 or 1)
Const dMinCol = 6           ' min Column
Const dMaxCol = 10          ' max Column
Dim lCol As Long, lxCol As Long, lRow As Long
If Target.Row = 1 Or Target.Count > 1 Or _
Target.Column  dMaxCol Then Exit Sub
If IsEmpty(Target.Offset(-1, 0).Value) Then Exit Sub
Application.EnableEvents = False
If IsEmpty(Me.Cells(Target.Row, dMaxCol).Value) Or _
Me.Cells(Target.Row, dMaxCol).Value >= Me.Cells(Target.Row + 1, dMaxCol).Value Then
lCol = Target.Column
If IsEmpty(Target.Value) Then
Target.EntireRow.Insert (xlShiftDown)
lRow = Target.Row - 1
Else
Target.Offset(1, 0).EntireRow.Insert (xlShiftDown)
lRow = Target.Row + 1
If Target.Column  lxCol
Me.Cells(lRow, lxCol).Value = Me.Cells(lRow - 1, lxCol).Value
End Select
Next lxCol
Cancel = True
Else
MsgBox "Impossible to insert level!", vbOKOnly + vbExclamation, "Insert Level"
End If
Application.EnableEvents = True
End Sub


GreetZ Renée

Anzeige
AW: Dezimalklassifikation automatisieren
09.05.2008 19:03:00
Jessica
Hallo Renée, erstmal nochmal DANKE, dass Du mir dabei hilfst.
Ich habe mir jetzt nochmal durchgelesen was Du geschrieben hast und bin jetzt auf die Idee gekommen mal nicht in den Summenbereich zu drücken und ein Ereignis zu erwarten, sondern in die Katalogabfolge ;-). Siehe da, der Code funktioniert und füllt die Nummern auf...
ABER: Da habe ich mich sicherlich total missverständlich ausgedrückt, die Katalog-Nr. wäre ja vorgegeben, es geht mir ja um die Betragszusammenzählung, die entweder mit Direkteinträgen befüllt wird bzw. die darunterliegenden Reihen, die ggf. (!) - aber nicht zwingend vorhanden sein müssen - einer anderen Obergruppe zugehören.
Gebe ich z.B. bei Grundstück (Q1) einen Wert X ein, sollen die Untergruppierungen Q2, Q9, Q10 (die normalerweise Q1 ergeben) für Einträge gesperrt werden. Die Logik beruht ja auf der Katalog-Nr. Ordnung.
LG
Jessi
PS: Das tolle ist allerdings, dass ich diesen Code für die Befüllung anderer Katalog-Nr. nutzen werde ;-) Ersparnis mehr als 30 Minuten ;-) hihi!

Anzeige
Summe Dezimalklassifikation
09.05.2008 22:01:00
Renee
Hi Jessi,
Ja da haben wir uns gründlich missverstanden. Ich bin nochmals die Posts durchgegangen und sehe jetzt das du von Werten geschrieben hast. Hättest du Summen oder Summenbildung erwähnt, wäre es vielleicht besser aufgefallen. Na, ja ich werd mir morgen mal Zeit nehmen um das hinzubiegen.
GreetZ Renée

AW: Summe Dezimalklassifikation
09.05.2008 23:00:27
Konrad
Hi Rene,
also für mich bist du ein Held.
mfg Konrad

AW: Summe Dezimalklassifikation
11.05.2008 10:06:09
Jessica
super...aber wie gesagt, die Dezimaljkassifikation der Katalog-Nr. sollte auch nicht umsonst sein ;-)

AW: Summe Dezimalklassifikation
13.05.2008 10:24:00
Renee
Hi Jessica,
Also dieser Code könnte so ungefähr funktionieren, wie du dir das vorstellst. Probier in mal in deiner Beispieltabelle aus. Er beinhaltet nun die Dezimalklassifikation & die Summenbildung (mit Auswahl Formel oder Wert). Im Moment sind die Konstanten so gesetzt, dass sie auf deine Beispielmappe (2) ausgelegt sind:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'   Code for a simple decimal classification
'   Row before target.row must already be filled (i.e. Row 1 contains initial start)
'   the level below the one clicked is increased be 1
'   clicking a empty cell below one of highest level increases highest level
Const dStart = 0            ' Start first level (e.g. 0 or 1)
Const dMinCol = 6           ' min Column
Const dMaxCol = 10          ' max Column
Const dSumCol = 17          ' Column for building a sum value or formula
Dim lCol As Long, lxCol As Long, lRow As Long
Dim sFormula As String
lRow = ActiveSheet.Cells(1, dMinCol).End(xlDown).Row
If Target.Count = 1 And Target.Row  0 Then
sFormula = sFormula & "(" & Me.Cells(Target.Row + 1, lCol).Address(0, 0) & _
":" & Me.Cells(lRow, lCol).Address(0, 0) & "=0"
Else
sFormula = sFormula & "(" & Me.Cells(Target.Row + 1, lCol).Address(0, 0) & _
":" & Me.Cells(lRow, lCol).Address(0, 0) & ">0"
lxCol = lCol
End If
Else
sFormula = sFormula & "(" & Me.Cells(Target.Row + 1, lCol).Address(0, 0) & _
":" & Me.Cells(lRow, lCol).Address(0, 0) & "=" & _
Me.Cells(Target.Row, lCol).Address(0, 0)
End If
sFormula = sFormula & ")*"
Next lCol
sFormula = sFormula & "(" & Me.Cells(Target.Row + 1, dSumCol).Address(0, 0) & _
":" & Me.Cells(lRow, dSumCol).Address(0, 0) & "))"
Select Case MsgBox("YES = Insert FORMULA" & vbCrLf & _
"NO  = Insert VALUE  ", vbYesNoCancel, "Insert SUM")
Case vbYes
Target.Formula = sFormula
Case vbNo
Target.Value = Evaluate(sFormula)
End Select
Application.EnableEvents = True
Cancel = True
Exit Sub
End If
If Target.Row = 1 Or Target.Count > 1 Or _
Target.Column  dMaxCol Then Exit Sub
If IsEmpty(Target.Offset(-1, 0).Value) Then Exit Sub
Application.EnableEvents = False
If IsEmpty(Me.Cells(Target.Row, dMaxCol).Value) Or _
Me.Cells(Target.Row, dMaxCol).Value >= Me.Cells(Target.Row + 1, dMaxCol).Value Then
lCol = Target.Column
If IsEmpty(Target.Value) Then
Target.EntireRow.Insert (xlShiftDown)
lRow = Target.Row - 1
Else
Target.Offset(1, 0).EntireRow.Insert (xlShiftDown)
lRow = Target.Row + 1
If Target.Column  lxCol
Me.Cells(lRow, lxCol).Value = Me.Cells(lRow - 1, lxCol).Value
End Select
Next lxCol
Cancel = True
Else
MsgBox "Impossible to insert level!", vbOKOnly + vbExclamation, "Insert Level"
End If
Application.EnableEvents = True
End Sub


GreetZ Renée

Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige