Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1824to1828
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

Änderung in UF feststellen

Änderung in UF feststellen
21.04.2021 11:34:32
Holly
Hallo,
ich möchte bei einer Userform vor dem speichern feststellen ob Änderungen in die Userform eingegeben wurden. Wenn nein soll nicht gespeichert werden. Wie stelle ich fest ob eine Änderung stattgefunden hat. Da beim Initialisieren einer Userform alle Textformen etc. angelegt also die _change() - Sub angesprochen wird, habe ich es verworfen alle Felder über _change() abzufragen um dort eine Variable auf "speichern" zu stellen. Nun meine die Idee ist alle Inhalte der Felder in der UF als ASCII-Wert zu prüfen (Ergebnis: Integer-Wert) und diesen vor dem speichern nochmals zu prüfen und vergleichen. Wenn der Wert abweicht wird wirklich gespeichert ansonsten wird speichern übergangen (Speed).
Gibt es hierzu anderweitige Möglichkeiten die zum Ziel führen?
Wie erhalte ich den ASCII-Wert eines String in einer Textbox?
Vielen Dank für jeden Kommentar! Gruss Holly

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Änderung in UF feststellen
21.04.2021 11:41:26
Nepumuk
Hallo Holly,
so bekommst du die Summe der ASCII-Werte eines Textes:

Public Sub Test()
Dim strText As String
Dim ablnAscii() As Byte
strText = "Hallo"
ablnAscii = StrConv(strText, vbFromUnicode)
MsgBox Application.Sum(ablnAscii)
End Sub
Gruß
Nepumuk
AW: Änderung in UF feststellen
21.04.2021 14:14:54
Holly
Hallo Nepumuk,
genau das habe ich benötigt!
Nur funktionierts noch nicht ganz wie ich es benötige:
Array ablnAscii() soll als Integer-Variable angelegt werden und über eine Schleife den Integer-Wert von allen Textboxen summieren.
Die Schleife habe ich angelegt und die TB werden alle abgearbeitet. Wenn ich aber ablnAscii als Integer-Variable anlege (nicht als Byte-Array) erhalte ich bei der Zuweisung aus StrConv eine Fehlermeldung "Typenfehler" auch wenn ich CInt davorsetze.
'Dim ablnAscii() As Byte 'funktioniert mit Einzelwerten im Array
Dim ablnAscii As Integer
For Each obj In Obj_UserForm.Controls 'Me.Controls
If TypeName(obj) = "TextBox" Then
ablnAscii = ablnAscii + CInt(StrConv(obj, vbFromUnicode))
MsgBox Application.Sum(ablnAscii)
end if
next
Wo liegt der Fehler?
Anzeige
AW: Änderung in UF feststellen
21.04.2021 14:38:20
Nepumuk
Hallo Holly,
StrConv(strText, vbFromUnicode) gibt ein Array zurück, Teste mal so:

Dim abtyArray() As Byte
Dim lngSum As Long
Dim objControl As Control
For Each objControl In Controls
If TypeOf objControl Is MSForms.TextBox Then
If objControl.TextLength > 0 Then
abtyArray = (StrConv(objControl.Text, vbFromUnicode))
lngSum = lngSum + Application.Sum(abtyArray)
End If
End If
Next
MsgBox lngSum
Gruß
Nepumuk
AW: Änderung in UF feststellen
21.04.2021 14:46:12
Holly
perfekt - tausend Dank!!!
AW: Änderung in UF feststellen
21.04.2021 14:28:24
Holly
Hallo Nepumuk,
so habe ich's jetzt hingekriegt:
For Each obj In Obj_UserForm.Controls 'Me.Controls
If TypeName(obj) = "TextBox" Then
Debug.Print obj.Value
'Dim ablnAscii As Byte
If obj "" Then
ablnAscii = StrConv(obj, vbFromUnicode)
'MsgBox Application.Sum(ablnAscii)
INT_ASCII_Wert = INT_ASCII_Wert + Application.Sum(ablnAscii)
End If
End If
Next obj
Hast Du Verbesserungsvorschläge?
Danke und Gruss
Holly
Anzeige
AW: Änderung in UF feststellen
21.04.2021 11:52:57
Daniel
HI
Schreibe im Initialize-Event den Wert des Textfeldes nicht nur in die .Value bzw .Text-Eigenschaft, sondern zusätzlich auch in die TAG-Eigenschaft.
dann kannst du beim Schließen für jede Textbox den .Value-Wert mit dem .Tag-Wert vergleichen und kannst darüber erkennen, ob der Wert verändert wurde und gespeichert werden muss.
die TAG-Eigenschaft ist eine Eigenschaft, die der Anwender frei nutzen kann um dort Informationen zu dem jeweiligen Steuerelement zu hinterlegen.
andererseits kannst du natürlich auch deine Idee mit dem Change-Event und der Variable weiter verfolgen.
du musst halt nur die Variable wieder auf "nicht speichern" setzen, nachdem du alle Textfelder initial befüllt hast.
oder du nimmst bei Textboxen nicht Change, sondern KeyUp um festzustellen, ob was eingegeben wurde.
Das reagiert nicht, wenn du den Textboxwert per Code änderst.
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige