Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
964to968
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
964to968
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

textbox mit schleife

textbox mit schleife
10.04.2008 22:28:38
ralf
hallo forum
habe gerade ein problem von euch wunderbar gelöst gekriegt.
habe aber noch eine frage zu meinen 13 textboxen in userform. will wert aus tabelle einlesen
und wenn in der tabelle nichts steht soll in meinen textbox der wert 0,00 stehen
das klappt auch mit dem code den ich benutze aber ich muss das alles 13 mal schreiben
mein code sieht so aus (nicht alle aufgelistet)
Private Sub UserForm_Initialize()
With Me
.TextBox1.Value = Format(CDbl(ActiveSheet.Range("X1")), "#,##0.00")
If TextBox1.Value = 0 Then
.TextBox1.Value = Format(CDbl(.TextBox1.Text), "#,##0.00")
End If
und dasalles 13 mal habe deshalb die frage wie eine schleife machen kann das ich mir
das ewige rumkopiere und umschreiben sparen kann habe noch andere if then funk.
gruß ralf

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: textbox mit schleife
10.04.2008 22:38:11
Horst
Hi,
sollen denn alle Textboxen mit dem Wert aus Range("X1") gefüllt werden und wenn ja
wozu solls gut sein?
mfg Horst

AW: textbox mit schleife
10.04.2008 22:50:00
ralf
hallo horst
nein das ist nur der erste teil und den habe ich 13 mal drin dann geht es mit textbox 2,3 bis 13. und
x2 ,x3 bis 13 weiter.der code ist ellenlang. deshalbwollte ich wissen ob ich den code irgendwie in eine schleife bekomme
gruß ralf

AW: textbox mit schleife
10.04.2008 22:57:00
Horst
Hi,
zumindest ein aussagekräftiges Beispiel, wie die Textboxen mit den Zellen korrespondieren
wäre nötig für einen Vorschlag.
mfg Horst

AW: textbox mit schleife
10.04.2008 23:02:24
Nepumuk
Hallo ralf,
dazu hast du doch schon eine Antwort erhalten.
Hier mal ein Beispiel wie ich sowas mache. (In Ergänzung zur Klasse)
' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private objTextBox() As clsTextBox

Private Sub UserForm_Activate()
    Dim lngIndex As Long
    For lngIndex = 1 To 13
        
        Controls("TextBox" & CStr(lngIndex)).Text = _
            Format(CDbl(Tabelle1.Cells(lngIndex, 24).Value), "#,##0.00")
        
        Redim Preserve objTextBox(1 To lngIndex)
        Set objTextBox(lngIndex) = New clsTextBox
        Set objTextBox(lngIndex).prpSetTextBox = Controls("TextBox" & CStr(lngIndex))
    Next
End Sub

Private Sub UserForm_Terminate()
    Erase objTextBox
End Sub

Die Abfrage, ob nur eine 0 in der Textbox steht ist dabei völlig überflüssig, denn du gibst das Format ja schon bei der ersten Zuweisung vor.
Gruß
Nepumuk

Anzeige
AW: textbox mit schleife
11.04.2008 15:55:05
ralf
hallo nepumuk
habe heute nochmal versucht deine beispiele zu verstehen .
bin noch neuling in exel und deshalb hat es etwas länger gedauert .
glaube aber das ich es jetzt verstanden habe . habe ein bisschen rumgedoctort
und es klappte.
herzlichen dank
gruß ralf

AW: textbox mit schleife
11.04.2008 18:19:21
ralf
hallo forum
nepumuk hat mir hier schon einen beispiel code geschrieben ,das
hat ja auch nach mehrmaligen versuchen geklappt . habe aber immer noch das
problem wie ich jetzt textboxen1-13 in einer schleife bekomme . will das wenn der wert zb.
12 ist in textbox 12,00 steht . hier meine beispieldatei
https://www.herber.de/bbs/user/51461.xls
gruß
ralf

Anzeige
AW: textbox mit schleife
11.04.2008 20:10:26
Tino
Hallo,
was funktioniert den nicht?
Hat es mit meinem Beispiel ein bar Beiträge weiter unten nicht funktioniert?
Was ist nicht in Ordnung?
https://www.herber.de/bbs/user/51463.xls
Gruß
Tino

AW: textbox mit schleife
11.04.2008 20:48:00
ralf
hallo toni
das hat geklappt doch will ich wenn eine textbox keinen eintrag
hat das in der textbox automatisch beim verlassen ein 0,00 steht das brauch
ich zum berechnen der gesamtsumme .das programm läuft nur habe ich eben wie in meinen code zu sehen 13 mal den code einkopiert und wollte wissen wie ich den eventuell in einer schleife
bekomme um mir das zu ersparen.
gruß
ralf

Anzeige
AW: textbox mit schleife
11.04.2008 21:31:00
Tino
Hallo,
ersetze den Code mit diesen.

Private Sub UserForm_Activate()
Dim a As Byte
For a = 1 To 13
UserForm1("TextBox" & a) = Format(CDbl(Range("X" & a)), "#,##0.00")
Next a
End Sub


Info zum Code:
einfach den Rückgabewert in eine Zahl umwandeln Double (CDbl) oder in Single (CSng).
Aber denke daran, mit den Textboxen kannst du so direkt nicht rechnen, da der Inhalt keine Zahl sonder Text ist.
Möchtest du mit diesen Rechnen, musst du diese auch wieder in eine Zahl umwandeln.
Beispiel:
MsgBox CDbl(Me.TextBox1) + CDbl(Me.TextBox2)
Gruß
Tino

Anzeige
AW: textbox mit schleife
11.04.2008 21:42:00
ralf
hallo tino
ich meine die userform ist aktiviert und dann wird zum beispiel eine zahl
gelöscht ,dann geht man über tab zur nächsten textbox und in der vorherigen textbox
steht gar nichts mehr ,deshalb habe ich es über die funktion textbox_exit versucht was ja auch klappt
wollte das alles übersichtlicher halten um mir immer die ganzen sub funktionen zu sparen
gruß
ralf

AW: textbox mit schleife
12.04.2008 00:01:00
Tino
Hallo,
so eine elegante Lösung wie von Nepumuk, kann ich die nicht anbieten.
Nur diese, in der müsstest du für jede Box dass Exit Event überwachen.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
PrüfeEingabe (TextBox1.Name)
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
PrüfeEingabe (TextBox2.Name)
End Sub
'usw.....
Private Sub UserForm_Activate()
Dim a As Byte
For a = 1 To 13
UserForm1("TextBox" & a) = Format(CDbl(Range("X" & a)), "#,##0.00")
Next
End Sub
Sub PrüfeEingabe(txtBoxName As String)
Dim Box As Object
Set Box = UserForm1(txtBoxName)
If Box.Text = "" Then
Box.Text = Format(0, "#,##0.00")
ElseIf Box.Text > "" Then
Box.Text = Format(CDbl(Box.Text), "#,##0.00")
End If
Set Box = Nothing
End Sub


Gruß
Tino

Anzeige
AW: textbox mit schleife
12.04.2008 00:12:16
Nepumuk
Hallo Tino,
warum übergibst du die Textbox nicht direkt? Also so:
Call PrüfeEingabe(TextBox1)
Sub PrüfeEingabe(objTextBox As MSForms.TextBox)
Du machst da einen unnötigen Umweg über Objekt - Name - Objet - Eigenschaft an Stelle direkt Objekt - Eigenschaft.
Gruß
Nepumuk

AW: textbox mit schleife
12.04.2008 00:28:03
Tino
Hallo Nepumuk,
danke für die Korrektur, ist natürlich besser so.
Habe die ganze Zeit versucht deine Version über die Klasse auf das Exit Event umzustricken, ist mir aber misslungen. :-(
Gruß
Tino

AW: textbox mit schleife
12.04.2008 12:43:00
ralf
hallo tino , hallo nepumuk
verstehe nicht ganz habe es mit Call PrüfeEingabe(TextBox1) versucht und
habe dann in Sub PrüfeEingabe(objTextBox As MSForms.TextBox) versucht
aber funktioniert nicht . geht das ganze nicht auch in clsmodul ?
gruß ralf

Anzeige
AW: textbox mit schleife
12.04.2008 12:57:00
Nepumuk
Hallo Ralf,
das geht nicht über die Klasse, die kennt nämlich das Exit-Ereignis nicht.
Der Prüfroutine ein Objekt zu übergeben und zu bearbeiten ist doch ganz einfach:
' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call PrüfeEingabe(TextBox1)
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call PrüfeEingabe(TextBox2)
End Sub

Private Sub UserForm_Activate()
    Dim lngIndex As Long
    For lngIndex = 1 To 2
        UserForm1("TextBox" & lngIndex) = _
            Format(CDbl(Cells(lngIndex, 24)), "#,##0.00")
    Next
End Sub

Private Sub PrüfeEingabe(objBox As MSForms.TextBox)
    If objBox.Text = "" Then
        objBox.Text = "0,00"
    ElseIf objBox.Text <> "" Then
        objBox.Text = Format(CDbl(objBox.Text), "#,##0.00")
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: textbox mit schleife
12.04.2008 13:16:54
ralf
hollo nepumuk , hallo tino
habe jetzt verstanden nochmals vielen dank
gruß ralf

Nachfrage zu ElseIf
12.04.2008 13:47:31
Reinhard
Hallo Nepumuk,
hast du den Code zufällig so geschrieben mit ElseIf oder hat das Gründe?
Ich rätsel grad rum warum du nicht eine der anderen beiden Varianten genommen hast oder IIf o.ä.

Option Explicit
Private Sub PrüfeEingabe(objBox As MSForms.TextBox)
If objBox.Text = "" Then
objBox.Text = "0,00"
ElseIf objBox.Text  "" Then
objBox.Text = Format(CDbl(objBox.Text), "#,##0.00")
End If
End Sub
Private Sub PrüfeEingabe(objBox As MSForms.TextBox)
If objBox.Text = "" Then
objBox.Text = "0,00"
Else
objBox.Text = Format(CDbl(objBox.Text), "#,##0.00")
End If
End Sub
Private Sub PrüfeEingabe(objBox As MSForms.TextBox)
objBox.Text = "0,00"
If objBox.Text = "" Then objBox.Text = Format(CDbl(objBox.Text), "#,##0.00")
End Sub

Gruß
Reinhard

Anzeige
AW: Nachfrage zu ElseIf
12.04.2008 13:51:34
Nepumuk
Hallo Reinhard,
neeeeeeeeeeeeee ich hab nur den Code kopiert und umgebaut. Das ElsIf ist mir garnicht aufgefallen. Macht natürlich keinen Sinn, da es ja nur zwei Bedingungen geben kann, leer oder nichtleer.
Gruß
Nepumuk

AW: Nachfrage zu ElseIf
12.04.2008 14:09:51
Tino
Hallo,
auch wen ich nicht angesprochen bin, versuche ich es mal zu beantworten.

Private Sub PrüfeEingabe(objBox As MSForms.TextBox)
objBox.Text = "0,00"
If objBox.Text = "" Then objBox.Text = Format(CDbl(objBox.Text), "#,##0.00")
End Sub


Geht nicht, TextBox wird überschrieben auch wen Werte drin stehen.
Die anderen beiden Varianten gehen, man könnte auch Prüfen
ob der Wert eine Zahl ist.
Ist sogar besser, da CDbl bei einem Text zum Fehler führen würde.
Wird ein Text eingegeben so wird dieser mit 0,00 überschrieben
ElseIf ist natürlich nicht Notwendig, da es nur zwei bedingungen gibt.


Private Sub PrüfeEingabe(objBox As MSForms.TextBox)
If IsNumeric(objBox.Text) Then
objBox.Text = Format(CDbl(objBox.Text), "#,##0.00")
Else
objBox.Text = "0,00"
End If
End Sub


Gruß
Tino

Anzeige
AW: Nachfrage zu ElseIf
12.04.2008 17:41:00
Reinhard
Hallo Tino,
du hast natürlich Recht, ich war so auf das ElseIf fixiert, sodaß ich die nicht bemerkte daß es natürlich Blödsinn ist erst alle Werte zu löschen und sie dann abzuprüfen :-)
Ich war da im Hintergrund irgendiwie bei Farbwerten, erstmal alle auf schwarz setzen, dann halt im Code buntig machen.
Und grundsätzlich, warum ich eigentlich nachfragte, Nepumuk kann ja einen kleinen Tick mehr als "Hello world" auf den Bildschirm zaubern. Deshalb fragte ich nach. Wußte ja nicht daß er ne faule Socke ist die einfach Code reinkopiert *kicher*
Und ich hatte bei der Benutzung von ElseIf grad durch Nepumuk automatisch vermutet daß es dafür Gründe gibt.
Egal jetzt ob er weiß das ElseIf schneller als Else ist oder irgendwas.
Weil, ich lese das Wort zum Sonntag sehr gerne, die Basics sind das was zählt.
Ich nehme an du kennst Dan Appleman. Und wenn der sich schon in seinem einzigen Buch das in Deutsch erscheint (großes Leider, seinenAPI-Guide hätte ich äußerst gerne in Deutsch) in einem kapitel die Zeit nimmt allen möglichen Lesern die sich für Excelprogrammierer halten noch seitenlang den Unterschied zwischen ByVal und ByRef beizubringen und Nepumuk, den ich für sehr gleichwertig halte, sicher, wenn sich Nepumuk und Dan mal treffen würden würden sie über Frauen, Fußball reden und ein Bier abzischen, aber wenn sie sich fachlich unterhalten würden, könnte eh kaum einer vom Rest der Welt mithalten.
Wie auch immer, die kleinen Basics muß man halt wissen. Als kleines Beispiel, angenommem ich will Code basteln der sehr schnell ist, dann darf ich nicht so schreiben:

If [A1] =x" or [A1] ="y" then
sonder so:
If [A1] =x" then
If [A1] =y" then


denn Vba wertet grundsätzlich den kompletten Term aus, d.h. selbst wenn A1=x ist, wird noch geprüft ob A1 y ist, was ja von der Logik her Blödsinn ist und Zeit kostet.
Und da gibt es noch weitere Feinheiten auf die man als Laie nie kommt.
With Worksheets("Tabelle1")
....
ist langsamer als
set wks=Worksheets("Tabelle1")
with wks
(gelesen im Buch von Michael Schwimmer, der sicher locker dem fachlichen Gespräch von Max und Dan folgen könnte)
Ich hoffe nicht daß ich dich zusehr zugetextet habe :-)
Aber ich glaube du kannst jetzt besser nachvollziehen warum ich gleich nachfragte warum ElseIf benutzt wurde
Gruß
Reinhard

AW: Nachfrage zu ElseIf
12.04.2008 17:59:00
ralf
hallo forum
danke erst einmal an alle die sich damit befasst haben . ich habe nur die hälfte verstanden
meine frage ist jetzt nur geht es denn kürzer
gruß
ralf

AW: Nachfrage zu ElseIf
12.04.2008 18:09:58
Tino
Hallo Ralf,
sorry wen wir dich etwas vernachlässigt haben, ich dachte aber auch
dass Thema wäre vom Tisch.
Viel kürzer wird es nicht gehen, habe es ja auch zuerst mit dem Ansatz von Nepemucks
Klasse versucht und Nepemuck hat ja darauf hingewiesen dass Exit- Ereignis nicht über die Klasse funktioniert.
Gruß
Tino

AW: Nachfrage zu ElseIf
12.04.2008 18:00:00
Tino
Hallo Reinhard,
da ich VBA auch nicht gerate erfunden habe,
bin ich auch Froh dass so einer wie Nepomuk und noch einige andere hier im Forum unterwegs sind.
Gerate durch solche netten Personen kann ich heute aber auch sagen, dass ich mich
mit meinen Kenntnissen nicht unbedingt verstecken muss.
@Nepumuk
jetzt aber nicht rot werden ;-)
Gruß
Tino

AW: Nachfrage zu ElseIf
12.04.2008 18:48:00
ralf
hallo forum
es sind mittlerweile so viele dich sich meiner sache angenommen haben , den ich
allen nicht genug danken kann , sich mit leuten wie mir, die spass an der sache haben
und es nicht richtig können angenommen haben und ihr wissen gerne teilen .
vor allen das ihr nicht verzweifelt und geduld mit mir habt wenn ich auch aus eurer
sicht einfachste sachen nicht verstehe .wie sagt man ,ich " ziehe meinen hut vor euch"
nochmals ans gesamte forum danke danke danke
gruß
ralf

AW: Nachfrage zu ElseIf
12.04.2008 19:22:33
Tino
Hallo Ralf,
du musst dich nicht entschuldigen!
Wer hat nicht klein angefangen, man muss sich nur ernsthaft damit befassen und wissen wo man eventuell Informationen her bekommt, der Rest kommt dann wie von allein.
PS: es gibt doch den Spruch
„es gibt keine dummen Fragen, nur dumme Antworten“
Gruß
Tino

AW: Nachfrage zu ElseIf
12.04.2008 23:56:00
ralf
hallo tino
ich habe immer geglaubt das ich nicht zu den unwissenden gehöre aber
bei vba gehore ich dazu ,zumindesten wenn es darum geht einen ansatzpunkt zufinden
und ich bin allen dankbar die mir helfen
nochmals alle die in diesen forum sich die mühe machen mir zu helfen und denen die meine unwissenheit
nicht abhälft mir trostdem zu helfen danke
gruß
ralf

AW: textbox mit schleife
13.04.2008 00:34:29
Tino
Hallo,
bin zwar kein Ausbilder und kenne deinen VBA- Kenntnisstand nicht.
Was ich aber bei dir sehe, du versuchst dort anzufangen wo andere aufhören.
Die meisten fangen im VBA erst mal mit Zellen und Tabellen an zu
Programmieren.
Mein Vorschlagt, mach dich erst mal mit den Grundsachen vertraut bevor du
an größere Sachen gehst.
Zum Anfang muss es nicht der Perfekte Code sein (kurz, schnell, optimal…),
wichtiger ist das er funktioniert!

So wirst du auch vertrauter mit einzelnen Funktionen die es in VBA gibt.
(Deklarierungen, Schleifen, Zellen ansprechen usw…)
Die Optimierungen kommen später automatisch.
Wünsche noch einen schönen Sonntag
Gruß
Tino

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige