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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 341665
Url: https://administrator.de/contentid/341665
Ausgedruckt am: 15.11.2024 um 23:11 Uhr
12 Kommentare
Neuester Kommentar
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
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
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
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