17.11.2020, 18:08 (Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2020, 18:08 von Ben1986.)
Guten Tag zusammen,
Ich bin recht neu in Excel und versuche mir das soweit es geht über Foren und Youtube selbst beizubringen. Nun bin ich aber am Ende und komme nicht weiter, bzw. Excel macht es nicht so wie ich es gerne hätte. Aber da ich weiß, das es am Anwender und nicht am Programm liegt ersuche ich nun eure Hilfe :19: Ich hoffe ich nutze die richtigen Begriffe Ich habe folgendes Problem:
Ich habe eine Arbeitsmappe, die beinhaltet ein Tabellenblatt 'Vorlage' und ein Tabellenblatt 'WD-Liste'. Nun habe ich ein Makro erstellt, dass wenn ich auf ein Button drücke die 'Vorlage' kopiert und hinter der 'WD-Liste' als neues Tabellenblatt eingefügt wird. Neue Blätter werden immer hinter die 'WD-Liste' eingefügt. Ich habe in 'WD-Liste' mir auch eine Tabelle eingefügt, die Automatisch ausgefüllt werden soll. Das funktioniert aber nur mit dem Namen, da der Tabellenblattname mit dieser Formel/Befehl herangezogen wird: =WENN(ZEILE(A4)>ANZAHL2(X);"";HYPERLINK("#'"&INDEX(X;ZEILE(A4))&"'!A1";TEIL(INDEX(X;ZEILE(A4));FINDEN("]";INDEX(X;ZEILE(A4)))+1;31)))
Was ich aber gerne hätte wäre folgendes:
Ich möchte folgendes in Felder eingeben, WD-Nummer(soll dann der Name sein für das Tabellenblatt), Bezeichnung(Name fürs Projekt), Zustand (gibt 4 Kategorien), Werk (gibt 2 Kategorien) und Endtermin. Anschließend möchte ich auf den Button drücken, ein neues Tabellenblatt wird erstellt, mit den Daten in den dazugehörigen Zellen, Und natürlich, dass die 'WD-Liste' automatisch ausgefüllt wird im Bezug auf das jeweilige Tabellenblatt. Denn der Zustand und auch Endtermin soll veränderbar sein und dementsprechend angezeigt werden (egal ob in der Liste oder im dazugehörigen Tabellenblatt geändert). Farbliche hervorhebung geschieht über die Bedingte Formatierung.
BILD 1
So sieht es aus, das Muster ist nur für die Dropdownliste in der Vorlage, bzw als Sicherung für die Vorlage an sich
BILD 2 Das soll so ausgefüllt werden wie oben angegeben, die WD-Nummer soll in die Zelle G2; Benennung in Zelle C3, Werk in Zelle I4, Zustand in Zelle P4 und Endtermin in Zelle P3.
So das war jetzt recht viel auf einmal, aber ich hoffe mir kann einer Helfen oder gute Lösungsansätze bieten. Auch auf Fragen bezüglich der Problematik bin ich gespannt, denn das ist mein erster Versuch über ein Forum hilfe in Excel in anspruch zu nehmen.
danke für deine Antwort, kannst du mir ein wenig erklären was die Befehele machen, damit es für mich verständlicher ist? zb sName? So wie es dort steht würde es mir falsch vorkommen, aber das liegt daran, das ich nicht verstehe was da passiert. Wie gesagt ich bin recht neu mit Excel und schuster mir meine Tabellen zusammen.
sName ist eine Variable. d.h. ein symbolhafter Platzhalter für diverse Werte. In diesem Fall für einen Namen bzw. einen Text
s steht für String(engl. für Text). das macht man so. um dem Leser zu sagen was in der Variable für ein Datentyp drin ist.
und nein ich erkläre dir nicht den ganzen Code als Einführung in vba. Grundlagen sind eigenständig zu erlernen.
Lade deine Datei oder ein Beispiel hoch und dann findet sich bestimmt Jemand, der dir hilft. Aber ganz im Ernst, so ohne Grundlagen solltest du dich nicht daran versuchen.
im Prinzip so. Hier ist jedoch keine Prüfung drin, ob es den Blattnamen eventuell schon gibt. Das würde einen Fehler erzeugen. Ich gehe davon aus, dass die Blattnamen ab Zeile 2 stehen. Für das Verständnis hilft zuweilen auch die deutsche Übersetzung
Code:
Sub test() 'Variablendeklarationen 'Integer Dim iCnt% 'Schleife ueber alle Zeilen der Tabelle 'bis zum letzten Eintrag (anhand Spalte A=1) For iCnt = 2 To Cells(Rows.Count, 1).End(xlUp).Row 'Vorlage kopieren und hinter dem letzten Blatt einfuegen Sheets("Vorlage").Copy After:=Sheets(Sheets.Count) 'Blatt entsprechend Tabelleneintrag umbenennen ActiveSheet.Name = Range("G" & iCnt).Value 'Ende Schleife ueber alle Zeilen der Tabelle Next 'Blatt mit Namensliste aktivieren Sheets("WD-Liste").Activate End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28 • Ben1986
21.11.2020, 17:16 (Dieser Beitrag wurde zuletzt bearbeitet: 21.11.2020, 17:43 von Ben1986.
Bearbeitungsgrund: Erledigte Aufgaben gestrichen
)
Hallo zusammen,
Ich habe das Tabellenblatt "WD-Liste" etwas umgearbeitet und mal als Demo angehangen. Also im Moment habe ich teilweise meine Liste schon mal so hin bekommen, wie ich es gerne möchte. (Werde auch noch einbauen, das die Eingabefelder in "WD-Liste" gelöscht werden, nach dem das Blatt erstellt wurde[Erledigt mit Clearcontents]).
Das bedeutet das neue Tabellenblatt was erstellt wird, hat erstmal seine Grunddaten.
Was ich leider nicht hinbekomme ist, dass das Tabellenblatt sich automatisch umbenennt, nach Zelle G2:L2. (Oder muss ich das vorher machen? Also mit den Daten die ich schon in "WD-Liste" ("A2") reinschreibe?)
Das kann ich eigentlich nur mit einer Zellenverknüpfung, was aber natürlich nicht funktioniert, da das Makro das Feld natürlich überschreibt: =RECHTS(ZELLE("dateiname";B1);LÄNGE(ZELLE("dateiname";B1))-FINDEN("]";ZELLE("dateiname";B1))) (Mit dem Makro von schauan werde ich mich mal versuchen einzuarbeiten um es genau zu verstehen. Vielleicht ist das ja schon die Lösung zum Umbenennen.)
Und ich habe das Problem, wenn ich Zellen verknüpfe, diese in der Liste am Platz stehen bleiben, aber das Tabellenblatt auf das die Bezug nehmen, eine Zeile herunter rutscht wenn ich ein neues hinzufüge. In der Liste arbeite ich mitdiesem Befehl: =WENN(ZEILE(A4)>ANZAHL2(X);"";HYPERLINK("#'"&INDEX(X;ZEILE(A4))&"'!A1";TEIL(INDEX(X;ZEILE(A4));FINDEN("]";INDEX(X;ZEILE(A4)))+1;31)))
Hat einer vielleicht Lösungsansätze für die Probleme? Vielleicht muss ich ja auch die herangehensweise ändern. Ich bin auch dabei mich in VBA einzuarbeiten und natürlich noch mehr in Excel, so weit es meine Zeit zu lässt.
Ich bedanke mich schon mal für eure mühen und eure Zeit.
meine Liste macht für mich nun erstmal das was sie soll. Jetzt habe ich mal gegooglt, ob man die Register automatisch färben kann, wie es zb über die Bedingte Formatierung für Zellen macht. Könnte mir jemand dabei Helfen es meinen Bedürfnissen anzupasen? Und wo muss der Code plaziert werden? Ich hatte es versucht in der Tabelle ('WD-Liste') einzufügen, wo es die Informationen her bekommen soll.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Or Target.Count > 1 Then Exit Sub With Worksheets(Target.Offset(0, -1).Value) Select Case Target.Value Case "": .Tab.Color = vbYellow Case 1: .Tab.Color = vbGreen Case 2: .Tab.Color = vbRed End Select End With End Sub
Habe es auch versucht ab zu ändern, das es für mich passt.
Code:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 4 Or Target.Count > 1 Then Exit Sub With Worksheets(Target.Offset(0, -1).Value) Select Case Target.Value Case "-": .Tab.Color = vbWhite Case "Demontage": .Tab.Color = vbRed Case "Montage": .Tab.Color = vbGreen Case "Unvollständig": .Tab.Color = vbYellow Case "Erledigt": .Tab.Color = vbBlue End Select End With End Sub
Bekomme natürlich eine Fehlermeldung. Folgende: Laufzeitfehler '9' Index außerhalb des gültigen Bereiches. Beim Debugen wird der Bereich makiert: With Worksheets(Target.Offset(0, -1).Value).
Eigentlich müsste auch erst ab D5 die Abfrage gestartet werden nach der "Farbe", die die Register bekommen sollen. Im Anhang ist ein Ausschnitt wie die Tabelle wäre.
Schon einmal Danke für eure mühe sich das hier schon mal anzuschauen und eventuell sogar für eine Hilfestellung/Lösung.
12.01.2021, 01:00 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2021, 01:03 von ralf_b.)
Worksheets(Target.Offset(0, -1).Value)
in der Klammer wird der Name eines "vorhandenen" Arbeitsblattes erwartet. Dieser soll laut deinem Code aus der Zelle links von der Targetzelle kommen. Die Prüfung ob das Blatt existiert solltest du noch einbauen.
die If abfrage muß dann so If (Target.Column <> 4 And Target.Row < 5) Or Target.Count > 1 Then Exit Sub
Folgende(r) 1 Nutzer sagt Danke an ralf_b für diesen Beitrag:1 Nutzer sagt Danke an ralf_b für diesen Beitrag 28 • Ben1986