Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1436to1440
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
Inhaltsverzeichnis

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

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

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

Anzeige
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

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

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

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

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

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

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

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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige