Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1184to1188
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

Eingabe erzwingen

Eingabe erzwingen
Wolfango
Hallo zusammen!
folgende Aufgabenstellung:
Ich möchte die Eingabe in bestimmte Zellen erwingen (vermutlich geht das nur mit VBA).
Idealerweise sieht das dann so aus (Beispiel):
In A1 sowie im Bereich B4:C5 muss zwingend etwas eingegeben werden. Solange dort nichts eingetragen (oder aus einer in diesen Zellen vordefinierten Dropdown-Liste ausgewählt wurde) sollen die Befehle 'Speichern' bzw. 'speichern unter' nicht zur Verfügung stehen. Ruft man sie dennoch auf erscheint idealerweise ein Text: 'Die Pflichtfelder sind nicht befüllt, Datei kann nicht gespeichert weren!".
Geht das irgendwie?
Besten Dank!
Gruß,
Wolfango
AW: Eingabe erzwingen
18.11.2010 14:19:28
Wolfgang
Vielmals 'Sorry' für das Doppel-Posting....hab' mich verklickt hier....
AW: Eingabe erzwingen
18.11.2010 14:31:03
Timo
Hallo Wolfgang,
hier mal ein mit heisser Nadel zusammengestricktes Beispiel:
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Abfrage_Pflichtfelder
Cancel = True
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Abfrage_Pflichtfelder
Cancel = True
End Sub

Private Sub Abfrage_Pflichtfelder()
Dim i As Integer
Dim rng As Range
Dim c As Object
Dim x
If Sheets("Tabelle1").Cells(1, 1).Value = "" Then i = i + 1
Set rng = "B4:C5"
For Each c In rng
If c.Value = "" Then i = i + 1
Next
If i > 0 Then
x = MsgBox("Es sind noch " & i & " Pflichtfelder zu befüllen!", vbOKOnly, "Speichern/ _
Schliessen nicht möglich!")
End If
End Sub
Pack diesen Code in "DieseArbeitsmappe" der betreffenden Arbeitsmappe, dann sollte es funktionieren. (VBA-Editor)
Geht sicherlich noch etwas eleganter, ist aber wie gesagt nur so nebenbei entstanden.
Gruß
Timo
Anzeige
AW: Eingabe erzwingen
18.11.2010 14:34:20
Timo
Hi,
ups, noch ein Fehler gefunden...
Kleine Korrektur, sonst kann man gar nicht mehr Schließen oder Speichern.
Option Explicit
Dim Abbruch As Boolean
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Abfrage_Pflichtfelder
If Abbruch = True Then
Cancel = True
End If
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Abfrage_Pflichtfelder
If Abbruch = True Then
Cancel = True
End If
End Sub

Private Sub Abfrage_Pflichtfelder()
Dim i As Integer
Dim rng As Range
Dim c As Object
Dim x
If Sheets("Tabelle1").Cells(1, 1).Value = "" Then i = i + 1
Set rng = "B4:C5"
For Each c In rng
If c.Value = "" Then i = i + 1
Next
If i > 0 Then
x = MsgBox("Es sind noch " & i & " Pflichtfelder zu befüllen!", vbOKOnly, "Speichern/ _
Schliessen nicht möglich!")
Abbruch = True
Else
Abbruch = False
End If
End Sub
Gruß
Timo
Anzeige
Schon interessant ...
18.11.2010 14:53:52
Holger
... was bei Dir so nebenbei entsteht ;).
Wie lange programmierst du schon in VBA?
AW: Schon interessant ...
18.11.2010 15:07:39
Timo
Hi Holger,
das ist eine Fingerübung gewesen, ein wenig Copy und Paste aus schon vorhandenen Codes und das dann ein wenig angepasst.
Ich bin seit ca. 16 Jahren mit Excel und seit ca. 14 Jahren mit VBA unterwegs. Anfangs Autodidakt und später teilweise im Berufsleben komplette "Applikationen" im Excel-VBA erstellt. Wieso? ;o)
Gruß
Timo
AW: Eingabe erzwingen
18.11.2010 14:54:10
Wolfgang
...Danke!
Hab's ausprobiert, aber bekomme leider immer eine Fehlermeldung!
Und noch eine Frage:
Kann ich in einen solchen Code weitere Pflichtfelder aufnehmen? Und wie?
Danke.
Gruß,
WO.
Anzeige
AW: Eingabe erzwingen
18.11.2010 15:03:55
Timo
Bei der Zeile
Set rng="B4:C5"
ist mir der Fehler unterlaufen, korrekt muß es
Set rng=range("B4:C5")
lauten.
Dies ist auch die Zeile, in der Du den Bereich angeben kannst.
Für mehrere nicht zusammenhängende Bereiche müsste man den Code noch entsprechend mit einer for next Schleife ergänzen.
Gruß
Timo
AW: Eingabe erzwingen
18.11.2010 15:12:08
Wolfgang
...sorry, aber jetzt taucht eine andere Fehlermeldung auf.
Fehler beim Kompilieren syntaxfehler! (unten bei x=msgbox...)
Gruß,
Wo.
AW: Eingabe erzwingen
18.11.2010 15:16:02
Wolfgang
Hier im Forum (ich liebe dieses Forum!) habe ich auch folgendes Makro gefunden:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Sheets("Tabelle1").Range("F23").Value = "" Then
MsgBox "Datum in F23 fehlt!"
Cancel = True
End If
End Sub
Funktioniert einwandfrei! Besitzt dieses makro irgendwelche nachteile ggü. Deinem?
Und wie lässt sich dieses Makro um weitere Zellen und/oder Bereiche erweitern?
Danke!
Gruß,
Wo.
Anzeige
Etwas billiger:
18.11.2010 15:17:42
Renee
Hallo,
Nur diesen Code in DieseArbeitsmappe (ggf. Tabellenname, Pflichtzellen anpassen):
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const cTestRange = "A1,B4:C5"
Dim lngCnt As Long
With Worksheets("Tabelle1")
lngCnt = Range(cTestRange).Cells.Count - _
WorksheetFunction.CountA(.Range(cTestRange))
If lngCnt > 0 Then
MsgBox "Es fehlen " & lngCnt & " Pflichtfeld(er)!"
Cancel = True
End If
End With
End Sub

GreetZ Renée
Workbook_Save fehlt...
18.11.2010 15:28:53
Timo
Hi Renée,
damit ist allerdings das Workbook_Save nicht abgefangen... :)
Ansonsten: Guter Code, werd' ich mir merken! :)
Gruß
Timo
Anzeige
AW: Workbook_Save fehlt...
18.11.2010 15:45:54
Wolfgang
@ Renée
Funktioniert tadellos!
Dass in diesem Fall das 'Schließen' und nicht das 'Speichern' verhindert wird ist für meine Aufgabe nicht so wichtig (vielleicht ist es sogar besser so).
Aber wie erweitere ich den Code um zusätzliche Pflichtfelder?
Muss ich weitere Zellen einfach in die Zeile
Const cTestRange = "A1,B4:C5"
schreiben?
Hab's versucht indem ich z.B.
Const cTestRange = "A1, b2,B4:C5"
eingegeben habe....klappt aber leider nicht?
Danke und Gruß,
Wo.
Const cTestRange = "A1,B2,B4:C5" (owT)
18.11.2010 15:48:33
Renee

Const cTestRange = "A1, b2,B4:C5" geht auch oT
18.11.2010 15:59:06
Matthias
Userbild
Anzeige
AW: Const cTestRange = "A1,B2,B4:C5" (owT)
18.11.2010 16:00:11
Wolfgang
....ich hatte die 'Erweiterung' versehentlich an der falschen Stelle eingetragen!
Jetzt funktioniert es und lässt sich auch erweitern!
Ein großes DANKESCHÖN an alle die mir geholfen haben eine Lösung zu finden!!
Gruß,
Wo.
No problem, und noch ein bisschen..
18.11.2010 16:11:51
Renee
Pepp in die Msgbox, Wolfe ?
            MsgBox "Es fehlen " & lngCnt & " Pflichtfeld" & _
IIf(lngCnt = 0, "!", "er!"), vbOKOnly + vbCritical, _
.Name & " - Eingabecheck"
GreetZ Renée
AW: No problem, und noch ein bisschen..
18.11.2010 16:19:46
Wolfgang
...noch besser! Danke!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige