einmalige Schleife

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: einmalige Schleife
von: Marius
Geschrieben am: 17.02.2005 08:20:26
Guten Morgen ans Forum,
ich benötige Hilfe bei einer VB-Schleife, die ich es nicht ganz hinbekomme. Es sollen Daten aus einer UserForm (K_Erfassung) in eine Daten Tabelle (Kalendererfassung) geschrieben werden. Dabei sind drei Felder immer gleich, aber die anderen sollen immer Fortlaufend geschrieben werden.
Es sollen immer in die nächste freie Zeile immer nur einmal die Daten übernommen werden.
TextBox 1 = A3 = immer gleich
TextBox 2 = B3 = immer gleich
TextBox 3 = C3 = immer gleich
TextBox 4 = A ab Zeile 5 = variabel
TextBox 5 = B ab Zeile 5 = variabel
TextBox 6 = C ab Zeile 5 = variabel

TextBox13= K ab Zeile 5 = variabel
Mein Code (füge ich bei) überschreibt immer alle Variablen und läuft immer für alle 500 Zeilen durch, soll aber die bestehenden stehen lassen und nur einmal die Werte einfügen.


Private Sub CommandButton1_Click()
Sheets("Kalendererfassung").Visible = True
Sheets("Kalendererfassung").Select
Range("A3").Select
ActiveCell.Select
ActiveCell = TextBox1
Range("b3").Select
ActiveCell.Select
ActiveCell = TextBox2
Range("c3").Select
ActiveCell.Select
ActiveCell = TextBox3
Dim i As Integer
Range("a5").Select
   For i = 5 To 500
        If ActiveCell = "" Then ActiveCell.Select
                                      ActiveCell = TextBox4
                                      ActiveCell.Cells(z + 1, s + 2).Select
                                      ActiveCell = TextBox5
                                      ActiveCell.Cells(z + 1, s + 2).Select
                                      ActiveCell = TextBox6
                                      ActiveCell.Cells(z + 1, s + 2).Select
                                      ActiveCell = ""
                                      ActiveCell.Cells(z + 2, s - 2).Select
                                      Next i
                                     
                                      
Range("a5").Select
Sheets("Start").Select
Range("A3").Select
Sheets("Kalendererfassung").Visible = False
K_Erfassung.Hide
End Sub

Bitte um Hilfe und schon mal danke im Voraus
Marius
Bild

Betrifft: AW: einmalige Schleife
von: Stefan
Geschrieben am: 17.02.2005 10:05:34
Hallo Marius,
hab mal versucht deinen Code zu ändern, hab ihn nicht getestet, kann daher auch nicht sagen, ob er funktioniert:

Private Sub CommandButton1_Click()
Sheets("Kalendererfassung").Visible = True
Sheets("Kalendererfassung").Range("A3").Select
ActiveCell.Offset(0, 0).Value = textBox1.Value
ActiveCell.Offset(0, 1).Value = TextBox2.Value
ActiveCell.Offset(0, 2).Value = TextBox3.Value
Dim i As Integer
'Range("a5").Select
For i = 2 To 500
    If ActiveCell.Offset(0 + i, 0).Value = "" Then
            ActiveCell.Offset(0 + i, 0).Value = TextBox4.Value
            ActiveCell.Offset(0 + i, 1).Value = TextBox5.Value
            ActiveCell.Offset(0 + i, 2).Value = TextBox6.Value
Next i
                                      
'Range("a5").Select
Sheets("Start").Range("A3").Select
Sheets("Kalendererfassung").Visible = False
K_Erfassung.Hide
End Sub

Habe folgende Zeilen aus deinen Code entfernt, wußte nicht was du damit bezweckst
' ActiveCell = ""
' ActiveCell.Cells(z + 2, s - 2).Select

Gruß Stefan
Bild

Betrifft: AW: einmalige Schleife
von: Marius
Geschrieben am: 17.02.2005 10:19:03
fehler beim komilieren
next ohne for
...sowas oder ähnliches bekomme ich auch dauernd, habe schon zig Varianten ausprobiert, kenne mich mit VB leider nicht so aus.
Bild

Betrifft: AW: einmalige Schleife
von: Stefan
Geschrieben am: 17.02.2005 10:30:50
Sorry, ein End if vergessen. Hier der geänderte Code

Private Sub CommandButton1_Click()
Sheets("Kalendererfassung").Visible = True
Sheets("Kalendererfassung").Range("A3").Select
ActiveCell.Offset(0, 0).Value = textBox1.Value
ActiveCell.Offset(0, 1).Value = TextBox2.Value
ActiveCell.Offset(0, 2).Value = TextBox3.Value
Dim i As Integer
'Range("a5").Select
For i = 2 To 500
    If ActiveCell.Offset(0 + i, 0).Value = "" Then
            ActiveCell.Offset(0 + i, 0).Value = TextBox4.Value
            ActiveCell.Offset(0 + i, 1).Value = TextBox5.Value
            ActiveCell.Offset(0 + i, 2).Value = TextBox6.Value
            End If
Next i
                                      
'Range("a5").Select
Sheets("Start").Range("A3").Select
Sheets("Kalendererfassung").Visible = False
K_Erfassung.Hide
End Sub

Gruß Stefan
Bild

Betrifft: AW: einmalige Schleife
von: Marius
Geschrieben am: 17.02.2005 11:15:50
Super, ein Problem ist gelöst, er lässt die vorhandenen Daten stehen aber er schreibt die Daten immer noch bis 500 voll. Er soll aber, nach dem er eine freie Zeile gefunden hat und die Daten eingefügt hat die Schleife auch abbrechen.
Marius
Bild

Betrifft: AW: einmalige Schleife
von: Stefan
Geschrieben am: 17.02.2005 11:28:30
Hallo Marius,
verstehe dich nicht ganz, soll die For-next schleife nur 1x durchlaufen werden.
Ein verwirrter Stefan
Bild

Betrifft: AW: einmalige Schleife
von: Marius
Geschrieben am: 17.02.2005 11:34:25
Sorry, wenn ich mich falsch ausdrücke, aber er soll die Daten aus der UserForm einfach in die nächste freie Zeile schreiben. Das macht er ja auch aber nach dem er die Daten da eingetragen hat soll er die Schleife abbrechen. (Daten nur einmal eintragen)
Bild

Betrifft: AW: einmalige Schleife
von: Stefan
Geschrieben am: 17.02.2005 11:39:55
Hallo Marius,
nachdem ich meine Frage gepostet, wurde mir klar was du meinst. Teste das mal

Private Sub CommandButton1_Click()
Sheets("Kalendererfassung").Visible = True
Sheets("Kalendererfassung").Range("A3").Select
ActiveCell.Offset(0, 0).Value = textBox1.Value
ActiveCell.Offset(0, 1).Value = TextBox2.Value
ActiveCell.Offset(0, 2).Value = TextBox3.Value
'Dim i As Integer
'Range("a5").Select
Range("A65536").End(xlUp).Offset(1, 0).Value = textbox4.Value
Range("B65536").End(xlUp).Offset(1, 0).Value = textbox5.Value
Range("C65536").End(xlUp).Offset(1, 0).Value = textbox6.Value
'Range("a5").Select
Sheets("Start").Range("A3").Select
Sheets("Kalendererfassung").Visible = False
K_Erfassung.Hide
End Sub

Gruß Stefan
Bild

Betrifft: AW: einmalige Schleife
von: Marius
Geschrieben am: 17.02.2005 11:52:57
Stefan...
wir haben es, puhhhh, dank, danke, danke, funktioniert, habe es auch schon modifiziert, super.
Danke nochmal
Bin dir was schuldig
P.S.: Der Code schaut ja einfach aus als er ist. Verstehe zwar nicht als (zB. "A6536") aber ist ja egal. Danke!!!
Bild

Betrifft: AW: einmalige Schleife
von: Stefan
Geschrieben am: 17.02.2005 12:35:33
Hallo Marius,
eine andere Möglichkeit

Private Sub CommandButton1_Click()
Sheets("Kalendererfassung").Visible = True
Sheets("Kalendererfassung").Range("A3").Select
ActiveCell.Offset(0, 0).Value = textBox1.Value
ActiveCell.Offset(0, 1).Value = TextBox2.Value
ActiveCell.Offset(0, 2).Value = TextBox3.Value
Dim i As Integer
'Range("a5").Select
For i = 2 To 500
    If ActiveCell.Offset(0 + i, 0).Value = "" Then
            ActiveCell.Offset(0 + i, 0).Value = TextBox4.Value
            ActiveCell.Offset(0 + i, 1).Value = TextBox5.Value
            ActiveCell.Offset(0 + i, 2).Value = TextBox6.Value
            Exit For
            End If
Next i
                                      
'Range("a5").Select
Sheets("Start").Range("A3").Select
Sheets("Kalendererfassung").Visible = False
K_Erfassung.Hide
End Sub

Bild

Betrifft: AW: einmalige Schleife
von: Marius
Geschrieben am: 17.02.2005 13:20:42
Ich muss dir noch mal für deine Hilfe danken, bin echt gerettet.
Aber ein kleines Minus haben die beiden Codes schon. Wenn der Benutzer mal ein Feld in der UserForm auslässt dann wir sich diese Spalte bei der Nächste Eingab verschieben.
...das werde ich wohl anders lösen müssen.
Dir aber noch mal Große Dank.
Marius
Bild

Betrifft: AW: einmalige Schleife
von: Stefan
Geschrieben am: 17.02.2005 13:32:39
vielleicht so?

Private Sub CommandButton1_Click()
If textbox4.Value = "" Or textbox5.Value = "" Or textbox6.Value = "" Then
MsgBox "Es sind nicht alle Felder gefüllt": End
Sheets("Kalendererfassung").Visible = True
Sheets("Kalendererfassung").Range("A3").Select
ActiveCell.Offset(0, 0).Value = textBox1.Value
ActiveCell.Offset(0, 1).Value = TextBox2.Value
ActiveCell.Offset(0, 2).Value = TextBox3.Value
Dim i As Integer
'Range("a5").Select
For i = 2 To 500
    If ActiveCell.Offset(0 + i, 0).Value = "" Then
            ActiveCell.Offset(0 + i, 0).Value = textbox4.Value
            ActiveCell.Offset(0 + i, 1).Value = textbox5.Value
            ActiveCell.Offset(0 + i, 2).Value = textbox6.Value
            Exit For
            End If
Next i
                                      
'Range("a5").Select
Sheets("Start").Range("A3").Select
Sheets("Kalendererfassung").Visible = False
K_Erfassung.Hide
End Sub

Bild

Betrifft: AW: einmalige Schleife
von: Marius
Geschrieben am: 17.02.2005 14:05:27
Ist eine kluge Idee aber das End muss ein end if sein sonst geht es nicht. Außerdem zeigt er die Meldung zwar an, schreibt aber die Daten trozdem rein. Das liegt daran da das end nicht funktioniert. An der Stelle sollte das Makro ja enden aber ohne end if keine if anweisung.
Bild

Betrifft: AW: einmalige Schleife
von: Stefan
Geschrieben am: 17.02.2005 14:37:55
Noch besser wäre bei den Command-Button die Enabled-Eigenschaft, solange auf False zu
setzen, bis alle Textboxen gefüllt sind
https://www.herber.de/bbs/user/18249.xls
Bild

Betrifft: AW: einmalige Schleife
von: Marius
Geschrieben am: 17.02.2005 14:53:18
Super !!! ist ja noch geiler! und einfacher!
Dank an den Meister
 Bild

Beiträge aus den Excel-Beispielen zum Thema "einmalige Schleife"