Makro zur Erweiterung auf Knopfdruck

Amanar

Cadet 3rd Year
Registriert
Okt. 2020
Beiträge
35
Hallo,
will Makros erstellen, welche auf Knopfdruck eine Tabelle erweitern, die Basics der Basics kann ich schon, jedoch sollte sich das Makro nachdem es fertig ist noch selbst verändern oder von irgendeiner Formel gesteuert werden. Wenn ich einem Makro sage, es soll eine neue Zeile einfügen nimmt es ja dann immer die selbe, das bedeutet dann also, dass das Makro Mitten in der Tabelle weiter macht anstatt immer ganz unten. Also müsste das Makro eine Zeile einfügen und dann beim nächsten mal wenn es betätigt wird, eine Zeile weiter nach unten gehen als zuvor, damit es die Zeilen nicht in der Tabelle erstellt sondern immer drunter.

Dann brauch ich noch ein Makro, (kann ja alles auch in einem gemacht werden vielleicht) welches eine vorgefertigte Tabelle kopiert diese an der richtigen Stelle, wie auch bei den Zeilen beim ersten Makro, einfügt und dann ein Wahr/Falsch Kästchen bearbeitet und diesem eine Zelle zuteilt, welche auch immer um 1 erhöht werden soll, wenn das Makro ausgeführt wird.

Eine Überlegung wäre vielleicht, dass das Makro immer ganz oben was anfügt und somit immer der aktuellste Eintrag ganz oben steht. Jedoch müsste ich dann die ganze Tabelle nochmal von unten neu machen, damit die Formeln immer nach oben, anstatt nach unten gezogen werden.
 
Amanar schrieb:
die Basics der Basics kann ich schon
Dann zeige uns allen hier doch mal, was du bis jetzt aus Eigeninitiative auf die Beine gestellt hast.
Dann könnte man sich ein erstes Bild darüber machen, wo man als Helfer ansetzen muss.
So, wie es sich jetzt darstellt, wird das nichts werden.
 
Ich sag mal, mangels Frage:
  • Da ist nichts, was irgendetwas selbst lernen muss, sondern es muss nur entsprechend richtig programmiert sein.
  • Kannste alles machen.
  • viel Spaß
 
  • Gefällt mir
Reaktionen: Janush
Lad uns einfach die Datei hoch (vorher die Dateiendung anpassen, .xlsm geht nicht, also einfach in .xlsx umbenennen) und sag uns nochmal genau was du willst...
 
Ich habe eine Test Datei erstellt.

in der Datei ist ein simples Makro mit drin, welches die Deckblatt Tabelle erweitert und dann auf Vorlage1 geht, um diese durch eine Weitere Tabelle, der Vorlage 1, aus dem Blatt Vorlagen zu Erweitern. Beim Kopieren/dem Bearbeiten des Kontrollkästchens, tritt irgendein Fehler auf, welchen ich nicht richtig verstehe.

Da ich mich mit dem erweiterten Programmieren von Makros kaum auskenne, stelle ich diese Frage.

Wie ihr seht, erweitert das Makro die Tabelle immer in Zeile 5 (fügt eine neue Zeile ein und zieht die Formeln von Zeile 4 runter), jedoch sollte die Tabelle nachdem sie in Zeile 5 erweitert wurde, dann beim nächsten betätigen in Zeile 6 erweitert werden und auch die Formeln bis Zeile 6 ziehen. Dann soll das Makro die Vorlage1 aus Vorlagen kopieren und unter die vorherige Tabelle in Vorlage 1 einfügen und dann das Kontrollkästchen um 1 zur vorherigen Tabelle erweitern.

Dann bräuchte ich auch noch ein weiteres Makro, welches das Selbe mit Vorlage2 macht, wo es dann nochmal etwas komplexer wird, da das Makro abhängig von der Position von Vorlage1 die Tabelle erweitern muss, da Vorlage 2 durch das Hinzufügen von Einträgen von Vorlage 1 auch immer weiter runter geschoben wird.

Die Kontrollkästchen sind für den Status auf dem Deckblatt zuständig, in einer Tabelle ist es immer das unterste Kästchen, welches den Status durch eine WAHR/FALSCH abfrage bestimmt.
Ergänzung ()

Zudem erstellt das Makro beim einfügen der Vorlage 1 in Vorlage 1 eine Grafik der Tabelle, anstatt diese einzufügen.
 

Anhänge

  • test.xlsx
    57,8 KB · Aufrufe: 225
Hi Amanar,

das ist ja schonmal eine recht schöne Tabelle. Leider ist da natürlich kein Makro mehr dran, denn du hast sie hier als .xlsx hochgeladen (soll ja auch so sein). Das Problem welches ich mit deinen Ausführungen habe ist, dass ich immer noch nicht weiß, was du eigentlich willst. Du schreibst viel, aber was brauchst du am Ende?

Schreibe doch mal den Prozess so auf, dass wir sehen können was hier wann passieren soll.

Z.B.
welches die Deckblatt Tabelle erweitert und dann auf Vorlage1 geht, um diese durch eine Weitere Tabelle, der Vorlage 1, aus dem Blatt Vorlagen zu Erweitern
Was heist das? Wo erweitern? Nochmal eine Tabelle drunter kopieren? Oder daneben? Und wie hängt das Ganze mit dem Deckblatt zusammen? Das sieht ja wie eine Auswertung aus, aber was genau wird da wie ausgewertet und wie soll das aussehen, wenn die Tabellen erweitert wurden?

Mit solchen Infos kann man dann vielleicht eine Lösung anbieten, die das gesamte Projekt betrachtet, da wir ja vielleicht noch ganz andere Lösungsansätze für einzelne Probleme kennen welche alleinstehend vielleicht keinen Sinn ergeben (wenn du verstehst was ich meine :-)).

Ansonsten holst du dir einzelne Basteine (wie die Index Formel) und versuchst das irgendwie mit Makros zusammenzustecken.

Du kannst deinen Code hier auch direkt hochladen, da können wir mal einen Blick drauf werfen.

Schöne Grüße :-)
 
Wusste nicht, dass Makros da nicht dabei sind, hier der Quelltext meines Makros ohne das bearbeiten des Kästchens.


Sub Erweitern_von_V1()
'
' Erweitern_von_V1 Makro
' Fügt eine neue Zeile in Zeile 5 ein und erweitert die Formel von Zeile 4 auf Zeile 5. Dann nimmt es die Vorlage 1 aus dem Blatt Vorlagen und fügt sie in das Blatt Vorlage 1 unter die bereits erstellte Tabelle
'

'
Rows("5:5").Select
Range("B5").Activate
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A4").Select
Selection.AutoFill Destination:=Range("A4:A5"), Type:=xlFillDefault
Range("A4:A5").Select
Range("B4").Select
Selection.AutoFill Destination:=Range("B4:B5"), Type:=xlFillDefault
Range("B4:B5").Select
Range("D4").Select
Selection.AutoFill Destination:=Range("D4:D5"), Type:=xlFillDefault
Range("D4:D5").Select
Range("E4").Select
Selection.AutoFill Destination:=Range("E4:E5"), Type:=xlFillDefault
Range("E4:E5").Select
Range("F4").Select
Selection.AutoFill Destination:=Range("F4:F5"), Type:=xlFillDefault
Range("F4:F5").Select
Range("G4").Select
Selection.AutoFill Destination:=Range("G4:G5"), Type:=xlFillDefault
Range("G4:G5").Select
Range("H4").Select
Selection.AutoFill Destination:=Range("H4:H5"), Type:=xlFillDefault
Range("H4:H5").Select
Sheets("Vorlagen").Select
Range("A3:G23").Select
Selection.Copy
Sheets("Vorlage1").Select
Range("A44").Select
ActiveSheet.CheckBoxes.Add(369, 89.25, 30.75, 31.5).Select
ActiveSheet.CheckBoxes.Add(464.25, 95.25, 30.75, 23.25).Select
ActiveSheet.CheckBoxes.Add(369, 111, 30.75, 31.5).Select
ActiveSheet.CheckBoxes.Add(464.25, 117, 30.75, 23.25).Select
ActiveSheet.CheckBoxes.Add(369, 132.75, 30.75, 31.5).Select
ActiveSheet.CheckBoxes.Add(464.25, 138.75, 30.75, 23.25).Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=21
End Sub


Was ich von meinem will Makro ist, dass wenn es die Deckblatt und die Vorlage1 Tabellen erweitert, dass es immer ganz unten in der Tabelle anfängt. Mit dem momentanem Makro, fängt es immer in Zeile 5 an, aber es soll wenn es fertig ist die Tabelle immer Über der Überschrift "Vorlage2" erweitern.

Die Deckblatt Tabelle soll lediglich eine Zusammenfassung von Vorlage1 und 2 sein welche sich selbst aktualisiert.

Das Makro soll die Vorgefertigte Tabelle erstellen unter der vorherigen und diese dann so Formatieren, dass man nur noch die Werte in die Tabelle schreiben muss und diese dann automatisch auf das Deckblatt übernommen werden.
 
Zuletzt bearbeitet:
Genau genommen will ich ein Offset einstellen, das für Vorlage 1 ist ja relativ simpel jedoch weis ich nicht wie ich das Offset für Vorlage 2 machen soll da Vorlage 2 sich ja abhängig von Vorlage 1 verschiebt
 
OK hab mir dein Sheet nochmal angeschaut und habe eine ungefähre Idee was du erreichen willst. Genau sowas habe ich oben gemeint, denn ich denke du gehst hier einen komplett falschen Weg.

Kann ja sein, dass das am Anfang noch ganz hübsch aussieht, aber nach einer Weile ist das Ding so anfällig für Fehler, dass du nicht wirklich mehr sagen kannst, ob die Zahlen alle korrekt sind.

Wer wird das Tool am Ende benutzen? Nur du, oder auch Kollegen von dir? Wie wichtig ist es, dass die einzelnen kleinen Tabellen auch so angezeigt werden? Wenn da 100 Aufträge, oder was auch immer drin sind, blickt keiner mehr durch.
 
Da kommen Messwerte von einzelnen Geräten rein, z.B. ist Vorlage1 eine Gerätegruppe und der Status auf dem Deckblatt zeigt an wann die Geräte gewartet werden müssen.
Momentan habe ich ungefähr 120 Geräte in der Liste.
Ich wollte jetzt die Makros einbauen, damit wenn jemand anderes als ich ein Gerät hinzufügen will, er nicht irgendwelche Zeilen und Formeln einfügen muss, sondern einfach nur einen Knopf oder 2 drückt und er dann die Tabelle ausfüllen kann.
Ergänzung ()

Wenn die Makros richtig funktionieren, gibt es zudem keine Fehleranfälligkeit mehr, da nur Felder manuell bearbeitet werden, welche keinen Einfluss auf Formeln haben, sondern nur der Inhalt übertragen wird.
Ergänzung ()

Ich habe mir jetzt eine etwas leichter zu Programmierende Version ausgedacht und zwar, dass der Anwender eine Zeile auswählt, wo der neue Eintrag hin muss und das Makro lediglich eine neue Zeile mit den Passenden Formeln erzeugt und eine Vorlage auf das passende Sheet kopiert und das Kästchen formatiert.

Da bräuchte ich für jede Gerätegruppe ein Makro, was jeweils eine andere Vorlage einfügt.
Ergänzung ()

Die Indexformeln sind alle schon so konzipiert dass sie bis 1000000 gehen bedeutet, dass es keine Probleme beim Filldown geben kann.
Ergänzung ()

Ich habe jetzt mal noch in einem anderen Forum einen Post aufgemacht, damit es mehr Leute sehen.
Hier der Link:
https://www.clever-excel-forum.de/Thread-Excel-Makro-Nachhilfe?pid=235425#pid235425
 
Zuletzt bearbeitet:
Es soll gehen die XLSM einfach in XLSX umzubenennen um sie hochladen zu können.
Vielleicht stellst du uns so noch mal ein Muster zur Verfügung.
CN8
 
Amanar schrieb:
Da kommen Messwerte von einzelnen Geräten rein, z.B. ist Vorlage1 eine Gerätegruppe und der Status auf dem Deckblatt zeigt an wann die Geräte gewartet werden müssen.
Jetzt kommen wir der Sache doch schon näher :-)

Wenn du uns jetzt noch jeweils ein ausgefülltes Exemplar der Geräte Messdaten Tabelle zur Verfügung stellst (auch mit Hinweis darauf was die Kontrollkästchen machen sollen), können wir eine Empfehlung aussprechen.

So wie ich das sehe, brauchst du eher eine oder zwei EIngabemasken und einen Datenspeicher, welcher die Eingaben nacheinander in einer Zeile ablegt. Dann baust du die Eingabemasken so auf, dass man einfach durch alle Datensätze durchklicken kann, oder eine Auftragsnummer eingibt um zum gewünschten Messdingsbums zu kommen.

Auf die in Zeilen abgelegten Datensätze kannst du dann auch ganz einfach deine Formeln anwenden und eine Übersichtsseite basteln.

Edit: Ich habe mal schnell etwas gebastelt, was dem ungefähr nahe kommt. Das ist jetzt natürlich nur ganz schnell mal hingrotzt und muss natürlich angepasst werden, aber es zeigt sehr gut was ich meine. Probiers mal aus wenn du dich traust :-)
 

Anhänge

  • EingabemaskeBeispiel.zip
    22,7 KB · Aufrufe: 213
Zuletzt bearbeitet: (Ergänzung Datei)
Ich habe jetzt ein Makro welches tut was ich will, zumindest erstmal das auf dem Deckblatt, jedoch brauche ich noch einen Befehl der Zellen nach oben geht bis er eine Zelle findet in der etwas drinsteht.

ich habe es mit einer Do Until Loop versucht, jedoch fehlt mir der Befehl zum erkennen ob in einer Zelle etwas steht.
Hier die Loop.

Do
If Cell = 0 Then
ActiveCell.Offset(-1, 0).Select
End If
Loop Until Cell = Cell <> 0


Hier das ganze Makro, ohne den Do Until loopTeil, macht sie was ich will

Sub Deckblatt_neue_Zeilen_einfügen()
Do
If Cell = 0 Then
ActiveCell.Offset(-1, 0).Select
End If
Loop Until Cell = Cell <> 0

'Wählt letzte benutzte Zeile aus
Dim last As Integer
last = Cells(Rows.Count, 1).End(xlUp).Row + 1
ActiveCell.EntireRow.Select

'Fügt eine neue Zeile unter der ausgewählten ein
'und füllt Formeln nach
selection.Offset(1, 0).Select
selection.FillDown
selection.Insert Shift:=down, CopyOrigin:=xlFormatFromselection
x = selection.Row
y = selection.Column
selection.Delete

ActiveCell.Offset(1, 0).Select
ActiveCell.EntireRow.Select
selection.Insert Shift:=down

'löscht die akuelle Zeile falls sie Leer ist
ActiveCell.EntireRow.Select
If Cell = 0 Then
selection.Delete
End If


End Sub
 
Konnte deins gerade erst anschauen, weil ich kein Internet am Laptop hatte und hab in der Zeit selbst versucht Frankenstein zu sein. Hast du mir vielleicht einen Tipp was mein Problem angeht? Ich danke dir auf jeden Fall für deine Version, aber da ich das Makro jetzt fast fertig habe, werde ich es auch weiterhin benutzen.
 
Zurück
Oben