Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1036to1040
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
inhalt aus textbox in letzt freie zeile
03.01.2009 23:46:03
hans
Hallo und guten Abend,
ich möchte gerade ein Userform erstellen, dass mir die werte die ich über mehrere Textboxen eingebe, in die letzte freie Zeile einträgt. Mit VBA kenn ich mich leider gar nicht aus. Zwar klappt das eintragen per Userform, aber wo und wie ich den Code produzieren und einbinden muss, um die letzte freie Zeile des Tabellenblattes zu befüllen, ist mir derzeit noch schleierhaft :-)
Code bisher:

Private Sub TextBox1_Change()
Sheets("Tabelle1").Range("A2").Value = TextBox1.Text
End Sub



Private Sub TextBox2_Change()
Sheets("Tabelle1").Range("B2").Value = TextBox2.Text
End Sub



Private Sub TextBox3_Change()
Sheets("Tabelle1").Range("C2").Value = TextBox3.Text
End Sub


Damit wird natürlich bei jeder neuen Eingabe, der vorige Wert überschrieben...und das solle es ja gerade eben nicht. Ich denke, dass ich für RANGE eine variable festlegen muss....aber wie das genau auszusehen hat, dafür fehlt mir schlichtweg das entsprechende VBA-Wissen.
Hat jemand vielleicht nen Tip?
THX4URHelp
Hans

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: inhalt aus textbox in letzt freie zeile
04.01.2009 00:25:00
Lenni
Moin Hans!
Ich sage es gleich: Ich bin leider auch noch nicht der VBA-Crack... ...aber ein bißchen was kann ich auch schon. Guckst Du:
https://www.herber.de/bbs/user/58053.xls
Ich habe Dir einen Hinweiß in die Zeile geschrieben, welche die letzte freie Zeile sucht und dann die Werte der Textboxen in diese übergibt.
Hoffe Dir ein wenig geholfen zu haben!
Viele Grüße aus dem hohen Norden
Lenni
hallo Lenni, hier eine kleine Korrektur ...
04.01.2009 11:15:48
Matthias
Hallo Lenni
Vorschlag:
Um einen Fehler zu vermeiden, der zwangsläufig entstehen würde wenn die letzte Zeile gefüllt ist,
habe ich mal ein wenig verändert.


Option Explicit
Private Sub CommandButton1_Click()
Dim lz As Long
Application.ScreenUpdating = False
With Sheets("Tabelle1")
'.Unprotect
lz = .Range("B:D").Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row + 1
   If lz > 65536 Then
MsgBox "das Zeilenende des Blattes ist erreicht!"
GoTo beenden
End If
.Cells(lz, 2) = TextBox1
.Cells(lz, 3) = TextBox2
.Cells(lz, 4) = TextBox3
'.Protect
End With
beenden:
Application.ScreenUpdating = True
Unload Me
End Sub



Userbild
Gruß Matthias
Anzeige
AW: hallo Lenni, hier eine kleine Korrektur ...
04.01.2009 11:19:00
Hajo_Zi
Hallo matthias,
ich bin der Auffassung mit Sprungmarken sollte man nicht arbeiten. Es geht auch ohne

If lz > 65536 Then
MsgBox "das Zeilenende des Blattes ist erreicht!"
else
.Cells(lz, 2) = TextBox1
.Cells(lz, 3) = TextBox2
.Cells(lz, 4) = TextBox3
'.Protect
end if
End With



AW: und noch ein wenig aufgeräumt...
04.01.2009 11:31:26
Erich
Hallo zusammen,
nix Neues, nur etwas aufgeräumt:

Option Explicit
Private Sub CommandButton1_Click()
Dim lz As Long
With Sheets("Tabelle1")
lz = .Range("B:D").Find("*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, SearchFormat:=False).Row + 1
If lz 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
meine Küche müßte auch aufgeräumt werden ;o) oT
04.01.2009 11:46:03
Matthias
so gehts auch :o)
04.01.2009 11:40:49
Matthias
Hallo Hajo
Bei größere Prozeduren, sehe ich das auch so. Schon wg. des Überblicks.
Es ist aber auch kein Fehler es zu verwenden, zumindest in diesem kleinen Beispiel.
Es gibt doch immer mehrere Wege und meist ist es Programmiergewohnheit, wie man es schreibt.
Im Grunde wollte ich nur auf den Fehler mit der letzten Zeile hinweisen.
Fazit:
Dein Beispiel ist kürzer und somit auch besser.

Gruß Matthias
AW: SUPER VORSCHLÄGE!
04.01.2009 18:55:12
Lenni
Moin Matthias!! Moin Hajo!! Moin Erich!! ...und natürlich auch noch mal Hallo Hans!!
Also zu Erst: Ein gutes neues Jahr Euch allen!! ...hatte ich irgendwie vergessen (...Sorry!!). Ein ziemlich heftiger grippaler Infekt hat Sylvester bei mir "ausgeblendet"... Nur gut, dass Rhinoviren noch nicht "Internet-Gängig" sind. Das sind ja andere Viren...
SUPER!! ...Eure Vorschläge!! Ich bin Euch auch nicht böse, wenn Ihr meine Tips verbessert. Wir lernen ja alle dadurch!! Ich zumindestens habe Eure Tips in meinen bisherigen hier zu Hause laufenden Dateien sofort umgesetzt. Zumindestens von meiner Seite: Vielen Dank Euch Allen!!!
Ich hoffe aber, dass es in der Hauptsache Hans geholfen hat!!
Gruß
Lenni
Anzeige
AW: SUPER VORSCHLÄGE!
04.01.2009 23:23:35
hans
Mensch, ihr seit ja super :-)
Danke für die vielen Vorschläge. Ich hab jetzt einfach mal den von Erich genommen, den ein aufgeräumter Code klingt für mich ganz gut :-)) Funktioniert auch alles tadelos.
Ich hab mich auch mal ein ganz klein bischen dran gemacht, ein paar Sachen zu verfeinern. Und zwar will ich nun die Inhalte aus den Textboxen miteinander multipluzieren bzw. ein paar komplexere Formeln daraus machen (siehe dazu .Cells(lz, 12)) um anschliessend einen in Euro und mit Tausenderpunkt formatierten Wert auszugeben.
Habt ihr hierfür vielleich auch noch eine Idee? Bei mir klappts leider nicht so ganz.
Option Explicit

Private Sub CommandButton1_Click()
ActiveSheet.Unprotect Password:="123"
Dim lz As Long
With Sheets("Tabelle1")
lz = .Range("A:DD").Find("*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, SearchFormat:=False).Row + 1
If lz 


Anzeige
AW: neuer Vorschlag
06.01.2009 17:36:00
Erich
Hi Hans,
so richtig aufgeräumt sieht das ja nicht mehr aus... ;-)
Zu Beginn einer Prozedur schriebt man üblicherweise die Variablendeklarationen (Dim) - und das ist gut so.
Mit der Zeile "ActiveSheet.Unprotect Password:="123"" solltest du also nicht beginnen.
Außerdem: Im Code stand schon (auskommentiert) ein .Unprotect
an der richtigen Stelle - da, wo es gebraucht wird.
Grundsätzlich: Die Werte von Textboxen sind - wie der Name schon sagt - Texte,
auch wenn sie nur aus Ziffern oder vielleicht einem Punkt oder Komma bestehen.
Das sind trotzdem keine Zahlen.
Wenn der in eine Textbox eingegebene Wert als Zahl in die Tabelle geschrieben
(oder sonstwie verwendet) werden soll, muss man den eingegebenen Text in eine Zahl umwandeln.
Das setzt natürlich voraus, dass der Text in eine Zahl umwandelbar ist.
Hast du eine Prüfung bei den Textboxen 5, 6, 7, 11 und 13, die sicherstellt,
dass da nur in Zahlen zulässige Zeichen eingegeben werden?
Wenn nur zulässige Zeichen in einer Textbor stehen, ist die Umwandlung ganz einfach,
etwa = 1 * Textbox5.Value oder =CDbl(Textbox5.Value)
Wie die Zahlen in der Tabelle angezeigt werden, hat mit dem Wert der Zellen nichts zu tun,
sondern nur mit dem Zahlenformat.
Ich geh mal davon aus, dass du die Spalten der Tabelle so formatiert hast,
dass die Zahlen wie gewünscht angezeigt werden.
Dann muss (und sollte) sich das Makro darum überhaupt nicht kümmern.
Im folgenden Makro werden in die Spalten 1-4, 8-11, 13 und 15 Texte geschrieben:

Option Explicit
Private Sub CommandButton1_Click()
'ActiveSheet.Unprotect Password:="123"   ' nicht hier
Dim rngF As Range, lz As Long
With Sheets("Tabelle1")
Set rngF = .Range("A:DD").Find("*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, SearchFormat:=False)
If rngF Is Nothing Then lz = 1 Else lz = rngF.Row + 1
If lz 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige