Weiterführende Liste mit Inputbox

Hallo,

ich möchte mit Excel einen Makro programmieren, der eine InputBox aufruft, in der verschiedene Einträge gemacht werden können, die anschließend zu einer Liste zusammen gesetzt werden (Zeilenweise). Nachfolgend die Rohfassung des Makros:

Type Rechnungsposten

Name As String

Menge As Integer

End Type

Sub Rechnung()

Dim Liste(1 To 100) As Rechnungsposten

Dim n As Integer

Dim i As Integer

Dim Eingabe As String

'Eingabe

n = 0 'optional

Do

Eingabe = InputBox(„Artikelbezeichnung“)

If (Eingabe „“) Then

n = n + 1

Liste(n).Name = Eingabe

Liste(n).Menge = InputBox(„Menge“)

End If

Loop Until (Eingabe = „“)

'Ausgabe

Cells(1, 1) = „Name“

Cells(1, 2) = „Menge“

For i = 1 To n

Cells(i + 1, 1) = Liste(i).Name

Cells(i + 1, 2) = Liste(i).Menge

Next i

End Sub

Das Problem, das ich jetzt allerdings habe, ist die Tatsache, dass Excel beim zweiten Aufruf des Makros die Liste nicht weiterführt, sondern von vorne anfängt, sie zu überschreiben. Mir ist klar, dass ich irgendwas mit dem „i“ machen muss, nur kriege ich das absolut nicht hin! Die zweite Sache ist die, dass ich gerne eine fortlaufende Nummer hätte, die automatisch mit jedem Eintrag hinzugefügt wird.

Wer kann mir hier helfen?? Wäre für jeden Tipp mehr als dankbar!!

Danke und Gruß, Gerrit

Hallo, Gerrit!

Schau mal unter den Tags PRE

Hier kommt ein Code

. Macht’s etwas übersichtlicher.

Zu Deinem Problem:

Willst Du maximal 100 Rechnungsposten haben oder max. 100 pro Makroaufruf? Im ersten Fall musst Du vorher die Werte, die in der Tabelle stehen, wieder in Dein Array einlesen.

Im zweiten Fall musst Du die Zeilen, die bereits in Deinem Sheet stehen, am Anfang übergehen, bevor Du die neuen Werte reinschreibst.

Wenn Du ohnehin mit hardvercodeten (Array-)Grenzen arbeitest, kannst Du Deine Werte auslesen wie folgt:

 for i=1 to 100
 Liste(i).Name = Cells(i+1,1)
 Liste(i).Menge = Cells(i+1,2)
 next n

Da müsstest Du Dir nur noch merken, an welcher Stelle Du die neuen Einträge eintragen kannst. Das geschieht analog zu:
Die erste freie Zeile zum hintendranhängen (zweite Variante) bestimmst Du wie folgt:

 n=2
 do while cells(n,1)""
 n=n+1
 loop
 ' n enthält die erste freie Zeile

Die fortlaufende Nummer bekommst Du recht einfach, in dem Du Dir eine zusätzliche Spalte vorne dran einfügst, in die Du die Formel

=Zeile()-1

schreibst, wenn die zweite Zeile die erste Nummer beinhalten soll. Diese Formel kannst Du beliebig nach unten ergänzen. Du kannst Sie natürlich auch per Makro eintragen. Da könnte sie aber englisch heißen ("=ROW()-1"? trage einfach die deutsche Formel ein, aktiviere die Zelle, gehe ins VB-Direktfenster und tippe „? activecell.formula“, dann siehst Du, wie sie heißen muss).

Gruß, Manfred