Ich haben ein Problem bei der Programmierung meines Programms(Excel mit vba). Und zwar geben bei mir Nutzer Ihre Beiträge in einer UserForm ein und diese werden dann in einer Excel Tabelle abgespeichert. Zur Zeit ist es noch so, dass alle neuen Einträge am Ende der Tabelle gespeichert werden, nun will ich aber, dass alle neuen Einträge in die oberste Zeile meiner Tabelle geschrieben werden ohne das der alte Eintrag überschrieben wird. Dieser soll einfach nach unten rutschen.
Hilfe sitze da schon so lange dran
Hier mal ein Auschnitt meines Codes
z2 = ListBox2.ListIndex
z3 = ListBox3.ListIndex
z4 = ListBox4.ListIndex
'zeile = Worksheets(„CPs“).Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows(„3:3“).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
’ Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'Damit immer die nächste Zeile ausgewählt wird und keine überschrieben wird
'adresse = Worksheets(„Users“).Cells(2, 4).Value
'definition der Adresse
zeile = Worksheets(„CPs“).Rows(„3:3“)
ID = 0
For I = 3 To Worksheets(„Users“).Cells(Rows.Count, 1).End(xlUp).Row
''Hier wird die letzte beschreiben Zeile als Endpunkt der for schleife ausgewählt
If ID „“ And TextBox2.Text „“ And TextBox3.Text „“ Then
If ListBox2.ListIndex > -1 And ListBox3.ListIndex > -1 And ListBox4.ListIndex > -1 Then
flb3 = False
ActiveSheet.Unprotect Worksheets(„Admin“).Range(„E2“).Value
flagneu = False
ID = ID + 1
'ID Nummer fortlaufend
abc = Worksheets(„Admin“).Cells(2, 1).Value
For I = 2 To Worksheets(„Admin“).Cells(Rows.Count, 1).End(xlUp).Row
If Worksheets(„Admin“).Cells(I, 1).Interior.Color = 65535 Then
abc = Worksheets(„Admin“).Cells(I, 1).Value
'Was in den Tabelle rausgesucht wird
End If
Next
For I = 2 To Worksheets(„Users“).Cells(Rows.Count, 1).End(xlUp).Row
If Worksheets(„Users“).Cells(I, 1).Interior.Color = 65535 Then
aktnutzer = Worksheets(„Users“).Range(„A“ + CStr(I)).Value
End If
If Worksheets(„Users“).Cells(I, 2).Value = ListBox4.List(z4) Then
adresse = Worksheets(„Users“).Cells(I, 4).Value
End If
Next
'abc = ListBox1.List(z)
abc2 = ListBox2.List(z2)
abc3 = ListBox3.List(z3, 0)
abc4 = ListBox4.List(z4)
Worksheets(„CPs“).Range(„A“ + CStr(zeile)).Value = CStr(ID)
Worksheets(„CPs“).Range(„B“ + CStr(zeile)).Value = TextBox1.Text
Worksheets(„CPs“).Range(„C“ + CStr(zeile)).Value = TextBox2.Text
Worksheets(„CPs“).Range(„D“ + CStr(zeile)).Value = abc
Worksheets(„CPs“).Range(„E“ + CStr(zeile)).Value = CDate(Date)
Worksheets(„CPs“).Range(„F“ + CStr(zeile)).Value = CDate(Date)
Worksheets(„CPs“).Range(„G“ + CStr(zeile)).Value = „Aktiv“
Worksheets(„CPs“).Range(„H“ + CStr(zeile)).Value = abc2
Worksheets(„CPs“).Range(„J“ + CStr(zeile)).Value = aktnutzer
Worksheets(„CPs“).Range(„K“ + CStr(zeile)).Value = TextBox3.Text
Worksheets(„CPs“).Range(„L“ + CStr(zeile)).Value = abc3
Worksheets(„CPs“).Range(„M“ + CStr(zeile)).Value = abc4
’ Worksheets(„CPs“).Range(„A“ + CStr(zeile) + „:M“ + CStr(zeile)).Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlTop
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
Hi,
warum fügst du nich vor den vorhadenen Werten eine neue Zeile ein und schreibst die Werte da rein? (nicht getestet)
Erste Zelle der Tabelle auswählen und dann:
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Jetzt noch Werte in diese neue Zeile schreiben.
Hey,
ja eine neue Zeile oben in meiner Tabelle per vba einzufügen klappt auch super. Ich möchte nur, dass danach die Zellen und Spalten in dieser neu eingefügten Zeile mit meinen texten aus der userform gefüllt wird. und genau dieses Befüllen klappt nicht.
trotzdem vielen dank schon mal
hoff Ihr habt noch weitere Vorschläge
Hallo Mary_Elisa,
ich nehme mal ein bisschen was von Deinem Code:
'zeile = Worksheets("CPs").Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows("3:3").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Okay, in Zeile 3 soll’s rein.
...
Worksheets("CPs").Range("A" + CStr(zeile)).Value = CStr(ID)
Worksheets("CPs").Range("B" + CStr(zeile)).Value = TextBox1.Text
Worksheets("CPs").Range("C" + CStr(zeile)).Value = TextBox2.Text
Worksheets("CPs").Range("D" + CStr(zeile)).Value = abc
Worksheets("CPs").Range("E" + CStr(zeile)).Value = CDate(Date)
Worksheets("CPs").Range("F" + CStr(zeile)).Value = CDate(Date)
Worksheets("CPs").Range("G" + CStr(zeile)).Value = "Aktiv"
Worksheets("CPs").Range("H" + CStr(zeile)).Value = abc2
Worksheets("CPs").Range("J" + CStr(zeile)).Value = aktnutzer
Worksheets("CPs").Range("K" + CStr(zeile)).Value = TextBox3.Text
Worksheets("CPs").Range("L" + CStr(zeile)).Value = abc3
Worksheets("CPs").Range("M" + CStr(zeile)).Value = abc4
Welchen Wert hat den zeile hier? Du kannst hier überall schreiben:
Worksheets(„CPs“).Range(„A3“).Value = CStr(ID)
oder auch
Worksheets(„CPs“).cells(3,1)=CStr(ID)
Ansonsten sollte es tun…
Ah, warte: Du hast oben irgendwo stehen:
zeile = Worksheets("CPs").Rows("3:3")
Das heißt: Zeile ist hier ein Range.
zeile=3
wäre hier besser (bzw. das einzig richtige).
Tu Dir einen Gefallen: Schreibe in jedes Modul an den Anfang „Option Explicit“. Dann musst Du jede Variable erst einmal deklarieren.
Und dieses Deklarieren machst Du bitte mit dem passenden Datentyp, bei zeile also Long. Dann wird Dir nämlich der Compiler einen Strich durch die Rechnung machen und sagen: Nein, so nicht, das geht nicht…
Gruß, Manfred
Hallo Mary,
ich stieß auch wie Manfred auf diese für mich seltsame Zuweisung zu Zeile.
zeile = Worksheets(„CPs“).Rows(„3:3“)
und auf
Worksheets(„CPs“).Range(„A“ + CStr(zeile)).Value = CStr(ID)
usw.
Nach der Zuweisung hat Zeile den Typ Variant(). Für mich ein Array mit einem Element.
Besser ist, du weist Zeile eine Zahl zu, wie schon gesagt.
Dann geht auch:
Worksheets(„CPs“).Range(„A“ & zeile) = CStr(ID)
bzw.
Worksheets(„CPs“).Range(„A“ & CStr(zeile)) = CStr(ID)
Da du keinen „hello world“ Code schreibst sondern höherwertigen ist Option Explicit quasi Pflicht.
Also jetzt manuell eintragen, dann im VB-Editor unter Extras—Optionen variablendeklaration erforderlich anhaken.
Eine Nachfrage noch. Der Code, den du gezeigt hast funktioniert?
Also so wie in deiner Anfrage, „unten“ werden die neuen Daten eingetragen?
Wenn dem so ist, was soll die neue zeile 3? Ist das Vorbereitung für deine Anfrage?
Ja, ist verwirrend was ich frage, bin es aber auch 
Gruß
Reinhard
Hallo Jungs,
vielen Dank für eure Hilfe. Versuch mich auch zu bessern mit der Variabeln Dekleration.
Hab jetzt nur noch ein Problem und zwar wenn ich eine Zeile einfügen möchte( in Zeile 3) mit
Rows(„3:3“).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
springt der Computer immer sofort ans Ende der Prozedur und ich weiß nicht warum?
Könnt ihr mir helfen?
P.S.: der Code hat so nicht funktioniert es waren nur meine kläglichen Versuche mit eingetragen.
bye