PDA

Vollständige Version anzeigen : Mit Makro eine Tabelle fortlaufend ausfüllen?


dankeexperten
25.09.2014, 13:45
Hallo,
ich möchte in einem Tabellenblatt Daten aus einem anderen Tabellenblatt fortlaufend ausfüllen. Habe leider "null" Ahnung von VBA :eek: ! Das Makro, was ich aufgezeichnet habe sieht wie folgt aus:

Sub ausfüllen()

' Range("D5").Select
ActiveCell.FormulaR1C1 = "=Data!R[2]C[4]"
Range("F5").Select
ActiveCell.FormulaR1C1 = "=Data!R[38]C[2]"
Range("G5").Select
ActiveCell.FormulaR1C1 = "=Data!R[71]C[1]"
Range("H5").Select
ActiveCell.FormulaR1C1 = "=Data!R[74]C"
Range("I5").Select
ActiveCell.FormulaR1C1 = "=Data!R[77]C[-1]"
Range("J5").Select
ActiveCell.FormulaR1C1 = "=Data!R[63]C[-2]"
Range("K5").Select
ActiveCell.FormulaR1C1 = "=Data!RC[-3]"
Range("M5").Select
ActiveCell.FormulaR1C1 = "=Data!R[1]C[-5]"
ActiveWindow.SmallScroll ToRight:=4
Range("O5").Select
ActiveCell.FormulaR1C1 = "=Data!R[57]C[-7]"
Range("Q5").Select
ActiveCell.FormulaR1C1 = "=Data!R[18]C[-9]"
ActiveWindow.SmallScroll ToRight:=4
Range("S5").Select
ActiveCell.FormulaR1C1 = "=Data!R[89]C[-10]"
End Sub




Ich würde dieses Makro ein Button zuweisen. Wie stelle ich nun sicher, dass bei jede Ausführung die nächste (leere) Zeile in meiner Zieltabelle gefüllt wird?

Vielen Dank für die Untestützung!!! :)

Beverly
25.09.2014, 15:29
Hi,

meinst du so etwas:

Sub ausfüllen()
Dim lngErste As Long
lngErste = IIf(IsEmpty(Cells(Rows.Count, 4)), Cells(Rows.Count, 4).End(xlUp).Row, Rows.Count) + 1
Cells(lngErste, 4).Formula = "=Data!H7"
Cells(lngErste, 6).Formula = "=Data!H43"
Cells(lngErste, 7).Formula = "=Data!H76"
Cells(lngErste, 8).Formula = "=Data!H79"
Cells(lngErste, 9).Formula = "=Data!H82"
Cells(lngErste, 10).Formula = "=Data!H68"
Cells(lngErste, 11).Formula = "=Data!H5"
Cells(lngErste, 13).Formula = "=Data!H6"
Cells(lngErste, 15).Formula = "=Data!H62"
End Sub


<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

dankeexperten
26.09.2014, 16:42
Danke für die Antwort!!!:)
Im Prinzipt funktioniert es auch. Nur überschreibt er in meiner auszufüllende Tabelle bei Änderung der Zelleninhalt in der Tabelle "Data" immer den neusten Wert. Ich würde gerne die in einer Form eingetragenen Daten immer in einer neue Zeile in eine andere Tabelle speichern (archivieren sozusagen).
Geht das???

Beverly
26.09.2014, 16:58
Sicher geht das irgendwie, aber ich sehe erst einmal keinen Zusammenhang zwischen deinem Eröffnungsbeitrag (in dem du Formeln in Zellen schreibst) und deinem jetzigen Beitrag (in dem du Daten aus einer Form - was auch immer darunter zu verstehen ist - in die erste freie Zeile schreiben möchtest) . Da müsstst du schon mal ganz konkret werden, was wie und wo ablaufen soll und nach Möglichkeit eine Mappe hochladen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

dankeexperten
26.09.2014, 17:12
Entschuldigung, dass ich so undeutlich bin!
Die Daten in der Zeilen aus meiner Ausgangstabelle kommen aus einer Form (ich dachte, dies ist nicht so wichtig:( ) Auf jeden Fall werden sie da eingetragen und ich wollte einfach jedes mal, wenn dieser Form ausgefüllt wird bestimmte Zellen (bzw. die Inhalte) fortlaufend in einer Tabelle archivieren.
Ist das jetzt etwas verstänlicher?:rolleyes:

Beverly
26.09.2014, 17:25
Was verstehst du unter "eine Form" - ein UserForm mit Steuerelementen oder meinst du Zellen in einem Tabellenblatt?
Vom Prinzip her macht der Code doch genau das was du erreichen willst: er ermittelt die erste freie Zeile in Spalte D (im aktiven Tabellenblatt) und trägt in die Spalten D, F-L und O dieser Zeile die Inhalte aus dem Tabellenblatt "Data" und den entsprechenden Zellen (H7, H42, H76 usw.) ein.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

dankeexperten
27.09.2014, 08:37
Ja, genau, ich habe ein "UserForm", von dem die Werte in den Zellen H7, H46 usw. eingetragen werden. Das Skrip schreibt mir diese dann in meiner aktiven Tabelle rein. Das Problem ist nur, dass beim Ausführen der Makro (und Änderung der Inhalt in H7, H46 usw) die allten Werten in der aktive Tabelle überschrieben werden und ich würde diese Änderungen festhalten...
Vielen Dank!!!:redface: :sos:

Beverly
27.09.2014, 09:39
Also mit dem derzeitgen Code werden keine Daten aus einem UserForm ins Tabellenblatt geschrieben sondern aus Zellen eines anderen Tabellenblattes.

Vielleicht solltest du mal deine Mappe hochladen, damit man sich das mal anschauen kann, was du denau meinst.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

dankeexperten
28.09.2014, 09:45
Ich habe eine Tabelle "Data"-da werden die Daten in der Spalte "H" eingetragen (aus ein UserForm) und immer wieder geändert. Diese möchte ich gerne in meiner Tabelle "Feedback Form" jedes mal (beim Makroasuführung) in einer neuer fortlaufende Zeile speichern. Momentan überschreibt das Skript bei Änderung der Werte in Spalte "H" die vorherige Werte in der Feedback Tabelle.
Ein sonniges Wochenende und vielen, vielen Dank für's Geduld mit mir!

Hajo_Zi
28.09.2014, 09:52
Der Dateiname sollte was mit dem Problem zu tun haben.
Ich habe mir z.B. einen Ordner angelegt in dem ich alle Dateien aus dem Internet speichere. Bei Dateinamen wie Test..., Mappe…, Beispiel… wird eine vorhandene überschrieben.
Schaue hier, Dateiname im Beitrag (http://www.ms-office-forum.net/forum/showthread.php?t=58538&highlight=Beitrags-Nr#3)
das ist nun das Word -Forum, das gilt hier aber auch.

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

Beverly
28.09.2014, 18:02
Wenn Tabelle "Feedback Form" aktiv ist, werden die Formeln korrekt in die erste freie Zeile eingtragen - ich kann also kein Problem erkennen.
Dennoch würde ich den Code etwas umschreiben, denn für die Ermittlung der ersten freien Zeile gibt es eine wesentlich einfacherere Methode als ein Schleife. Außerdem kann der Bezug zum richtigen Tabellenblatt wichtig sein, denn dann kann man den Code unabhägnig davon ausführen, in welchem Tabellenblatt man sich gerade befindet:

Sub Ausfuellen()
Dim lngErste As Long
' bezieht sich alles aufs Tabellenblatt "Feedback Form"
With Worksheets("Feedback Form")
' erste freie zeile in Spalte D ermitteln
lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 4)), .Cells(.Rows.Count, 4).End(xlUp).Row, .Rows.Count) + 1
.Range("D" & lngErste).FormulaR1C1 = "=Data!R[3]C[4]"
.Range("F" & lngErste).FormulaR1C1 = "=Data!R[5]C[2]"
.Range("H" & lngErste).FormulaR1C1 = "=Data!R[14]C"
End If
End Sub


Den Code deiner Function kannst du löschen.

Mal nur als Erklärung: mit UserForm ist ein besonderes Steuerelement gemeint, auf dem man wiederum weitere Steuerelemente erstellen kann und von dem aus man die in diesen Steuerelementen eingetragenen Daten ins Tabellenblatt überträgt. Du dagegen benutzt das Tabellenblatt, um dort Formeln einzutragen, die die Daten aus der anderen Tabelle übernehmen - also kein UserForm. :)

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

dankeexperten
29.09.2014, 10:37
Ich habe das "End with" hinzugefügt und es funktioniert ganz gut. Das einzige Problem (glaube ich) ist, das das Makro bei Änderungen der Werte im Spalte "H" automatisch ausgeführt wird und somt automatisch alle Werte in meiner "Feedback" Tabelle überschreibt. Somit kann ich leider keine Werte "archivieren" :(:rolleyes:

Beverly
29.09.2014, 11:52
Das ist natürlich richtig, da muss End With anstelle End If stehen.

Den Rest kann ich nicht nachvollziehen - in deiner hochgeladnenen Areitsmappe gibt es keinen Code, der das Makro automatisch ausführen könnte. Außerdem ermittelt das Makro die erste leere Zeile in der Tabelle "Feedback Form" in Spalte D und trägt die Daten dann dort ein. Anhand deiner hochgeladenen Arbeitsmappe habe ich angenommen, dass in Spalte D (4) fortlaufend Daten bis zuer letzten Zeile stehen - sollte das nicht der Fall sein, dann musst du eine andere Spalte für die Ermittlung der ersten freien Zeile verwenden.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>