Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1840to1844
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
Inhaltsverzeichnis

Neue Zeile über Positionsfeld

Neue Zeile über Positionsfeld
06.08.2021 11:11:07
Maximilian
Guten Morgen,
zur Vollkostenkalkulierung habe ich nun bei uns ein UserForm angefertigt welche alle möglichen Kostenpositionen abfragt. Nun sind meine VBA Kenntnisse leider arg limitiert und an einer Stelle komme ich nicht weiter.
Stand jetzt werden die Abfragen aus dem UserForm über die Formel

ActiveSheet.Range("B7") = XYZ.Value
in die Zeile B7 übernommen. Mit meinen Möglichkeiten kann ich pro Ausführung des UserForms nur ein Produkt erfassen. Deshalb wäre mein Ansatz jetzt ein Feld für die Positionsnr. einzufügen wo ich dann mit jeder Ausführung des UserForms die Positionsnr. um 1 erhöhe.
Meine Frage ist daher, wie muss ich die Formel umgestalten, damit die Positionsnr. 2 in die Zelle B8 übernommen wird?
Mit freundlichen Grüßen
Max

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Neue Zeile über Positionsfeld
06.08.2021 11:16:28
Werner
Hallo,
so:

If Range("B7") = "" Then
Range("B7") = XYZ.Value
Else
Range("B" & Cells(Rows.Count, "B").End(xlUp).Offset(1).Row) = Range("B7") = XYZ.Value
End If
Wenn der Vorgang auf dem aktiven Tabellenblatt erfolgen soll, dann kannst du das ActiveSheet davor weglassen. Eine Range ohne Angabe eines bestimmten Blattes davor bezieht sich immer auf das aktuell aktive Blatt.
Gruß Werner
AW: Neue Zeile über Positionsfeld
06.08.2021 11:50:31
Max
Danke für die schnelle Antwort. Es wird nun immer eine weitere Zeile angesprochen, das freut mich schonmal sehr :)
Ich denke ich habe allerdings zu wenig Informationen bereit gestellt, die Ausgabe im neuen Feld erfolgt nun lediglich als "FALSCH" oder "WAHR".
Deshalb teile ich jetzt einmal den Gesamtcode wie ich ihn nach deiner Anleitung eingestellt habe, vielleicht fällt ja jemanden mein Fehler auf.

Private Sub CommandButton2_Click()
If Range("B7") = "" Then
Range("B7") = AAA.Value
Else
Range("B" & Cells(Rows.Count, "B").End(xlUp).Offset(1).Row) = Range("B7") = AAA.Value
End If
If Range("A7") = "" Then
Range("A7") = CCC.Value
Else
Range("A" & Cells(Rows.Count, "A").End(xlUp).Offset(1).Row) = Range("A7") = CCC.Value
End If
If Range("C7") = "" Then
Range("C7") = BBB.Value
Else
Range("C" & Cells(Rows.Count, "C").End(xlUp).Offset(1).Row) = Range("C7") = BBB.Value
End If
If Range("F7") = "" Then
Range("F7") = DDD.Value
Else
Range("F" & Cells(Rows.Count, "F").End(xlUp).Offset(1).Row) = Range("F7") = DDD.Value
End If
If Range("J7") = "" Then
Range("J7") = EEE.Value
Else
Range("J" & Cells(Rows.Count, "J").End(xlUp).Offset(1).Row) = Range("J7") = EEE.Value
End If
If Range("M7") = "" Then
Range("M7") = FFF.Value
Else
Range("M" & Cells(Rows.Count, "M").End(xlUp).Offset(1).Row) = Range("M7") = FFF.Value
End If
If Range("P7") = "" Then
Range("P7") = GGG.Value
Else
Range("P" & Cells(Rows.Count, "P").End(xlUp).Offset(1).Row) = Range("P7") = GGG.Value
End If
If Range("S7") = "" Then
Range("S7") = HHH.Value
Else
Range("S" & Cells(Rows.Count, "S").End(xlUp).Offset(1).Row) = Range("S7") = HHH.Value
End If
If Range("V7") = "" Then
Range("V7") = III.Value
Else
Range("V" & Cells(Rows.Count, "V").End(xlUp).Offset(1).Row) = Range("V7") = III.Value
End If
If Range("Y7") = "" Then
Range("Y7") = JJJ.Value
Else
Range("Y" & Cells(Rows.Count, "Y").End(xlUp).Offset(1).Row) = Range("Y7") = JJJ.Value
End If
If Range("AB7") = "" Then
Range("AB7") = KKK.Value
Else
Range("AB" & Cells(Rows.Count, "AB").End(xlUp).Offset(1).Row) = Range("AB7") = KKK.Value
End If
If Range("AE7") = "" Then
Range("AE7") = ZZZ.Value
Else
Range("AE" & Cells(Rows.Count, "AE").End(xlUp).Offset(1).Row) = Range("AE7") = ZZZ.Value
End If
If Range("AH7") = "" Then
Range("AH7") = XXX.Value
Else
Range("AH" & Cells(Rows.Count, "AH").End(xlUp).Offset(1).Row) = Range("AH7") = XXX.Value
End If
If Range("AK7") = "" Then
Range("AK7") = YYY.Value
Else
Range("AK" & Cells(Rows.Count, "AK").End(xlUp).Offset(1).Row) = Range("AK7") = YYY.Value
End If
If Range("AN7") = "" Then
Range("AN7") = WWW.Value
Else
Range("AN" & Cells(Rows.Count, "AN").End(xlUp).Offset(1).Row) = Range("AN7") = WWW.Value
End If
If Range("AQ7") = "" Then
Range("AQ7") = QQQ.Value
Else
Range("AQ" & Cells(Rows.Count, "AQ").End(xlUp).Offset(1).Row) = Range("AQ7") = QQQ.Value
End If
If Range("AT7") = "" Then
Range("AT7") = TTT.Value
Else
Range("AT" & Cells(Rows.Count, "AT").End(xlUp).Offset(1).Row) = Range("AT7") = TTT.Value
End If
If Range("AW7") = "" Then
Range("AW7") = PPP.Value
Else
Range("AW" & Cells(Rows.Count, "AW").End(xlUp).Offset(1).Row) = Range("AW7") = PPP.Value
End If
If Range("AZ7") = "" Then
Range("AZ7") = VVV.Value
Else
Range("AZ" & Cells(Rows.Count, "AZ").End(xlUp).Offset(1).Row) = Range("AZ7") = VVV.Value
End If
Es geht also um eine größere Anzahl von Werten welche dann in einer neuen Zeile ausgegeben werden soll.
Vielen Dank für eure Hilfe!
Anzeige
AW: Neue Zeile über Positionsfeld
06.08.2021 12:28:57
Werner
Hallo,
mein Fehler
hier ohne das Range(...
Range("B" & Cells(Rows.Count, "B").End(xlUp).Offset(1).Row) = XYZ.Value
Guß Werner
AW: Neue Zeile über Positionsfeld
06.08.2021 12:49:21
Max
Das hat funktioniert. Vielen Dank für die schnelle und kompetente Unterstützung :)
Ich wünsche ein schönes Wochenende!
Gerne u. Danke für die Rückmeldung. o.w.T.
06.08.2021 22:15:20
Werner
AW: Neue Zeile über Positionsfeld
06.08.2021 12:52:31
Daniel
Hi
der konzeptionelle Fehler darin ist, dass du die Zeile für jede Spalte seperat durch den Sprung nach oben neu ermittelst.
das funktioniert nur dann, wenn jedes deiner Steuerelemente AAA-VVV immer einen Wert enthält und niemals leer ist.
Sollte eines dieser Steuerelemente mal leer sein, erfolgt beim nächsten Durchlauf der Eintrag in dieser Spalte in die falsche Zeile, nämlich in die darüber liegende leere Zelle..
Sicherer wäre also, die Ausgabezeile nur einmal zu ermitteln (hierfür eine Spalte verwenden, in der das Steuerelement immer einen Wert enthält), diesen Wert in einer Variablen zu sichern und dann diese Variable für alle Ausgabe als Zeilennummer zu verwenden.
Das macht auch den Code wesentlich einfacher, daher sollte man das auf jeden Fall tun:

dim ZE as long
ZE = Cells(Rows.Count, 2).End(xlup).Row + 1
ZE = Worksheetfunction.Max(ZE, 7)
Cells(ZE, 2) = AAA.Value
Cells(ZE, 1) = CCC.Value
Cells(ZE, 3) = BBB.Value
Cells(ZE, 52) = VVV.Value
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige