Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1000to1004
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
Inhaltsverzeichnis

Tabellenblatt automatisch beschriften

Tabellenblatt automatisch beschriften
15.08.2008 19:20:00
oblivion
Hallo, ich habe eine Frage. Gibt es eine Möglichkeit das Tabellenblatt automisch beschriften zu lassen, wenn man sagen wir in E4 einen Namen oder was anderes schreibt? Danke schon mal für eure Hilfe. Gruß Oblivion

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt automatisch beschriften
15.08.2008 19:25:00
Hajo_Zi
Hallo ,
benutze das Chabge Ereignis, oder die Suche des Forums.

AW: Tabellenblatt automatisch beschriften
15.08.2008 19:27:02
Hajo_Zi
Hallo
da ist ein b anstelle von n es sollte Change lauten.
Gruß Hajo

Ja, das geht!
15.08.2008 19:32:32
Backowe
Hi,
VBA-Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Code in das entsprechende Tabellenblatt!
If Range("E4") "" Then ActiveSheet.Name = Target.Value
End Sub
Gruß Jürgen

Anzeige
Man könnte noch die Zelllänge abfragen, ...
15.08.2008 19:41:19
backowe
Hi,
... da der Tabellenblattname max. 31 Zeichen haben darf.
VBA-Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Code in das entsprechende Tabellenblatt!
If Len(Range("E4")) < 32 And Range("E4") <> "" Then
  ActiveSheet.Name = Range("E4").Value
End If
End Sub
Gruß Jürgen

Anzeige
Neue Frage zu Tabellenblättern
15.08.2008 21:28:00
oblivion
Halo, vielen Dank für die Hilfe. Ich habe aber gleich noch eine Frage. Ich habe eine Exceldatei mit mehreren Tabellenblättern. Auf einem Tabellenblatt trage ich monatlich gewisse Daten ein. Die Daten werden automatisch auf die anderen Tabellenblätter übertragen. Die Daten sind bestimmten Personen zugeordnet. Wenn ich jetzt eine neue Person habe die ich erfassen möchte, muss ich zur Zeit noch von Hand ein neues Tabellenblatt erstellen und es in die entsprechende Form bringen. Kann ich mit Hilfe eines VBAs dies auch automatisch machen lassen. Also wenn ich auf dem ersten Blatt einen neuen Namen schreibe, dass er mir dann ein neues Tabellenblatt erstellt mit einer vorher festgelegten Form?
Danke für die Hilfe.
Gruß Oblivion

Anzeige
Lege dir ein Tabellenblatt als Vorlage an ...
16.08.2008 00:36:00
backowe
Hi,
... und kopiere den folgenden Code hinein, tritt in E4 eine Änderung ein, wird von der Vorlage eine Kopie erstellt und nach rechts ans Ende gestellt und nach E4 benannt.
VBA-Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Code in das entsprechende Tabellenblatt!
If Len(Range("E4")) < 32 And Range("E4") <> "" Then
  If Sheets(Sheets.Count).Name <> Range("E4").Value Then
    ActiveSheet.Copy After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = Range("E4")
  End If
End If
End Sub
Gruß Jürgen

Anzeige
AW: Tabellenblatt automatisch anlegen
16.08.2008 07:53:00
Erich
Hi Jürgen,
Vorsicht - dein Code tut mehr als du beschrieben hast.
Er wird mit der Mustertabelle kopiert, steht dann x-fach in der Mappe läuft auch in jeder Kopie.
Er rennt nicht nur dann los, wenn sich in E4 etwas ändert, sondern bei Änderung jeder Zelle.
Wenn in E4 der Neme eines nichtletzten Blatts geschrieben wird, greift die Prüfung
If Sheets(Sheets.Count).Name <> Range("E4").Value Then
nicht und es gibt einen Laufzeitfehler.
In E4 kann eine Zahl stehen. Das gibt dann auch Ärger.
Mein Vorschlag:

'Code in "DieseArbeitsmappe"
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lngI As Long
If Sh.Name  "Muster" Then Exit Sub
If Target.Address  "$E$4" Then Exit Sub
If Len(Target)  "" Then
For lngI = 1 To Sheets.Count
If Sheets(lngI).Name = "" & Target Then
MsgBox "Das Blatt " & Target & " gibt es schon!"
Exit Sub
End If
Next lngI
Sheets("Muster").Copy After:=Sheets(lngI - 1)
ActiveSheet.Name = Target
End If
End Sub

Hier könnte/sollte/müsste man noch prüfen, ob E4.Value ein gültiger Blattname ist.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
Warum ich heute Nachte Sheets("Vorlage") ...
16.08.2008 09:43:00
Backowe
Hi Erich,
... durch Activesheet ersetzt habe, entzieht sich meiner Kenntnis. ;)
Gruß Jürgen

Noch eine Frage zu Tabellenblättern
17.08.2008 15:53:00
oblivion
Hallo @ Erich. Ich habe deinen Code gerade ausprobiert. Scheint alles so zu klappen. Aber ich habe noch eine Frage zu deinem Code. Ich habe eine Excel-Datei. Ich werde sie mal hochladen.
Nun zu meiner Frage. In diese Excel-Datei habe ich auf Blatt "Gesamt" in der Spalte ab L2 verschiedene Ärzte aufgelistet. Als ich die Orginaldatei erstellt hatte, habe ich schon 10 Ärzte gehabt. Kann man deinen Code so anpassen, dass er statt die Zelle E4 im Blatt Muster (eigentlich D7) nutzt, sondern immer wenn ich im Blatt "Gesamt" in Zeile L einen neuen Arzt reinschreibe mir dann ein neues Tabellenblatt mit dem entsprechenden Namen schreibt und gleichzeitig den Namen in die Zeile D7 setzt? Danke für deine Hilfe.
Gruß Oblivion

Anzeige
AW: Noch eine Frage zu Tabellenblättern
17.08.2008 17:11:00
oblivion
Frage noch offen
Gruß Oblivion

AW: Tabellenblätter anlegen
17.08.2008 20:38:34
Erich
Hallo Oblivion,
da das Ereignis "neuer Arzt" jetzt in "Gesamt" auftritt, habe ich die Prozeduren "Workbook_SheetChange"
in Blatt "Muster" (da gehörte sie eh nicht hin) und in "DieseArbeitsmappe" gelöscht.
In "Worksheet_Change" von "Gesamt" habe ich ein "ArztAnlegen" eingebaut. Ich hoffe, dass es so funzt.
Auf den ersten Blick nicht verstanden habe ich, wofür in dieser Prozedur Selection.Count abgefragt wird.
Ist das sinnvoll? Ich habe eine Zeile davor mal eine neue Zeile mit der Anweisung
MsgBox Selection.Address
eingefügt. Da siehst du, was Selection gerade ist.
Die Zeilen mit EnableEvents = True und ScreenUpdating = True habe ich ich ein "AnzeigeAn" ausgelagert -
ich bin prinzipiell faul und versuche, Code nur einmal hinzuschreiben.
Und hier die Mappe: https://www.herber.de/bbs/user/54684.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Tabellenblätter anlegen
17.08.2008 21:18:00
oblivion
hi, ich glaube es funktioniert so wie ich das mir vorgestellt habe. ich werde es noch in einem langzeit test ausführlich unter die lupe nehmen aber auf den ersten blick klappt alles. Was das selection macht, weiß ich auch nicht so genau. hab den code nicht selber geschrieben. hab ihn von einem anderen user aus diesem Forum bekommen. Danke nochmal für deine Hilfe.
Gruß oblivion

AW: Tabellenblätter anlegen
20.08.2008 17:54:00
Tino
Hallo,
bin grade mal dabei die Beiträge durchzulesen.
Das Selection.Count wird benötigt, da es vorkommen kann dass nicht nur eine Zelle bearbeitet wird
sondern z. Bsp. durch ziehen mehrere Daten auf einmal eigetragen werden, dann kommt man mit Target allein nicht weit.
Gruß Tino

Anzeige
AW: @Tino
20.08.2008 19:20:00
Erich
Hi Tino,
anstelle von Selection.Count könnte man besser Target.Count prüfen, muss man aber gar nicht.
Die Verarbeitung von ein- und die von mehrzelligen Änderungen braucht man nicht getrennt zu programmieren.
Nebenbei: Wenn für C=1 das zutrifft:
Intersect(Selection(C), Range("E5:G56", "B5:B56")) Is Nothing Then Exit Sub
dann wird der Rest der Selection überhaupt nicht mehr geprüft.
IMHO kann man den bisherigen Codeteil austauschen durch einen erheblich kürzeren.
(Oben muss dafür noch "rngZ As Range" deklariert werden.):

' bisher:
On Error GoTo Fehler:
MsgBox Selection.Address
If Selection.Count > 1 Then
For C = 1 To Selection.Count
If Intersect(Selection(C), Range("E5:G56", "B5:B56")) Is Nothing Then _
Exit Sub
AnzeigeAn
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(Selection(C).Row - 1, B - 1) = _
Cells(Selection(C).Row, 2).Value
Else
Tabelle2.Cells(Selection(C).Row - 1, B + A).Value = _
Cells(Selection(C).Row, 3 + A).Value
End If
End If
Next A
Next C
Else
If Intersect(Target, Range("E5:G56", "B5:B56")) Is Nothing Then Exit Sub
AnzeigeAn
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(Target.Row - 1, B - 1) = Cells(Target.Row, 2).Value
Else
Debug.Print Cells(Target.Row, 3 + A)
Tabelle2.Cells(Target.Row - 1, B + A).Value = _
Cells(Target.Row, 3 + A).Value
End If
End If
Next A
End If
Fehler:
' neu:
On Error GoTo Fehler:
If Intersect(Target, Range("E5:G56", "B5:B56")) Is Nothing Then Exit Sub
B = Tabelle2.Rows(2).Find(What:=Range("B3"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Column - 2
AnzeigeAn
For Each rngZ In Intersect(Target, Range("E5:G56", "B5:B56"))
For A = 0 To 5
If A  3 Then
If A = 5 Then
Tabelle2.Cells(rngZ.Row - 1, B - 1) = Cells(rngZ.Row, 2).Value
Else
Debug.Print Cells(rngZ.Row, 3 + A)
Tabelle2.Cells(rngZ.Row - 1, B + A).Value = _
Cells(rngZ.Row, 3 + A).Value
End If
End If
Next A
Next rngZ
Fehler:

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: @Tino
20.08.2008 20:07:00
Tino
Hallo,
hast recht. super
Gruß Tino

18 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige