Wenn Zelle leer, Wert aus Textbox übernehmen

fiedlator

Commander
Registriert
Okt. 2002
Beiträge
2.192
Hallo zusammen,
in Excel 03 versuche ich derzeit ein Makro zu schreiben, dass den Wert aus einer Textbox in eine Zelle überträgt und zur nächsten Reihe spring, falls die Zelle schon Inhalte vorweist. Mein Vorgehen:

Code:
Set rBereich = Range("c5")
For i = 0 To 400
  If rBereich.Offset(i, 0) = "" Then
    Range(Cells(rBereich.Row + i, rBereich.Column)).Value = TextBox1.Value
    Exit For
  End If
Next i


Leider kann er mit der vierten Zeile nichts anfangen, sie wird gelb markiert. Liegt der Fehler im Befehl ansich? Besten Dank!
 
warum steht in zeile 5 "exit for"? scheint mir nicht notwendig zu sein bzw. anderes verhalten zu verursachen
TextBox1 ist nicht definiert, kommt das vorher im code vor? kommen irgendwelche hinweise bei der gelben markierung?
 
Hi,

versuch mal:

Code:
Set rBereich = Range("C5:C5")
For i = 1 To 400
  If rBereich.Cells(i, 1).Value = "" Then
    rBereich.Cells(i, 1).Value = TextBox1.Value
    Exit For
  End If
Next i

das beginnt bei C5 und sucht nach unten nach der ersten freien Zelle und fügt da den Wert ein.
Achtung: in VBA beginnen Indizes häufig bei 1 und nicht bei 0.
http://support.microsoft.com/kb/291308


Hoffe ich konnte helfen
 
Zuletzt bearbeitet:
Danke Manoki, das könnte das Problem sein.
Wie muss ich Textbox1 definieren?
Textbox1 as range?
 
Mit folgendem Code klappt es bei mir (Das ist der Ersatz für Zeile 4):

Cells(rBereich.Row + i, rBereich.Column).Select
Selection.FormulaR1C1 = TextBox1
 
Danke, die korrekte Zelle wird hiermit ausgewählt, ja. Es wird jedoch kein Wert übernommen!?
 
Doch, mit dem FormulaR1C1 wird der Wert von TextBox1 (ich nahm bei mir an, dass das eine String-Variable ist) in die ausgewählte Zelle eingetragen.
Das geht auch mit Zahlenwerten.
 
OK, dann doch noch das Definitionsproblem.
Ich steh leider nicht(mehr) so wirklich im Stoff. Ich müsste doch innerhalb des Makros die Textbox definieren können, oder? Dementsprechend müsste doch folgende Variante funktionieren:

Sub asdasd()
Set rBereich = Range("C5:C5")
Dim textbox1 As String
For i = 1 To 400
If rBereich.Cells(i, 1).Value = "" Then
Cells(rBereich.Row + i, rBereich.Column).Select
Selection.FormulaR1C1 = textbox1
Exit For
End If
Next i
End Sub

Es passiert jedoch leider nicht mehr als ohne diese Zuweisung
 
Jetzt musst du nur noch vorher in textbox1 einen Wert eintragen, dann ist es auch schon geschafft:

Sub asdasd()
Set rBereich = Range("C5:C5")
Dim textbox1 As String
textbox1 = "Dies ist ein dummy-Text"
For i = 1 To 400
If rBereich.Cells(i, 1).Value = "" Then
Cells(rBereich.Row + i, rBereich.Column).Select
Selection.FormulaR1C1 = textbox1
Exit For
End If
Next i
End Sub
 
Danke, leider immernoch nicht wie gewünscht :(

Der Dummy-Text wird übertragen, der in der Textbox eingegebene jedoch leider nicht - hm....
Ist es von Relevanz, dass sich die Textbox innerhalb einer Userform befindet? Das habe ich bisher ja nicht erwähnt.....
 
Dann probier es mal mit

Selection.FormulaR1C1 = UserForm1.textbox1.value

Wobei du "UserForm1" durch denn Namen deiner UserForm ersetzen musst. Dann kannst du auch die Zeilen

Dim textbox1 As String
textbox1 = "Dies ist ein dummy-Text"

löschen
 
Zuletzt bearbeitet: (Schreibfehler)
Vielen Dank, das hat geklappt.
Noch ein paar Veränderungen durchgeführt, damit die Prozedur abläuft und nun sieht es so aus:


Code:
Sub asdasd()
    Dim rBereich As Range
    Set rBereich = Range("C5")
        Dim TextBox1 As String
        For i = 1 To 40
        If rBereich.Offset(i, 0).Value = "" Then
        Cells(rBereich.Row + i, rBereich.Column).Select
        Selection.FormulaR1C1 = ContactAdd.TextBox1.Value
        Exit For
    End If
    Next i
End Sub

Besten Dank :)
 
Zu früh abgemeldet, hier bin ich noch mal :)
Das ganze soll auf mehrere Zellen ausgeweiteret werden, weshalb nicht nur eine Zelle überprüft werden soll, sondern ein bestimmter Bereich. Die Überprüfung lautet also nun:

Code:
 Dim rpr As Range
Set rpr = Range("C5:K5")
        For i = 1 To 40
        If rpr.Offset(i, 0).Value = "" Then

Und endet in der letzten Zeile als Laufzeitfehler.
Verträgt sich Value nicht mit einem Zellbereich?
 
Hmm, ich denke der Ansatz funktioniert so nicht, einfacher wird es jede Spalte einzeln abzuarbeiten.
Das wäre ja nur eine 2. for-Schleife und dann halt die Spaltenzahl immer um 1 erhöhen.
 
Zurück
Oben