Bestimmte Felder dürfen nicht ausgefüllt werden

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Bestimmte Felder dürfen nicht ausgefüllt werden von: Thomas Flach
Geschrieben am: 22.03.2005 08:20:40

Guten Morgen
Ich habe gleich mal zwei fragen. Die erste steht bereits im Titel. Ich denke das müsste mit VBA lösbar sein , nur wie ?
Also ich habe mir vorgestellt wenn:
A1 = 1 ( Betreff )
A2 = 2 ( Dauer )
A3 = 3 ( Priorität )
A4 = 4 ( Start )

Nun möchte ich bei B4 auch eine 4 einsetzten habe aber bei B1-3 die gleichen Werte drin wie bei A1-3. Das darf aber nicht möglich sein. Es soll dann irgend eine alertbox kommen die einem sagt das es nicht erlaubt sei. Umschrieben meine ich wenn bestimmte Felder schon mal gleich ausgefüllt sind darf es nicht möglich sein in ein bestimmtes Feld nochmals den gleichen wert einzugeben.

Dann meine zweite Frage. Ich möchte das es meine Tabelle automatisch an die anpasst die auf einem anderen Worksheet ist. Eigentlich kann ich dann ja einfach
=Worksheet!A1 machen, aber das sieht doof aus, da wenn ich das einfach nach unten ziehe die Felder die leer sind eine 0 bekommen. Zusätzlich werden die Inhalte nicht angepasst. Wenn ich eine neue Reihe einfüge dann setzt der Code in den Zellen nicht fort sondern lässt diese Reihe aus:
=Worksheet!A1
=Worksheet!B1
=Worksheet!D1
Wenn ich C neu eingefügt habe auf dem Worksheet? Wie umgehe ich das?

Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werden von: Volker
Geschrieben am: 22.03.2005 09:52:04

Hallo Thomas,

zu Deiner 1.Frage (die Antwirt zur 2. bleib ich Dir schuldig).
Schreib das hier im VBA-Editor unter Objekte in das entsprechende Tabellenblatt.
Das Ereignis wird bei einer Änderung des Blattes ausgelöst, prüft, ob die Änderung im Bereich B1-B4 liegt und dann, ob im Bereich A1-A2 alle Werte gleich sind.
Wenn ja, kommt eine Meldung.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim bereich As Range
Set bereich = Range("B1:B4")
If Not Intersect(Target, bereich) Is Nothing Then
    For Each zelle In bereich
        If zelle <> zelle.Offset(0, -1) Then Exit Sub
    Next
End If
MsgBox ("Datensatz schon vorhanden !")
Target.select   'zeigt die letzte geänderte Zelle an, durch die die Gleichheit erfüllt ist.
End Sub


Gruß
Volker


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Thomas Flach
Geschrieben am: 22.03.2005 10:08:50

hmmm sieht schon mal nicht schlecht aus. nur jetzt dürfen die felder nie dasselbe sein. es soll aber nur die letzte zeile überprüft werden ? A4 = 4 ( Start ) die darf nicht gleich sein wenn die anderen 3 bereits gleich sind.


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Volker
Geschrieben am: 22.03.2005 10:16:15

Hi Thomas,

und was ist, wenn Du erst B4 ausfüllst und dann B1-B3 ?
Bis alle 4 gleich sind passiert doch auch nichts, oder?

Hab grad noch einen Bug entdeckt: Die Meldung kommt immer, wenn Du außerhalb B1:B4 was änderst. Damit nicht mehr:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim bereich As Range
Set bereich = Range("B1:B4")
If Not Intersect(Target, bereich) Is Nothing Then
    For Each zelle In bereich
        If zelle <> zelle.Offset(0, -1) Then Exit Sub
    Next
Else
    Exit Sub
End If
MsgBox ("Datensatz schon vorhanden !")
Target.Select
End Sub



Gruß
Volker


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Thomas Flach
Geschrieben am: 22.03.2005 10:37:29

https://www.herber.de/bbs/user/19984.xls

hmmm und wie soll ich das jetzt hier anwenden ? irgend wie wenn ich das anpasse funktioniert das nicht!
Wenn "B3 Verantw.:" + "C3 Prio.:" gleich sind darf "G3 Start (Wo):" nicht auch noch gleich sein. Wenn B3 und C3 gleich sind G3 aber nicht dann darf es gehen. Nun soll das ganze aber über den ganzen bereich so sein, wie macht man das mit SPALTE() ??


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Volker
Geschrieben am: 22.03.2005 10:52:02

Tja, das macht die Sache etwas komplizierter.
Als ich das Bsp. gemacht hab, bin ich davon ausgegangen, dass die Datensätze in Spalten, nicht in Zeilen stehen.
Wenn ich das richtig sehe, darf im gesamten sheet kein Datensatz identisch sein, auch nicht, wenn die Pedenz unterschiedlich ist.
Und Änderungen können irgendwo auf dem Blatt bezügl. Verantworlichem, Prio oder Startwoche passieren.
Also muß man bei jeder Änderung alle Datensätze durchforsten, Stimmts?
Dafür ist das Bsp. natürlich zu starr.

Gruß
Volker


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Thomas Flach
Geschrieben am: 22.03.2005 11:00:01

https://www.herber.de/bbs/user/19987.xls

Ich hoffe du verstehst was ich meine! eigentlich hast du es richtig beschrieben bei deinem letzten post!


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Volker
Geschrieben am: 22.03.2005 12:50:31

Hallo Thomas,

