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

FRage zu Schleife

FRage zu Schleife
10.08.2008 10:38:00
Schneider
Hallo,
nachdem mir letztesmal hier gut geholfen wurde hätte ich nun noch zwei weitere Fragen.
Ich habe eine Userform mit mehreren Textboxen. Dise sollen die Werte aus eine Arbeitsmappe darstellen und dann auch editierbar sein. Die Werte in der Arbeitsmappe haben einen Zuordnungswert in Spalte B (z.B KDNR für Kundennummer) der Wert steht in Spalte A. Da dies im Prinziep für jede Textbox der gleiche Code ist müsste daraus ja eine Schleife machbar sein, aber die bekomm ich leider nicht zum laufen
Die zweite Frage bezieht sich auf eine textbox für Zahlen. hierbei soll die Eingabe eines 1000er Punktes (also zb. 10.562) führen das er die Zahl weiter schreibt. Dafür verwende ich das CLng, dann kann man aber nicht mehr den Wert aus der textbox herauslöschen und es ist nicht möglich einen Wert mit Komma einzugeben.
Hier ein verkürztes Beispiel
https://www.herber.de/bbs/user/54484.xls
Option Explicit
Public i

Private Sub UserForm_initialize()
Dim i As Long
'Ende suchen
Ende = 1
Do While Cells(Ende, 2)  ""
Ende = Ende + 1
Loop
'Felder befüllen
For i = 1 To Ende
With Sheets("Daten")
If .Cells(i, 2).Value = "KDNR" Then
Me.TextBox1 = .Cells(i, 1).Value
Exit For
End If
End With
Next
For i = 1 To Ende
With Sheets("Daten")
If .Cells(i, 2).Value = "PRNAME" Then
Me.TextBox2 = .Cells(i, 1).Value
Exit For
End If
End With
Next
End Sub



Private Sub TextBox1_Change()
For i = 1 To Ende
If Sheets("Daten").Cells(i, 2).Value = "KDNR" Then
Cells(i, 1).Value = CInt(TextBox1.Text)
Exit For
End If
Next
End Sub



Private Sub TextBox2_Change()
For i = 1 To Ende
If Sheets("Daten").Cells(i, 2).Value = "PRNAME" Then
Cells(i, 1).Value = TextBox2.Text
Exit For
End If
Next
End Sub


Schonmal im vorraus danke für eure Hilfe
Gruß
Max

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: FRage zu Schleife
10.08.2008 11:46:43
Daniel
Hallo
mal ne Frage, ist die Suchschleife zum Befüllen der Textbox wirklich erforderlich, dh können die Einträge für KDNR und PRNAME in verschiedenen Zeilen stehen, so daß tatsächlich gesucht werden muss?
Nun, wenn dem so ist, dann hat Excel dafür eine Suchfunktion, die man verwenden kann und muss nicht selber was programmieren.
der Code zum Befüllen sieht dann so aus:

Private Sub UserForm_initialize()
Dim Zelle As Long
With Sheets("Daten").Columns(2)
Set Zelle = .Find(what:="KDNR", lookat:=xlWhole, LookIn:=xlValues)
TextBox1.Text = Zelle.Offset(0, -1).Value
Set Zelle = .Find(what:="PRNAME", lookat:=xlWhole, LookIn:=xlValues)
TextBox1.Text = Zelle.Offset(0, -2).Value
End With
End Sub


Das Zurückschreiben der Werte würde ich dann änhlich gestalten, aber dafür nicht das CHANGE, sondern das EXIT-Event nehmen. Das hat zur Folge, daß der Wert erst dann zurückgeschrieben wird, wenn die Eingabe abgeschlossen ist und nicht bei jedem Tastenklick.


Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Zelle As Range
Set Zelle = Sheets("Daten").Columns(2).Find(what:="KDNR", lookat:=xlWhole, LookIn:=xlValues)
Zelle.Offset(0, -1).Value = CLng(TextBox1.Text)
End Sub



Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Zelle As Range
Set Zelle = Sheets("Daten").Columns(2).Find(what:="PRNAME", lookat:=xlWhole, LookIn:=xlValues)
Zelle.Offset(0, -1).Value = TextBox2.Text
End Sub


zur Textbox mit Zahl:
im code Verwendest zu, entgegen deiner Angabe CINT und nich CLNG.
besser ist CLNG, da CINT nur bis c.a. 32.000 definiert ist und grössere Zahlen nicht verarbeitet werden können.
Trotzdem sind beides Ganzzahl-Datentypen, dh. Nachkommastellen werden gerundet und entfallen.
wenn du Dezimalzahlen brauchst dann musst du die Umwandlungstypen CSNG oder CDBL verwenden.
falls du infos brauchst, einfach im Quellcode den Cursor draufsetzen und F1 drücken.
Gruß, Daniel

Anzeige
AW: FRage zu Schleife
10.08.2008 18:01:00
Schneider
ok danke.
hast du vll noch ne idee für eine gesamt schleife. also um die textboxen herum, so das ich nicht jede texbox einzeln ansprechen muss?

AW: FRage zu Schleife
10.08.2008 20:04:51
Daniel
Hi
ne Methode wäre diese, allerdings musst du dazu die Textboxen immer gleich benennen und mit ner Zählnummer versehen (also im Prinzip so, wie Excel das automatisch macht, aber eine Sprechende Textboxenbenennung ist dann nicht mehr möglich.)
für die einzelnen EXTIT- oder andere Events der Textboxen ist keine Schleife möglich, die müssen für jede Textbox seperat angelegt werden.
Eventuell kann man da was vereinfachen, indem man im Eventmakro ein anderes Makro mit den ent sprechenden Parametern aufruft, somit kann man den Code auch etwas kürzen.
im Ganzen sieht der Code mit diesen Optimierungen dann so aus:

Option Explicit
Dim Suchtext(1 To 2) As String
Private Sub UserForm_initialize()
Dim Zelle As Range
Dim i As Long
Suchtext(1) = "KDNR"
Suchtext(2) = "PRNAME"
For i = 1 To 2
Set Zelle = Sheets("Daten").Columns(2).Find(what:=Suchtext(i), lookat:=xlWhole, LookIn:= _
xlValues)
Me.Controls("Textbox" & i).text = Zelle.Offset(0, -1).Value
Next
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call Textboxen_zurückschreiben(1)
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Call Textboxen_zurückschreiben(2)
End Sub
Private Sub Textboxen_zurückschreiben(TB_Nr As Integer)
Dim Zelle As Range
Set Zelle = Sheets("Daten").Columns(2).Find(what:=Suchtext(TB_Nr), lookat:=xlWhole, LookIn:= _
xlValues)
Zelle.Offset(0, -1).Value = Me.Controls("TextBox" & TB_Nr).text
End Sub


Gruß, Daniel

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige