Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
808to812
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
808to812
808to812
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Tabellenblattname in Liste eintragen
12.10.2006 09:33:44
Michael
Hallo,
ich hätte mal folgende Frage:
wenn ein neues Tabellenblatt mit einem Mitarbeiternamen angelegt wird, dann soll dieser Name des Tabellenblatts in eine Art Übersichtliste mit dem Namen "Übersicht" in Spalte A eingetragen werden. Dabei nicht irgendwo in A, sondern ab Zeile 4 abwärts in die nächste freie Zelle. Nachdem automatischen Eintrag in die Tabelle Übersicht, sollte das Makro automatisch nach A-Z direkt sortieren.
Wer könnte mir kurz helfen ?
Gruß
Michael L.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblattname in Liste eintragen
12.10.2006 11:09:04
Daniel
Hallo,
es geht nur andersrum:
du mußt ein Makro schreiben, daß den Mitarbeiter-Namen abfragt, dann das Tabellenblatt anlegt und den Namen in die Liste einträgt.
Das mit den 3 Zeilen abstand geht nicht, wenn anschließend sortiert wird, da beim Sortieren leere Zellen ganz nach unten wandern.
Hier müsstest du den Namen 4x eintragen und bei bedarf die unteren 3 Namen per bedingter Formatierung weiss färben.
Das Makro dazu könnte so aussehen:

Sub Neuer_MA()
Dim Name As String
Dim i As Long
'--- Namen eingeben
Name = InputBox("Mitarbeiter Name")
'--- neues Blatt einfügen
Sheets.Add
ActiveSheet.Name = Name
'--- in Übersicht eintragen und sortieren
With Sheets("Übersicht")
For i = 1 To 4
.Cells(65000, 1).End(xlUp).Offset(1, 0).Value = Name
Next
.Cells(2, 1).CurrentRegion.Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlYes _
, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
End Sub

Gruß, Daniel
PS damit das Makro korrekt läuft, sollte ein Sheet mit dem Namen "Übersicht" vorhanden sein, in das die Einträge gemacht werden.
Anzeige
Anmerkung
12.10.2006 11:22:40
Harald
Hi Daniel,
sorry für's Einmischen ;-))
Name wird von vba bereits verwendet.
Variablen sollten andere Bezeichnungen tragen.
Auch sollen die Eintrräge nicht mit Leerzeilen sondern ab Zeile 4 untereinander eingetragen werden.

Sub Neuer_MA()
Dim neuerName As String
'--- Namen eingeben
neuerName = InputBox("Mitarbeiter Name")
'--- neues Blatt einfügen
Sheets.Add
ActiveSheet.Name = neuerName
'--- in Übersicht eintragen und sortieren
With Sheets("Übersicht")
.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = neuerName
.Cells(4, 1).CurrentRegion.Sort Key1:=.Range("A4"), Order1:=xlAscending, Header:=xlYes _
, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
End Sub

Gruss Harald
Anzeige
Danke für Korregieren
12.10.2006 12:25:34
Daniel
Das mit der 4. Zeile habe ich wohl falsch verstanden.
Der "Name" als Variablenbezeichnung wurde allerdings im Testlauf problemlos aktzepiert.
Trotzdem sollte man sowas unterlassen, um verwechslungen zu vermeiden.
Gruß, Daniel
AW: Tabellenblattname in Liste eintragen
12.10.2006 11:40:02
Bertram
Hi Michael,
eine andere Möglichkeit wäre:
Falls du dein neues Tabellenblatt beim Erstellen schon alphabetisch richtig einsortiertst, geht's z.B. auch so:
Den Code in das Tabellenblatt "Übersicht".

Private Sub Worksheet_Activate()
Dim ws As Worksheet
Range(Cells(4, 1), Cells(65535, 1)).ClearContents
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "Übersicht" Then Cells(ws.Index + 3, 1).Value = ws.Name
Next ws
End Sub

Gruß
Bertram
Anzeige
Nachtrag
12.10.2006 14:04:57
Bertram
Mit automatischem (Ein)Sortieren der Tabellenblätter:

Private Sub Worksheet_Activate()
Dim ws As Worksheet
Dim i As Integer, j As Integer
Application.ScreenUpdating = False
Range(Cells(4, 1), Cells(65536, 1)).ClearContents
For i = 1 To Sheets.Count
For j = i + 1 To Sheets.Count
If UCase(Sheets(j).Name) < UCase(Sheets(i).Name) Then Sheets(j).Move before:=Sheets(i)
Next j
Next i
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "Übersicht" Then Cells(ws.Index + 3, 1).Value = ws.Name
Next ws
Application.EnableEvents = False
Sheets("Übersicht").Activate
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Gruß
Bertram
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige