abuelito
Goto Top

VBA Excel Problem mit UserForm, ListBox und TextBox

Hallo @ll,

folgendes habe ich erstellt:

1. Ich habe eine Tabelle1 erstellt mit 60 Spalten
2. Zu dieser Tabelle1 habe ich eine UserForm erstellt, die ich über einen CommandButton öffne
3. In der UserForm befinden sich ComboBoxen und Textboxen, die ich mit Text, Zahlen (auch Dezimalzahlen mit bis zu 4 Nachkommastellen) und Datum befülle, verschiedene CommandButtons und eine Listbox
4. In der ListBox werden mir beim Öffnen der UserForm alle Datensätze, die sich in der Tabelle1 befinden angezeigt
5. In der UserForm habe ich u. a. ein "Übernehmen" und ein "Ändern" CommandButton
6. Wenn ich Daten in die TextBoxen eingebe und auf "Übernehmen" klicke, dann werden die Datenab der Zeile 5 in die Tabelle1 übergeben
7. Wenn ich bei geöffneter UserForm auf einen Datensatz in der ListBox klicke (Doppelklick), dann werden die TextBoxen mit den Daten autom. befüllt
8. Wenn ich jetzt einen Wert ändere und anschließend auf "Ändern" klicke, dann wird der neue Wert in die Tabelle eingetragen

Jetzt habe ich folgende Probleme:

1. Ich habe z. B. die TextBox11, in der ich nur Großbuchstaben eingebe und sobald ich auf "Übernehmen" klicke, wird mir in der Tabelle1 nur der 1. Buchstabe groß angezeigt, der Rest in Kleinbuchstaben umgewandelt. Wie bekomme ich es hin, dass in der Tabelle1 alles groß wiedergegeben wird?

2. Ich habe z. B. die TextBox26, in der ich eine Zahl mit 4 Nachkommastellen eingebe (z. B. 10,1234), und als Trennzeichen verwende ich ein Komma. Sobald ich auf "Übernehmen" klicke, wird mir in der Tabelle1 aber folgende Zahl angezeigt: 101.234,0000 ... Wenn ich die UserForm erneut öffne und den Wert auf 10.1234 ändere und auf "Ändern" klicke, dann wird mir in der Tabelle1 folgende Zahl angezeigt: 10,1234 .. Wenn ich die UserForm erneut öffne, dann bekomme ich in der TextBox26 den Wert 10,1234 korrekt angezeigt, doch sobald ich in einer anderen TextBox einen Wert ändere und anschließend auf "Ändern" klicke, dann wird der Wert 10,1234 aus der TextBox26 wieder in die Tabelle übergeben und dann steht wieder 101.234,0000 drin .. Wie bekomme ich es hin, dass immer der Wert #.##0,0000 erscheint und auch übergeben wird und zwar in beide Richtungen)1x von der TextBox26 zur Tabelle1 und von der Tabelle1 zur TextBox26?

Hier mein Code:

Private Sub CommandButton1_Click() "Übernehmen

Dim lLetzte As Double ' wegen der Dezimalzahlen mit 4 Nachkommastellen
Dim iIndex As Integer

Application.ScreenUpdating = False

With Worksheets("Tabelle1")
.Unprotect Password:="xxxxxx"
lLetzte = IIf(.Range("A65536") <> "", 65536, .Range("A65536").End(xlUp).Row) + 1
If lLetzte < 5 Then lLetzte = 5

.Range("M" & lLetzte).Value = WorksheetFunction.Proper(TextBox11.Value) ' Land hier bitte nur Großbuchstaben

.Range("AD" & lLetzte).Value = WorksheetFunction.Proper(TextBox26.Value) ' Kurs in % hier bitte mit 4 Nachkommastellen und als Trennzeichen soll ein Komma übergeben werden

' Tabelle nach "Lfd.Nr." sortieren
.Range(.Cells(4, 1), .Cells(lLetzte, 60)).Sort _
Key1:=.Cells(4, 1), Order1:=xlAscending, _
Header:=xlGuess

.Columns("A:BH").EntireColumn.AutoFit

Call Zeilen_faerben

With ListBox1
Call Array_fuellen
.Clear
.Column = aTmp
End With

Label8.Caption = "Anzahl Datensätze: " & (lLetzte - 4)

.Protect Password:="xxxxxx"
End With

For iIndex = 1 To 47 ' Anzahl Textboxen
With Controls("TextBox" & iIndex)
.Value = ""
End With
Next iIndex

Application.ScreenUpdating = True


End Sub


Private Sub CommandButton3_Click() " Ändern

Dim lLetzte As Double
Dim FundZeile As Double

Application.ScreenUpdating = False

With Worksheets("Tabelle1")
.Unprotect Password:="xxxxxx"

.Range("M" & FundZeile).Value = WorksheetFunction.Proper(TextBox11.Value) ' Land hier bitte nur Großbuchstaben
.Range("AD" & FundZeile).Value = WorksheetFunction.Proper(TextBox26.Value) ' Kurs in % hier bitte mit 4 Nachkommastellen und als Trennzeichen soll ein Komma übergeben werden

lLetzte = IIf(.Range("A65536") <> "", 65536, .Range("A65536").End(xlUp).Row) + 1
If lLetzte < 5 Then lLetzte = 5
Label8.Caption = "Anzahl Datensätze: " & (lLetzte - 4)

' Tabelle nach "Lfd.Nr." sortieren
.Range(.Cells(4, 1), .Cells(lLetzte, 60)).Sort _
Key1:=.Cells(4, 1), Order1:=xlAscending, _
Header:=xlGuess

.Columns("A:BH").EntireColumn.AutoFit

Call Zeilen_faerben

With ListBox1
Call Array_fuellen
.Clear
.Column = aTmp
End With

.Protect Password:="xxxxxx"
End With

Application.ScreenUpdating = True

CommandButton3.Enabled = False ' den Änder-Button sperren
CommandButton4.Enabled = False ' den Lösch-Button sperren

End Sub


Vielen vielen vielen Dank für eure Hilfe

Grüße

Content-ID: 341665

Url: https://administrator.de/contentid/341665

Ausgedruckt am: 15.11.2024 um 23:11 Uhr

Meierjo
Meierjo 27.06.2017 aktualisiert um 06:33:16 Uhr
Goto Top
Hallo Abuelito

zum Problem mit der Textbox11, such mal in der VBA Hilfe nach Uppercase
http://www.herber.de/forum/archiv/140to144/141296_mittels_VBA_Kleinbuch ...

zur Textbox26
Da wird entweder in der Zelle, wo der Wert mit den 4 Kommastellen hineingeschrieben werden soll, ein falsches Zahlenformat stehen, oder vielleicht in der Textbox11, oder vielleicht stimmen die Länder-Einstellungen der Tastatur (Deutsch / Schweiz / etc) nicht.
Probier mal mit .Value, "0.0000") .... beim Eintragen in die Textbox und umgekehrt
http://www.herber.de/forum/archiv/1068to1072/1071658_2_Nachkommastellen ...

Gruss
abuelito
abuelito 27.06.2017 um 09:03:44 Uhr
Goto Top
Hallo Meierjo,

vielen Dank für Deine Nachricht.

Leider komme ich nicht weiter face-sad

Wie müsste mein Code denn aussehen, damit ich 1. alles was ich in der TextBox11 eingebe (egal ob Groß- oder Kleinbuchstaben) bei der Übergabe an die Tabelle1 immer in Großbuchstaben erscheint?

Wie müsste mein Code denn aussehen, damit ich 2. den Wert, den ich in die TextBox26 eingebe mit 4 Nachkommastellen an die Tabelle1 übergeben wird und zwar mit einem "," als Trennzeichen: ... Beispiel: ich gebe in die TextBox26 10,1234 ein, dann soll in Tabelle1 auch 10,1234 erscheinen oder wenn ich 10.1234 in die TextBox26 eingebe, dann soll in der Tabelle1 auch 10,1234 erscheinen ??

Sitze total auf der Leitung und komme einfach nicht weiter face-sad(

Vielen Dank
Grüße
Meierjo
Meierjo 27.06.2017 um 09:31:13 Uhr
Goto Top
Hallo

Kannst du vielleicht mal die Mappe hier hochstellen, damit wir nicht alles nachbauen müssen?

Gruss
abuelito
abuelito 27.06.2017 um 10:01:40 Uhr
Goto Top
Hallo Meierjo,

mache ich, aber leider funktioniert bei mir nicht alles, z.B. funktioniert auch die "Suche"-Funktion nicht .. oh mann, ich sehe vor lauter Wald keinen einzigen Baum mehr face-sad .. sitze jetzt seit einer Woche daran und komme einfach nicht weiter. Mein Code stimmt bestimmt hinten und vorne nicht face-sad

Wie kann ich denn die Mappe hochladen?

Grüße
abuelito
abuelito 27.06.2017 um 10:04:08 Uhr
Goto Top
Hier die Mappe:

https://www.file-upload.net/download-12574534/Test_Wertpapiere.xlsm.html


Viele lieben Dank für die Hilfe
Grüße
Meierjo
Lösung Meierjo 27.06.2017 aktualisiert um 14:15:50 Uhr
Goto Top
Hallo

Lösung Teil1:

textbox11

Probier das mal

Gruss
Meierjo
Meierjo 27.06.2017 um 14:40:28 Uhr
Goto Top
Hallo

Und zur TextBox26:
Punkt bedeutet für Excel ein Dezimatrennzeichen, Komma eben nicht (anhängig von den Ländereinstellungen).
Wenn du dich nicht daran gewöhnen kannst, die Daten mit Punkt einzutippen, kann höchstens versucht werden, beim Drücken auf den CommandButton1 die Länge des Wertes anzufragen, und wenn ungültige Länge, dann eine Meldung ausgeben
Dazu müsste ich allerdings wissen, in welchem Bereich die gültigen Werte in der Textbox26 liegen

Gruss
abuelito
abuelito 27.06.2017 um 14:52:23 Uhr
Goto Top
Oh mann, vielen vielen Dank face-smile .. es funktioniert

Grüße
abuelito
abuelito 27.06.2017 um 14:57:47 Uhr
Goto Top
Das mit dem Punkt, daran kann man sich gewöhnen .. das Problem ist aber, wenn ich den Datensatz erneut ändere und zwar in einer anderen TextBox, dann hat die TextBox26 den Wert aus der Tabelle1 übergeben bekommen und zwar 10,1234 .. sobald ich jetzt auf "Ändern" drücke, weil ich ja etwas in deiner anderen TextBox verändert habe, dann übermittelt die UserForm TextBox26 den Wert 10,1234 an die Tabelle1 zurück und zwar ohne Punkt .. dann habe ich wieder einen falschen Wert in der Tabelle1 stehen

Grüße
Meierjo
Lösung Meierjo 27.06.2017 um 15:11:23 Uhr
Goto Top
Hallo nochmal

Habe noch eine andere Lösung für die TextBox26.

Probier mal Folgendes:
textbox26

Ersetzt ein Komma durch einen Punkt, und somit sollte der Wert korrekt in die Zelle übertragen werden

Gruss
abuelito
abuelito 27.06.2017 um 16:27:11 Uhr
Goto Top
Mensch, Super .. das hat funktioniert face-smile

Vielen vielen Dank und viele Grüße
Meierjo
Meierjo 27.06.2017 um 16:28:45 Uhr
Goto Top
Hallo

Bitte gerne geschehen, schön, dass es geht face-smile

Habe, als ich angefangen habe mit Excel VBA, sehr viel von herber.de gelernt

Gruss