Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Automatische Liste erstellen
#1
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.

Schon mal vielen Dank im voraus.


Angehängte Dateien Thumbnail(s)
       
Antworten Top
#2
die Hilfe kann nur so gut sein wie die Informationen zum Problem.

in dein neues Blatt kannst du  alles schön reinschreiben. 

da du vba benutzt, kein Ding.  

dein neues Blatt wird hinter "WDliste" eingefügt. 
sobald es eingefügt ist, sollte es aktiv sein. D.h. du  kannst schon mal den Namen vergeben

Dim sName as String 

sName = Sheets("WdListe").Range("G7").Value

 Activesheet.name  = sName


Sheets(sName).Range("B3").value  =  Sheets("WdListe").Range("G8").Value 

und die anderen Zellen kannst du analog dazu beschreiben.
Antworten Top
#3
Hallo ralf_b,

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.

Vielen dank für die mühe.
Antworten Top
#4
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.
Antworten Top
#5
Hallöchen,

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 Smile

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:
  • Ben1986
Antworten Top
#6
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]).

Code:
Sub Vorlage_einfügen()

'Vorlage kopieren und hinter WD-Liste einfügen

Worksheets("Vorlage").Copy After:=Worksheets("WD-Liste")

'WDAuftragsnummerEinfügen
Worksheets("WD-Liste").Range("A2").Copy Destination:=ActiveSheet.Range("G2:L2")

'BenennungEinfügen
Worksheets("WD-Liste").Range("B2").Copy Destination:=ActiveSheet.Range("C3:F3")

'WerkEinfügen
Worksheets("WD-Liste").Range("C2").Copy Destination:=ActiveSheet.Range("I4:L4")

'ZustandEinfügen
Worksheets("WD-Liste").Range("D2").Copy Destination:=ActiveSheet.Range("P4")

'EndterminEinfügen
Worksheets("WD-Liste").Range("E2").Copy Destination:=ActiveSheet.Range("P3")

End Sub

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.


Angehängte Dateien
.xlsm   Demo.xlsm (Größe: 661,46 KB / Downloads: 4)
Antworten Top
#7
ActiveSheet.Name = Worksheets("WD-Liste").Range("B2").Text
[-] Folgende(r) 1 Nutzer sagt Danke an ralf_b für diesen Beitrag:
  • Ben1986
Antworten Top
#8
Guten Abend zusammen,

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.

Jetzt habe ich in einem anderen Forum: http://www.office-loesung.de/ftopic466328_0_0_asc.php das gefunden.

Code:
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. Confused 
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.


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#9
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:
  • Ben1986
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste