Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
648to652
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
648to652
648to652
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Tabellenname referenzieren

Tabellenname referenzieren
08.08.2005 19:48:17
Sonnenschein
Problem:
Wie kann man am geschicktesten den Tabellenblattnamen in einer Zelle des Tabellenblatts darstellen? (Update des Wertes sollte automatisch stattfinden sobald der Tabellenblattname geändert wird).
Genau daran krankt mein Versuch mit einer selbstgeschriebenen Funktion welche ich von einer Zelle aus aufrufe.

Function BlattName()
BlattName = ActiveSheet.Name
End Function

Der umgekehrte Weg: Ich gebe einen Namen in eine Zelle ein und dadurch ändert sich der Blattname, wäre auch interessant. Was wäre hierfür das geschickteste Event?

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenname referenzieren
08.08.2005 19:59:00
PeterW
Hallo (Realnamen sind hier gern gesehen),

Function BlattName()
Application.Volatile
BlattName = ActiveSheet.Name
End Function

Gruß
Peter
AW: Tabellenname referenzieren
08.08.2005 20:02:55
K.Rola
Hallo,
das ist nicht ganz korrekt. Was zeigt die Funktion, wenn ein anderes Blatt aktiv ist?
Gruß K.Rola
AW: Tabellenname referenzieren
08.08.2005 20:12:41
PeterW
Hallo K.Rola,
ähmm, erwischt. Zwar würde es gehen, das Blatt über dessen Index in der Funktion zu referenzieren aber dann macht die Funktion wenig Sinn. Ich werde in mich (und die Hilfe) gehen.
Danke und Gruß
Peter
AW: Tabellenname referenzieren
08.08.2005 20:14:54
K.Rola
Hallo,
Stichworte: Application.Caller und Parent
Gruß K.Rola
Anzeige
AW: Tabellenname referenzieren
08.08.2005 21:01:19
PeterW
Hallo K.Rola,
zumindest weiß ich jetzt, wo ich suchen muss. Verschiebe das auf eine hoffentlich ruhige Stunde morgen. :-)
Nochmals Danke für die Ausrichtung der Nase in die richtige Richtung und Gruß
Peter
AW: Tabellenname referenzieren
09.08.2005 05:36:40
Stephan
Das ist mein Realname. Hatte nur meinen Vornamen vergessen - sorry bin noch nicht geübt auf dem Forum.
Vielen Dank für die Hilfe
AW: Tabellenname referenzieren
08.08.2005 21:15:02
Matthias
Hallo Sonnenschein,

Function Blattname()
Application.Volatile
Blattname = Application.Caller.Worksheet.Name
End Function

umgekehrt (ins Tabellenblattmodul:)

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
On Error Resume Next
Me.Name = Range("A1").Value
If Err.Number > 0 Then
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
Err.Clear
End If
End If
End Sub

Gruß Matthias
Anzeige
AW: Tabellenname referenzieren
09.08.2005 00:54:09
Leo
Hi,
na ja, so gehts natürlich.
Mir fallen auf Anhieb 4 mögliche Fehler ein und bei jedem weiß der user nicht, was falsch war. Meine user würden sich bei mir beklagen.
mfg Leo
AW: Tabellenname referenzieren
09.08.2005 00:59:01
Matthias
Hallo Leo,
na dann leg mal los. Ich lerne gerne dazu!
Gruß Matthias
AW: Tabellenname referenzieren
09.08.2005 01:09:16
Leo
Hi,
Der Aufwand ist naturgemäß etwas höher, dafür aber benutzerfreundlicher:
Option Explicit
Const F1 As String = "Maximal 32 Zeichen möglich! "
Const F2 As String = "Folgende Zeichen sind nicht zulässig: ? : / \ * [ ] "
Const F3 As String = "Die Zelle darf nicht leer sein! "
Const F4 As String = "Der Name ist in der Mappe schon vorhanden! "

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i, sh As Object
If Target.Address = "$A$1" Then
For Each sh In Sheets
If sh.Name = [a1] Then
Call Meldung(F4)
Exit Sub
End If
Next
If Len([a1]) > 32 Then
Call Meldung(F1)
Exit Sub
End If
For Each i In Array("?", ":", "/", "\", "*", "[", "]")
If InStr([a1], i) > 0 Then
Call Meldung(F2)
Exit Sub
End If
Next
If Len([a1]) = 0 Then
Call Meldung(F3)
Exit Sub
End If
Me.Name = [a1]
End If
End Sub

Sub Meldung(m As String)
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
MsgBox m, 64, "Hinweis..."
End Sub
mfg Leo
Anzeige
AW: Tabellenname referenzieren
09.08.2005 01:14:28
Matthias
Hallo Leo,
achso, du meinst Fehler in Tabellennamen...
Naja, DEN Aufwand wollte ich mir da nun wirklich nicht machen ;-)
Ich hab's ja nicht für Anwender geschrieben, sondern für einen Fragesteller.
Ich dachte, du meintest 4 grundsätzliche Fehler im Code.
Du hast mich schon verunsichert...
Gruß Matthias
AW: Tabellenname referenzieren
09.08.2005 01:14:33
Matthias
Hallo Leo,
achso, du meinst Fehler in Tabellennamen...
Naja, DEN Aufwand wollte ich mir da nun wirklich nicht machen ;-)
Ich hab's ja nicht für Anwender geschrieben, sondern für einen Fragesteller.
Ich dachte, du meintest 4 grundsätzliche Fehler im Code.
Du hast mich schon verunsichert...
Gruß Matthias
Anzeige
AW: Tabellenname referenzieren
09.08.2005 01:17:04
Leo
Hi,
vier Fehler in einem solch kurzen Code sind bei deiner Klasse nicht möglich, oder?
mfg Leo
AW: Tabellenname referenzieren
09.08.2005 01:20:25
Matthias
Hallo Leo,
deshalb war ich ja so verunsichert... ;-)
Gruß Matthias
AW: Tabellenname referenzieren
09.08.2005 01:24:39
Leo
Hi,
das Thema Fehlerbehandlung hatten wir ja schon mal.
mfg Leo
AW: Tabellenname referenzieren
09.08.2005 01:30:15
Matthias
Hi Leo,
stimmt, ich geb' zu, ich bin rückfällig geworden.
Dieses "Unterbrechen bei jedem Fehler" ist aber auch eine Option, die doch kein Mensch aktiviert, der nicht weiß, was er tut - z.B. zum Debuggen von Code, wie ich ihn schreibe.
*g*
Also jetzt muss ich ins Bett, morgen wieder die Kinder...
Gute Nacht,
Matthias
Anzeige
AW: Tabellenname referenzieren
09.08.2005 05:39:54
Stephan
Vielen Dank für die Hilfe! Ich glaube die Volatile Funktion war die Hauptantwort. Bei der Fehlerbehandlung bin ich nicht sicher ob der User nicht automatisch durch Excel vor der Falscheingabe geschützt wird.
AW: Tabellenname referenzieren
09.08.2005 08:08:48
Matthias
Hallo Stephan,
wird er, aber der Grund bleibt ihm durch meinen Code verborgen.
Hier wäre eine etwas kürzere Variante als die von Leo:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
If Range("A1").Value = "" Then
MsgBox "Blattname darf nicht leer sein!", vbExclamation, "Fehler"
Exit Sub
End If
On Error Resume Next
Me.Name = Range("A1").Value
If Err.Number > 0 Then
MsgBox Err.Description, vbExclamation, "Fehler"
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
Err.Clear
End If
End If
End Sub

Gruß Matthias
Anzeige
AW: Tabellenname referenzieren
09.08.2005 19:28:41
Stephan
Hallo Matthias,
jetzt habe ich den Hintergrund verstanden. Aber was hälst du davon den Fehlertext in die Fehlerbehandlungsroutine (mit anschließendem undo) zu packen. So setzt das Programm auch bei vorher gelöschtem Inhalt immer wieder konsitent auf (Feld und Tabellenname stimmen überein) und das Feld bleibt für den User für einen Neuen versuch selektiert. Oder birgt meine Lösung andere Problem, die ich übersehe?

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
On Error Resume Next
Me.Name = Range("A1").Value
If Err.Number > 0 Then
MsgBox "Kein gültiger Blattname!", vbExclamation, "Fehler"
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
Err.Clear
End If
End If
End Sub

Den umgekehrten Weg über eine Blattfunktion:
Function Blattname()
Application.Volatile
Blattname = Application.Caller.Worksheet.Name
End Function
hätte ich eigentlich bevorzugt, da der Benutzer dann den Tabellennamen direkt am Register oder übers Menü ändern müßte, was ich konsitänter fände. Mir ist allerdings beim Debuggen aufgefallen, dass die Funktion ständig aufgerufen wird. Bei meiner Anwendung handelt es sich um ein Workbook mit sagen wir bis zu 20 gleichartigen Blättern, die diese Funktion dann benutzten würden und da ist mir dieser ständig überflüssige Funktionsaufruf bei jeder Änderung doch ein bißchen "unheimlich". Wenn ich es richtig sehe gibt es keinen Event für die Blattnamenänderung. Das wäre die richtige Stelle.
Gruß Stephan
Anzeige
AW: Tabellenname referenzieren
09.08.2005 23:50:07
Matthias
Hallo Stephan,
Dein Code ist meinem letzten ziemlich ähnlich, findest du nicht?
nee, ein Ereignis ShettName_Change() oder dergleichen gibt es leider nicht.
Gruß Matthias
AW: Tabellenname referenzieren
10.08.2005 00:03:57
Stephan
Ich habe ja deinen Code genommen und nur leicht abgeändert um den beschriebenen Undo-Effekt auch im Fall der Leer-Eingabe zu erhalten...
Vielen Dank noch einmal
Stephan
AW: Tabellenname referenzieren
10.08.2005 00:07:04
Matthias
Hallo Stephan,
Achso, ja stimmt, die Zelle wäre ja denn leer geblieben...
Gut aufgepasst - ich hab's mal wieder nur oberflächlich getestet.
Grüße,
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige