Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA | Zellen erst nach Eingabe freigeben

VBA | Zellen erst nach Eingabe freigeben
21.07.2015 09:04:56
Markus
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

Anzeige

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pflichtfelder mit Datenüberprüfung setzen
21.07.2015 10:56:58
Michael
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

Anzeige
AW: Pflichtfelder mit Datenüberprüfung setzen
21.07.2015 11:03:54
Markus
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

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

Anzeige
AW: Das kommt drauf an...
21.07.2015 11:09:30
Michael
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

AW: Problem Dropdown
21.07.2015 11:21:57
Markus
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

Anzeige
AW: Ein Ansatz und eine Anregung...
21.07.2015 12:52:16
Michael
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

Anzeige
AW: Danke für die Anregungen
21.07.2015 13:24:29
Markus
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

Anzeige
so vielleicht
21.07.2015 14:22:29
WalterK
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

Anzeige
AW: Kann ich so nicht nachvollziehen...
21.07.2015 14:31:51
Michael
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

Anzeige
AW: Kann ich so nicht nachvollziehen...
22.07.2015 08:56:34
Markus
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

Anzeige
AW: Also so wird das nix...
22.07.2015 09:26:48
Michael
...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

Anzeige
AW: Also so wird das nix...
22.07.2015 09:59:29
Markus
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

Anzeige
AW: Also so wird das nix...
22.07.2015 11:28:09
Michael
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

Anzeige
AW: Also so wird das nix...
22.07.2015 11:54:26
Markus
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

Anzeige
AW: Aaaarrrrghh...
22.07.2015 13:28:22
Michael
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

Anzeige
AW: Aaaarrrrghh...aha!
22.07.2015 13:47:54
Markus
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

Anzeige
AW: \(.,.)/ - Hallelujah...
22.07.2015 14:18:51
Michael
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

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

AW: Danke Dir! owT
21.07.2015 11:07:19
Michael
.

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

Anzeige
AW: VBA | Zellen erst nach Eingabe freigeben
21.07.2015 12:55:14
Rudi
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
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zellen erst nach Eingabe freigeben in Excel


Schritt-für-Schritt-Anleitung

  1. Datenüberprüfung einrichten:

    • Wähle die Zellen B7:K16 aus.
    • Gehe zu Daten > Datentools > Datenüberprüfung.
    • Wähle Benutzerdefiniert und gebe die folgende Formel ein:
      =ANZAHL2($B$17:$B$19)=3
    • Definiere eine Fehlermeldung, die angezeigt wird, wenn die Bedingungen nicht erfüllt sind.
  2. VBA-Code einfügen:

    • Öffne den VBA-Editor (Alt + F11).
    • Füge im Code-Modul der Arbeitsmappe diesen Code ein:
      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
    • Füge im Code-Modul des betroffenen Tabellenblatts folgenden Code ein:
      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 tragen Sie zunächst die Daten für Datum, Namen und Kostenstelle ein!"
               Target = ""
               Target.Select
           End If
       End If
      End Sub
    • Stelle sicher, dass "Tabelle1" durch den Namen deines Arbeitsblatts ersetzt wird.
  3. Testen:

    • Schließe und öffne die Arbeitsmappe, um zu testen, ob die Sperrung und Freigabe der Zellen wie gewünscht funktioniert.

Häufige Fehler und Lösungen

  • Fehler: Das gesamte Dokument wird gesperrt: Stelle sicher, dass der Bereich B7:K16 nicht gesperrt ist, bevor du den VBA-Code ausführst.
  • Fehler: MsgBox zeigt eine falsche Meldung: Überprüfe, ob die Formel zur Datenüberprüfung korrekt eingegeben wurde und dass die Pflichtfelder (B17:B19) wirklich ausgefüllt sind.
  • Fehler: Dropdown-Listen funktionieren nicht: Achte darauf, dass die Dropdown-Listen in den Zellen B7:K16 korrekt eingerichtet sind, bevor du die Sperrung hinzufügst.

Alternative Methoden

Falls du keine VBA-Lösungen nutzen möchtest, kannst du die Datenüberprüfung anpassen, um die Dropdown-Optionen zu ändern:

  • Erstelle eine Hilfszelle, die überprüft, ob die Pflichtfelder gefüllt sind.
  • Verwende die Formel:
    =WENN(ANZAHL2($B$17:$B$19)=3; "DeinBereichsName"; "")
  • Setze die Datenüberprüfung der Eingabezellen auf:
    =INDIREKT($A$1;WAHR)

    Dies ermöglicht es, die Dropdown-Listen basierend auf den Eingaben in B17:B19 dynamisch zu ändern.


Praktische Beispiele

Angenommen, du hast eine Tabelle zur Erfassung von Projektkosten, die folgende Zellen enthält:

  • B17: Datum
  • B18: Name
  • B19: Kostenstelle

Die Eingabebereiche sind in B7:K16. Wenn ein Benutzer diese Felder nicht ausfüllt und versucht, in den Eingabebereich zu klicken, wird die MsgBox angezeigt, und die Eingabe in den Zellen wird nicht erlaubt.


Tipps für Profis

  • Wende Formatierungen an: Du kannst die Zellen B17:B19 schraffieren, um visuell hervorzuheben, dass diese Pflichtfelder sind. Nutze dazu die Funktion "Zelle schraffieren" in den Formatierungsoptionen von Excel.
  • Verwende die Umbruchvorschau: Setze die Umbruchvorschau zurück, um sicherzustellen, dass die Sichtbarkeit der Eingabefelder bei großen Datenmengen nicht beeinträchtigt wird.
  • Vermeide unnötige Dropdowns: Wenn du Dropdowns nicht benötigst, kannst du sie ganz leicht entfernen, um die Benutzerfreundlichkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich die Dropdown-Listen in den Eingabebereichen anpassen? Du kannst die Dropdown-Listen über die Datenüberprüfung anpassen, indem du den benannten Bereich für die Auswahl in den Eingabefeldern verwendest.

2. Was mache ich, wenn ich VBA nicht verwenden möchte? Du kannst die Datenüberprüfung verwenden, um sicherzustellen, dass die Pflichtfelder ausgefüllt sind, bevor Eingaben in die anderen Zellen vorgenommen werden können.

3. Wie kann ich Zellen schraffieren? Du kannst Zellen in Excel schraffieren, indem du sie auswählst, mit der rechten Maustaste klickst und "Zellen formatieren" wählst. Unter dem Reiter "Füllung" kannst du die gewünschte Schraffur auswählen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige