VBA | Zellen erst nach Eingabe freigeben

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

Betrifft: VBA | Zellen erst nach Eingabe freigeben
von: Markus
Geschrieben am: 21.07.2015 09:04:56

Hallo liebe Experten,
ich habe eine Frage:
Und zwar möchte ich, dass der Benutzer erst in die Zellen B17, B18 und B19 (genau genommen sind es jeweils mit Spalte C verbundene Zellen) Informationen eintragen muss. Hat er dies getan, so sollen die Zellen B7:K16 freigegeben werden, denn zuvor sollen diese gesperrt sein. Klickt er dennoch in den Bereich, so soll die Msgbox "Bitte tragen Sie zunächst die Daten für Datum, Namen und Kostenstelle ein" aufgehen.
Ich hab schon ein wenig rumprobiert, leider hat es nie funktioniert und es wurde entweder nichts gesperrt oder das ganze Dokument oder die Sperrung wurde nicht aufgehoben :/
Vielen Dank an euch!
Gruß Markus

Bild

Betrifft: AW: Pflichtfelder mit Datenüberprüfung setzen
von: Michael (migre)
Geschrieben am: 21.07.2015 10:56:58
Hallo Markus!
Du verlangst zwar dezidiert nach einer VBA-Lösung, aber Du kannst Deinen gewünschten Effekt auch über Excel-Bordmittel erreichen - daher hier mein diesbzgl. Vorschlag:
Im Grund willst Du Pflichtfelder definieren (B17:B19) - diese müssen befüllt sein, bevor im abhängigen Bereich (B7:K16) Einträge vorgenommen werden können. Markiere also Deinen abhängigen Bereich (B7:K16) und gehe im Menüband zu [Daten] - [Datentools] - [Datenüberprüfung]. Da setzt Du für [Benutzerdefiniert] folgende Formel:

=WENN(ANZAHL2(B17:B19)=3;WAHR;FALSCH)
Du kannst dann auch eine eigene Fehlermeldung eingeben (das wäre das Pendant zur MsgBox).
Hilft?
LG
Michael

Bild

Betrifft: AW: Pflichtfelder mit Datenüberprüfung setzen
von: Markus
Geschrieben am: 21.07.2015 11:03:54
Hallo Michael,
vielen Dank für deine Hilfe.
Das Problem ist, dass in den Zellen bereits eine Datenüberprüfung hinterlegt ist und diese gelöscht werden müsste, um den von dir vorgeschlagenen Weg zu nehmen.
Liebe Grüße,
Markus

Bild

Betrifft: AW: Pflichtfelder mit Datenüberprüfung setzen
von: Rudi Maintaire
Geschrieben am: 21.07.2015 11:09:07
Hallo,
kann man wahrscheinlich kombinieren.
=Und(Anzahl2($B$17:$K$19)=3;Deine Bedingung)
Gruß
Rudi

Bild

Betrifft: AW: Das kommt drauf an...
von: Michael (migre)
Geschrieben am: 21.07.2015 11:09:30
Markus,
...ob Du die beiden Bedingungen nicht kombinieren könntest. Wir kennen Deine erste Datenüberprüfung nicht, aber vielleicht ließe sich hier schon mit zusätzlichem [UND()] arbeiten...
LG
Michael

Bild

Betrifft: AW: Problem Dropdown
von: Markus
Geschrieben am: 21.07.2015 11:21:57
Hallo Michael, hallo Rudi,
Danke für die schnelle Rückmeldung.
Das Problem ist, dass in den Feldern Dropdownlisten hinterlegt sind und ich dadurch keine benutzerdefinierte Prüfung hinzufügen kann :(
Viele Grüße
Markus

Bild

Betrifft: AW: Ein Ansatz und eine Anregung...
von: Michael (migre)
Geschrieben am: 21.07.2015 12:52:16
Markus,
... Als Anregung für das nächste Mal: Gib möglichst alle bekannten Umstände und Fakten in Bezug auf Deine Frage gleich im ersten Beitrag an - in diesem Fall hätte es Dich nur einen Satz gekostet ("im betroffenen Bereich ist bereits eine Datenüberprüfung mit Liste hinterlegt"). Somit hätten Rudi und ich nicht erst Ansätze veröffentlichen müssen, die sowieso nicht gebraucht werden; und Du ersparst Dir einige Beiträge, wenn Du dann gleich die Lösung erhältst, die Du brauchen kannst.
Zurück zu Deinem Problem, hier ein Ansatz von mir:
Entsperre zunächst alle Zellen im betroffenen Tabellenblatt - dann VBA:
1) mit Öffnen der Mappe wird das betroffene Tabellenblatt geschützt (nur für den User, nicht für VBA),
2) und der Eingabe-Bereich [B7:K16] gesperrt.
3) Wählt der Benutzer Zellen im Eingabebereich [B7:K16] wird überprüft ob im Bereich der Pflichtfelder [B17:B19] Eingaben (genau 3 in diesem Fall) vorhanden sind
3a) Keine Eingaben: Eine MsgBox wird angezeigt
3b) Eingaben vollständig: Der Eingabebereich wird entsperrt und der Benutzer kann die Dropdownlisten verwenden.
Dazu in das Code-Modul der Arbeitsmappe:

Private Sub Workbook_Open()
    Dim Eingabe As Range: Set Eingabe = Worksheets("Tabelle1").Range("B7:K16")
    Worksheets("Tabelle1").Protect Password:="test", userinterfaceonly:=True
    Eingabe.Locked = True
    
End Sub
Und in das Code-Modul der betroffenen Tabelle:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    Dim Eingabe As Range: Set Eingabe = Tabelle1.Range("B7:K16")
    Dim Pflicht As Range: Set Pflicht = Tabelle1.Range("B17:B19")
    
    If Not Intersect(Eingabe, Target) Is Nothing Then
        If WorksheetFunction.CountA(Pflicht) = 3 Then
            Eingabe.Locked = False
        Else: MsgBox "Bitte zuerst F15:F17 ausfüllen!"
        End If
    End If
    
End Sub
[Tabelle1] muss natürlich mit Deinem Blattnamen ersetzt werden. Zu Beachten ist auch, dass das Ganze nicht "rückwirkend" funktioniert: D.h. wird der Bereich entsperrt, weil alle Pflichteingaben vorhanden sind, und der User schreibt Daten in den Eingabebereich löscht aber dann einen Teil aus dem Pflichtbereich, dann bleiben die bereits im Eingabebereich vorgenommenen Daten erhalten OHNE Warnung!
LG
Michael

Bild

Betrifft: AW: Danke für die Anregungen
von: Markus
Geschrieben am: 21.07.2015 13:24:29
Hallo Michael,
vielen Dank für die Anregungen. Sind die Kenntnisse nicht so gut, ist es manchmal schwer abzuschätzen, welche Informationen relevant sind. Zukünftig geb ich einfach alles an ;)
Zu deinem Code:
Jetzt wird beim Öffnen das gesamte Dokument gesperrt und ich kann auch keine Eingabe in den Pflichtfeldern vornehmen.
Gruß,
Markus

Bild

Betrifft: so vielleicht
von: WalterK
Geschrieben am: 21.07.2015 14:22:29
Hallo Markus,
ein Code aus der Recherche:

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    Application.EnableEvents = False
    Dim rgBereich As Range
    Dim zaehler1 As Range
    Set rgBereich = Worksheets("Tabelle1").Range("B17,B18,B19") 'Pflichfelder
        For Each zaehler1 In rgBereich
            If zaehler1 = "" Then
            zaehler1.Select
        Exit For
        End If
    Next zaehler1
    Application.EnableEvents = True
End Sub
Servus, Walter

Bild

Betrifft: AW: Kann ich so nicht nachvollziehen...
von: Michael (migre)
Geschrieben am: 21.07.2015 14:31:51
Markus,
...bei mir funktioniert es wie angegeben. Hast Du noch anderen Code in der Mappe laufen, der sich auf die Arbeitsmappe etc. bezieht?
Rudi bzw. Walter haben auch noch Codes angeboten, versuch's evtl. damit. Ohne nähere Infos kann ich nur sagen: meine Variante funktioniert bei mir; ich kann aber natürlich nicht alle Gegebenheiten Deiner Mappe nachstellen...
LG
Michael

Bild

Betrifft: AW: Kann ich so nicht nachvollziehen...
von: Markus
Geschrieben am: 22.07.2015 08:56:34
Hallo Michael, Rudi, Walter,
ja, in der Arbeitsmappe des Tabellenblatts laufen noch ein paar Change Befehle mit. Und in der Arbeitsmappe des Dokuments werden beim Öffnen drei Funktionen aufgerufen.
"= ANZAHL2(B17:B19)=3"
Um ehrlich zu sein, bin ich aus diesem Code nicht ganz schlau geworden. In welcher Zelle würde ich die Formel denn eintragen?
Vielen Dank an euch,
Markus

Bild

Betrifft: AW: Also so wird das nix...
von: Michael (migre)
Geschrieben am: 22.07.2015 09:26:48
...werden, Markus!
in der Arbeitsmappe des Tabellenblatts laufen noch ein paar Change Befehle mit
in der Arbeitsmappe des Dokuments werden beim Öffnen drei Funktionen aufgerufen
All diese Umstände kennen wir leider nicht; also können wir auch unsere Code-Beispiele nicht an Deine konkreten Bedingungen in der Arbeitsmappe anpassen. Abhilfe dazu ist es eine Beispiel-Mappe hochzuladen (mit ggf. anonymisierten Daten, aber von Aufbau/Struktur gleich zu Deiner Original-Mappe).
Bzgl. = ANZAHL2(B17:B19)=3
bin ich aus diesem Code nicht ganz schlau geworden
Jetzt bin ich ratlos: Kannst Du dem Faden hier, v.a. hinsichtlich Deiner ursprünglichen Fragestellung, noch folgen?...
Begonnen haben wir damit, dass Du uns ein Szenario erklärt hast, in dem Du Pflichteingaben realisieren möchtest. Die o.a. Formel wurde Dir für die Datenüberprüfung angeboten - da müsste die Formel auch hin, nicht in eine Zelle.
Allerdings hast Du uns danach erklärt, dass Du die Datenüberprüfung nicht nutzen kannst, weil diese bereits mit "Liste" gesetzt ist. Also haben wir VBA-Lösungen angeboten.
Dann meldest Du, dass (m)ein Code nicht funktioniert - gibst aber auch Deine Mappe bzw. Deine vorhandenen Codes nicht preis...
Wo brauchst Du nun also Hilfe? Wenn es um das Integrieren von Code in ein bestehendes VBA-Projekt geht, dann brauchen wir das VBA-Projekt von Dir (= Dein bestehender Code).
LG
Michael

Bild

Betrifft: AW: Also so wird das nix...
von: Markus
Geschrieben am: 22.07.2015 09:59:29
Hallo Michael,
bitte entschuldige die Verwirrung. Da ich mit viel Halbwissen unterwegs bin, ist das leider etwas unverständlich.
Das Dokument kann ich leider nicht hochladen, da es Firmeneigentum ist. Auch anonymisieren möchte ich da nichts.
Daher muss ich wohl selbst eine Lösung finden oder ohne die Prüfung auskommen.
Bzgl. = ANZAHL2(B17:B19)=3
Ja, ich wollte zunächst eine VBA Lösung. Aber die hier angebotene Formel sieht für mich aus, als würde ich sie als Formel für eine Zelle verwenden (es ist ja auch okay, wenn es kein VBA ist, nur dachte ich, dass das auf Grund der hinterlegten Liste nicht möglich ist). Und daher habe ich nochmals nachgefragt, für welche Zelle diese Formel denn dann eingegeben werden muss.
Ich danke euch allen dennoch vielmals für die Unterstützung :)
Liebe Grüße,
Markus

Bild

Betrifft: AW: Also so wird das nix...
von: Michael (migre)
Geschrieben am: 22.07.2015 11:28:09
Hallo Markus!
Nachdem Du keine Bsp-Mappe hochladen kannst/willst (was ich grds. verstehe), hier noch ein Versuch von mir, wie Du es erreichen kannst eine Dropdown-Listenauswahl mit den verpflichtenden Zellen zu kombinieren. Wieder eine Lösung ohne VBA, damit Du hier nicht in bestehenden Code integrieren musst:
Die Liste für den Eingabebereich (B7:K16) sollte ein benannter Zellbereich werden (d.h. einen Bereichsnamen erhalten). In einer Hilfszelle auf dem Tabellenblatt (kann ja auch über Format "unlesbar" gemacht werden) fragst Du ab, ob die Pflichtfelder (B17:B19) alle gefüllt sind:
=WENN(ANZAHL2($B$17:$B$19)=3;"DeinBereichsName";"")
Die Hilfszelle ist in meinem Bsp. in B1. In Deinem Eingabebereich legst du die Datenüberprüfung auf "Liste" wie folgt fest:
=INDIREKT($B$1;WAHR)
Somit wird in der Dropdown-Listen-Auswahl in Deinem Eingabebereich nur ein leeres Dropdown angeboten, wenn die Pflichtfelder nicht vollständig gefüllt sind, sonst aber die Auswahl-Liste.
Wenn das nicht funktioniert, fällt mir nichts schlaues mehr ein ;-). Gib Bescheid ob Du dabei Hilfe brauchst!
LG
Michael

Bild

Betrifft: AW: Also so wird das nix...
von: Markus
Geschrieben am: 22.07.2015 11:54:26
Hallo Michael,
vielen Dank für deine erneute Hilfe!
Ich habe das ganze versucht so umzusetzen, wie du es vorschlägst:
Der Bereich B7:K16 besitzt nun den Bereichsnamen "Dateneingabe".
Zelle A21 hat die Abfrage =WENN(ANZAHL2($B$17:$B$19)=3;"Dateneingabe";"") bekommen und nun strauchel ich:
Wo kann ich in der Datenüberprüfung mit der Indirekt Formel =INDIREKT($A$21;WAHR) arbeiten?
Userbild
So sieht die Datenüberprüfung für Zelle C7 aus.
Vielen Dank an dich und liebe Grüße,
Markus

Bild

Betrifft: AW: Aaaarrrrghh...
von: Michael (migre)
Geschrieben am: 22.07.2015 13:28:22
Hallo Markus!
Entschuldige meinen Betreff - aber ich merke, Du hast mich schon wieder falsch verstanden. Nachdem ich aber nicht mehr weiß, wie ich es schreiben soll, schaue Dir doch dieses Beispiel von mir an: https://www.herber.de/bbs/user/99013.xlsx
Ich hoffe damit ist Dir die Funktionsweise meines Vorschlags klar und Du kannst das auf Deine Mappe übertragen.
Okay?
Michael

Bild

Betrifft: AW: Aaaarrrrghh...aha!
von: Markus
Geschrieben am: 22.07.2015 13:47:54
Hallo Michael,
fast schon peinlich, was für Kopfzerberchen ich dir bereite. Habe aber endlich verstanden, was du mir sagen willst.
Ich brauche jedoch unterschiedliche Dropdownzellen. Unterschiede sind aber nur Spaltenweise vorhanden. D.h. ich kann einfach mit mehreren Hilfszellen und Wertebereichen arbeiten :)
Vielen Dank dir!!
Gruß,
Markus

Bild

Betrifft: AW: \(.,.)/ - Hallelujah...
von: Michael (migre)
Geschrieben am: 22.07.2015 14:18:51
Hallo Markus!
Ich sag's nur ungern, aber...
Ich brauche jedoch unterschiedliche Dropdownzellen
...das hättest Du sagen müssen - kann ja keiner riechen. ;-)
Habe aber endlich verstanden, was du mir sagen willst.
Das freut mich - ich bin froh, dass ich Dir nun eine Lösung liefern konnte mit der Du arbeiten kannst.
D.h. ich kann einfach mit mehreren Hilfszellen und Wertebereichen arbeiten
...Ja, richtig.
Viel Erfolg noch und liebe Grüße
Michael

Bild

Betrifft: ohne Wenn()
von: Rudi Maintaire
Geschrieben am: 21.07.2015 11:05:04
Hallo Michael
= ANZAHL2(B17:B19)=3
reicht, da der Ausdruck Wahr oder Falsch zurückgibt. Das muss man nicht mit Wenn() machen.
Gruß
Rudi

Bild

Betrifft: AW: Danke Dir! owT
von: Michael (migre)
Geschrieben am: 21.07.2015 11:07:19
.

Bild

Betrifft: per Datenüberprüfung
von: Rudi Maintaire
Geschrieben am: 21.07.2015 11:01:49
Hallo,
Zulassen: Benutzerdefiniert
Formel: =ANZAHL2($B$17:$B$19)=3
und Fehlermeldung definieren.
Gruß
Rudi

Bild

Betrifft: AW: VBA | Zellen erst nach Eingabe freigeben
von: Rudi Maintaire
Geschrieben am: 21.07.2015 12:55:14
Hallo,

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("B7:k16")) Is Nothing Then
    If Target <> "" Then
      If Application.CountA(Range("B17:B19")) <> 3 Then
        MsgBox "Bitte tragen Sie zunächst die Daten für Datum, Namen und Kostenstelle ein"
        Target = ""
        Target.Select
      End If
    End If
  End If
End Sub

Gruß
Rudi

 Bild

Beiträge aus den Excel-Beispielen zum Thema "VBA | Zellen erst nach Eingabe freigeben"