Doch noch ne Idee
31.01.2024 21:46:14
Pappawinni
Man könnte ja im Fehlerfall einfach den vorherigen Zustand wieder herstellen.
Dazu könnte man dann noch eine globale Variable einführen. hier strAltTextBox1
Modul1:
Option Explicit
'der Code muss wissen, wie hoch die Zeile ist - bevor - eine Zelle mit deinem Userform gefüllt wird
'und dafür ist eine sogenannte öffentliche, oder PUBLIC-Variable erforderlich, die überall im Code bekannt sein muss
'öffentliche/Public-Variablen müssen in einem allgemeinen Modul deklariert werden; woanders ist das nicht möglich
Public pdbHeight As Double
Public strAltTextBox1 As String
diese dann natürlich bei der Initialisierung als leeren String definieren und am Ende des Textbox_Change Events mit dem
jeweils aktuellen Wert der Textbox belegen.
Im Fehlerfall wird einfach der Wert von strAltTextBox1 der Textbox und damit auch der Zelle zugewiesen....
Private Sub TextBox1_Change()
'max. Spaltenlänge = 74 Spalte "B"
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Tabelle1")
If Len(TextBox1.Value) > 0 Then ws.Range("A1").EntireColumn.ColumnWidth = 31
ws.Range("A1").Value = TextBox1.Value
ws.Range("A1").EntireColumn.AutoFit
If ws.Range("A1").ColumnWidth > 30 Then ' MsgBox "Text ist zu lang", vbCritical, "Halt!" -- wieso deaktivierst du denn DEINE Kontrolle auf Spaltenbreite??? Die muss doch weiterhin vorhanden sein
MsgBox "Text ist zu lang", vbCritical, "Halt!"
TextBox1.Value = strAltTextBox1
End If
'so, und dank deiner nun doch gezeigten Bsp-Datei hab ich schnell gemerkt, dass meine 1. Idee NULL weiterhilft...nun ja..ich hatte ja auch nix zum Testen von dir
'die Lösung - zumindest für die Bsp-Datei - ist das Prüfen der Zeilenhöhe, weil...
'2 x pdbHeight = 2 Zeilen in Zelle A1
'mehr als 2 x pdbHeight = mindestens DREI Zeilen in Zelle A1, und somit 1x zu viel
If ws.Range("A1").RowHeight > pdbHeight * 2 Then
MsgBox "Zeile ist zu hoch", vbCritical, "Halt!"
TextBox1.Value = strAltTextBox1
End If
Set ws = Nothing
strAltTextBox1 = TextBox1.Value
End Sub
Private Sub UserForm_Initialize()
'und hier - direkt nach Start (noch vor Sichtbarkeit) deines Userforms merkt sich der Code die Höhe der Zeile in der ein Zellinhalt mit deinem Userform gefüllt wird
'ACHTUNG!
'in diesem Code für die Bsp-Datei merkt sich der Code IMMER NUR die Zeilenhöhe von Zelle A1 !
'zumindest ich kann weder in deinen Beiträgen, und auch nicht in deinem Code in der Bsp-Datei erkennen, wann genau welche Zelle mit deinem Userform gefüllt wird/werden soll
'somit kann ich nur die Zeilenhöhe von Zelle A1 prüfen
If pdbHeight = 0 Then pdbHeight = Sheets("Tabelle1").Range("A1").RowHeight
strAltTextBox1 = ""
End Sub
Ob das überhaupt das Ziel der Übung war, weiss ich aber eigentlich nicht.
Nachdem sich ja niemand mehr gemeldet hat, muss der Thread wohl auch nicht mehr offen bleiben....