hab schon mal vorgearbeitet.
Probiermal, ob es paßt.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim bereich, zelle As Range
Dim spalte, akt_zeile, zeilen As Integer
akt_zeile = Target.Row
spalte = Target.Column
zeilen = UsedRange.Rows.Count
If Cells(akt_zeile, spalte) = "" Then Exit Sub
Select Case spalte
    Case 2
        Set bereich = Range(Cells(1, spalte), Cells(zeilen, spalte))
            bereich.Select
            For Each zelle In bereich
                If zelle = Target And zelle.Offset(0, 1) = Target.Offset(0, 1) And zelle.Offset(0, 5) = Target.Offset(0, 5) And zelle.Row <> akt_zeile Then
                    GoTo warnung
                End If
            Next
    Case 3
        Set bereich = Range(Cells(1, spalte), Cells(zeilen, spalte))
            For Each zelle In bereich
                If zelle = Target And zelle.Offset(0, -1) = Target.Offset(0, -1) And zelle.Offset(0, 4) = Target.Offset(0, 4) And zelle.Row <> akt_zeile Then
                    GoTo warnung
                End If
            Next
    Case 7
        Set bereich = Range(Cells(1, spalte), Cells(zeilen, spalte))
            For Each zelle In bereich
                If zelle = Target And zelle.Offset(0, -5) = Target.Offset(0, -5) And zelle.Offset(0, -4) = Target.Offset(0, -4) And zelle.Row <> akt_zeile Then
                    GoTo warnung
                End If
            Next
End Select
Exit Sub
warnung:
MsgBox ("Datensatz schon vorhanden !")
zelle.Select
End Sub



Gruß
Volker


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Thomas Flach
Geschrieben am: 22.03.2005 13:10:57

Irgend wie verstehe ich nicht ganz wie ich das jetzt auf mein FIle anwenden kann, ich habe es ein wenig angepasst als es nicht funktionierte aber auch das ging nicht !?


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Volker
Geschrieben am: 22.03.2005 13:31:13

Hi Thomas,

keine Ahnung, was Du da noch anpassen willst.
Hab den Code für Deine Originaldaten gemacht.
Guckst Du Bsp.
Das Modul1 im Projekt kannst Du rausschmeißen, da hab ich nur rumgespielt.

https://www.herber.de/bbs/user/19995.xls

Gruß
Volker


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Thomas Flach
Geschrieben am: 22.03.2005 13:37:56

Hallo Volker

Ich habe meinen Fehler gefunden. Danke dir vielmals funktioniert einwandfrei. Nur jetzt habe ich noch das Problem mit den dynamischen Inhalten anpassen, also wenn ich eine neue Reihe einfüge dann wird sie nicht in der "tabelle" upgedated! wie kann ich das noch lösen ? Also meine zweite Frage die ich am Anfang gestellt habe !


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Volker
Geschrieben am: 22.03.2005 13:55:08

Ok, also hier mal exemplarisch die Formel in Zelle B3
in C3 entsprechend anpassen und so weit runterziehen, wie maximal neue Aufgaben kommen können. Meinetwegen auch bis Zeile 65535.

=WENN(Pendenzen!C4="";"";Pendenzen!C4)

Eine VBA Lösung, die Dir autom. neue Einträge generiert, ist mir jetzt zu aufwändig.
Wenn Dich leere Zellen mit Rahmen stören, laß die Rahmen nur anzeigen, wenn die Zellen nicht leer sind. (bedingte Formatierung)

Gruß
Volker


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Thomas Flach
Geschrieben am: 22.03.2005 14:48:08

Komisch jetzt funktioniert das mit dem ausfüllen nicht mehr :( da ich leider kein vba kann weiss ich nicht was ich jetzt ändern soll!?
https://www.herber.de/bbs/user/19999.xls

cool file 19999 ;)


Bild


Betrifft: AW: Bestimmte Felder dürfen nicht ausgefüllt werde von: Volker
Geschrieben am: 22.03.2005 15:55:24

kein Wunder, Du hast links eine leere Spalte eingefügt.
jetzt geht's wieder.
Wenn Du verstehen willst, was passiert, setz mal einen Haltepunkt (link neben die Zeile klicken) in den Anfang des Codes und geh mit F8 schrittweise.
Wenn Du mit dem Cursor über eine Variable gehst, wird ihr Wert angezeigt.

Beschreibung: Das WorksheetChange-Ereignis wird ausgelöst, wenn sich irgendwas im Blatt ändert. Target repräsentiert den geänderten Range.
Target.Row/Column dessen Spalten-/Zeilenindex. (Spalte A=1, B=2 usw.)

Wenn Target leer ist oder außerhalb der Spalten C,D oder H, passiert nichts.
Sonst wird jede Zelle der entsprechenden Spalte durchsucht und, wenn alle Daten gleich sind UND es sich um eine andere Zeile als die von target handelt, die Messagebox angezeigt.
Da die Spaltenindizes in der SelectCase-Anweisung hart kodiert sind
(Case 3,Case 4,Case 8), klappt es natürlich nicht mehr, wenn die Daten plötzlich in anderen Spalten stehen.

Zuletzt werden die gleichen Datensätze in der Tabelle markiert.

Gruß
Volker


Bild


Betrifft: Ups, Datei vergessen.... von: Volker
Geschrieben am: 22.03.2005 15:56:41

https://www.herber.de/bbs/user/20010.xls


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Bestimmte Felder dürfen nicht ausgefüllt werden"