Feldbegrenzung bei geschützten Zellen
Hallo, hallöchen,
es ist Samstag und was macht man? Für die Firma Experimente, nunja, folgendes Problem versuche ich zu lösen:
Excel-Tabelle zum Ausfüllen mit geschützten Zellen zu bauen ist ja nun kein Problem. Nun habe ich aber auch Felder, in denen der Ausfüller Text eingeben muss und zwar von unbestimmter Kürze ABER mit bestimmter Länge!
Zellen zu verbinden kein Problem, Textfeldeinfügen auch kein Problem. Nur kann der Ausfüller in beiden Fällen so viel Text schreiben, das beim Ausdruck der Text, den er über die angezeigte Größe des Feldes geschrieben hat, nicht mehr mit ausgedruckt wird.
Wie kann ich also nun ein Feld in einer geschützten Tabelle anlegen, welches ich mit maximalen Einträgen beschränken kann?
Trotz allem einen schönen Samstag und vielen Dank im Voraus
Markus
Antwort schreiben
Antwort 1 von Beverly vom 26.01.2020, 16:02 OptionsLösung
Hi Markus,
verwende eine TextBox aus der Steuerelement-Toolbox mit diesem Code
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Len(TextBox1) > 9 Then
MsgBox "Nur 10 Zeichen möglich"
TextBox1 = Left(TextBox1, 9)
End If
End Sub
Bis später,
Karin
Antwort 2 von gast123 vom 26.01.2020, 16:11 Options
hi all
daten/gueltigkeit
gruss gast123
Hallöchen,
beide Antworten sind nicht schlecht, Karin, deine hilft noch besser, da schneller anzupassen.
Jetzt aber folgendes, bei 10 oder 30 Zeichen ist das kein Problem. Doch bei größerer Anzahl wird es mit dem Zählen des dummen Ausfüllers schwierig. Gibt es eine Formel, die Zeitgleich bei der Eingabe in einer Zelle die noch verbleibende Anzahl der Zeichen anzeichen kann?
Antwort 4 von Beverly vom 26.01.2020, 16:30 Options
Hi Markus,
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Len(TextBox1) < 10 Then Cells(1, 1) = "Es verbleiben noch " & 9 - Len(TextBox1)
End Sub
Bis später,
Karin
Hallo Karin,
Code leuchtet mir ein, doch wie bekomme ich den dazu, das er in auch angezeigt wird. Da hören meine Kenntnisse auf, leider.
Danke schon mal
Markus
Antwort 6 von Beverly vom 26.01.2020, 16:57 Options
Hi Markus,
wohin hast du den Code kopiert? Er gehört genau dort hin wo auch der andere sich befindet.
Bis später,
Karin
Habe ich ja auch gemacht, sie stehen beide untereinander. Ich verstehe nur nicht, wo die Anzeige des Textes "Es verbleiben noch ..." angezeigt werden soll.
Wie bekomme ich eine Zelle dazu, diesen Text anzuzeigen.
Antwort 8 von Beverly vom 26.01.2020, 17:04 Options
Hi Markus,
die Anzeige erfolgt in Zelle A1. Das ergibt sich aus diesem Codeteil
Cells(1, 1) -> Zelle(Zeile, Spalte)
Bis später,
Karin
Verstanden, demnach müßte der Code bei Ansicht in Zelle C451 lauten:
(451, 3) da steht aber nichts.
Weiterhin ist das Problem, das bei Tab oder Mausklick das Textfeld nicht zum Schreiben aktiviert wird. Klicke ich in der geschützten Tabelle auf das Textfeld, erscheint der Code. Nur mit der rechten Mousetaste kann der Ausfüller über Textfeld bearbeiten in das Feld kommen.
Antwort 10 von Beverly vom 26.01.2020, 17:23 Options
Hi Markus,
du musst entweder die Zelle entsperren, oder im Code den Blattschutz aufheben, den Eintrag tätigen und dann den Blattschutz wieder setzen.
Beis später,
Karin
Ich glaube ich drücke mich falsch aus.
Es soll doch in der geschützten Tabelle ein Feld existieren, in dem der Ausfüller ohne den Schutz aufheben zu können, Text von einer bestimmten Länge eingeben soll. Unter dem Feld, was auch immer für ein Feld, soll in einer Zelle erscheinen, "hey du Dösbattel, du hast nur noch x Zeichen zum Schreiben!"
Vielleicht können wir telefonieren?.
Antwort 12 von Beverly vom 26.01.2020, 17:41 Options
Hi Markus,
wenn du nur die Zelle - also C451, in welcher die Anzeige der noch verbleibenden Zeichen erfolgen soll, entsperrst, dann kann der Benutzer doch noch lange nicht den Rest des Tabellenblattes bearbeiten. Sobald er in dieser Zelle irgendetwas verändert, wird beim nächsten Klick in das Textfeld diese Änderung doch wieder überschrieben.
Die andere Möglichkeit, den Schutz mittels Code vorübergehend aufzuheben:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
ActiveSheet.Unprotect
If Len(TextBox1) < 10 Then Cells(451, 3) = "Es verbleiben noch " & 9 - Len(TextBox1)
ActiveSheet.Protect
End Sub
Bis später,
Karin
Liebe Karin,
ich habe dir mal mein Problem an deine Email geschickt.
Hoffentlich kannst du mir damit mehr helfen.
Danke
Markus
Antwort 14 von Beverly vom 26.01.2020, 19:43 Options
Hi Markus,
verwende ein Textfeld aus der
Steuerelement-Toolbox, nicht aus der Zeichnen-Symbolleiste. Die Toolbox findest du nach einem Rechtsklick auf die Symbolleisten und musst sie einfach nur aktivieren.
Mache dann einen Rechtsklick auf das Element -> Eigenschaften und schreibe bei MultiLine den Wert "True" rein. Verwende als Code diesen
Private Sub TextBox1_GotFocus()
ActiveSheet.Unprotect
If Len(TextBox1) > 0 Then
Cells(144, 3) = "Es verbleiben noch " & 499 - Len(TextBox1) & " Zeichen"
Else
Cells(144, 3) = "Es verbleiben noch 500 Zeichen"
End If
ActiveSheet.Protect
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Len(TextBox1) > 499 Then
MsgBox "Nur 500 Zeichen möglich"
TextBox1 = Left(TextBox1, 499)
End If
End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
ActiveSheet.Unprotect
If Len(TextBox1) > 0 Then
Cells(144, 3) = "Es verbleiben noch " & 500 - Len(TextBox1) & " Zeichen"
Else
Cells(144, 3) = "Es verbleiben noch 500 Zeichen"
End If
ActiveSheet.Protect
End Sub
Deaktiviere dann in der Toolbox den Entwurfsmodus (Klick auf den Button mit einem grünen Dreieck, Lineal und Bleistift
Bis später,
Karin
Es funzt,
vielen und lieben Dank und noch ein schönes Wochenende.
Markus
Antwort 16 von Beverly vom 26.01.2020, 20:06 Options
Hi Markus,
noch etwas: vermeide nach Möglichkeit verknüpfte Zellen - sie machen nur Probleme, insbesondere wenn man mit VBA auf sie zugreifen muss. Da du keine Gitternetzlinien anzeigst, kannst du ja einen Rahmen um mehrere Zellen ziehen ohne Zwischenlinien und niemand wird es bemerken.
Dir ebenfalls noch ein schönes Wochenende.
Bis später,
Karin
Liebe Karin,
eine Frage noch zum Schluss:
Wie kann ich die Entertaste als Absatzmarke in diesen Feldern nutzen.
Gruß Markus
Antwort 18 von Beverly vom 27.01.2020, 15:31 Options
Hi Markus,
ändere den entsprechenden Code wie folgt
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then TextBox1 = TextBox1 & vbLf
ActiveSheet.Unprotect
If Len(TextBox1) > 0 Then
Cells(144, 3) = "Es verbleiben noch " & 500 - Len(TextBox1) & " Zeichen"
Else
Cells(144, 3) = "Es verbleiben noch 500"
End If
ActiveSheet.Protect
End Sub
Bis später,
Karin
Hallo Karin,
natürlich funzt auch das. Somit recht herzlichen Dank für alles.
Lieben Gruß vom Markus
Hallo liebe Karin,
hast du eingentlich meine Mail erhalten?
Lieben Gruß vm Markus