Tabelle1 umbenennen in den Text welcher in A1 steht
#1
Question 
hi, eine Tabelle umenennen geht so:

    Sheets("Tabelle1").Select

    Sheets("Tabelle1").Name = "NEUERTABELLENNAME"


Jedoch möchte ich, dass die Tabelle so benannt wird, wie das was in Feld A1 steht.

So funktioniert es jedoch nicht:
    Sheets("Tabelle1").Name = "Sheets("Tabelle1").Cells(1, 1)"
Antworten Top
#2
vielleicht läßt du die Anführungsstriche weg und das Select gleich auch.
Antworten Top
#3
Sheets("Tabelle1").Name = Range("A1")
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#4
Hallo,
den..
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TN As String
    If Target = Range("A1") Then
        TN = ActiveSheet.Name
        Sheets(TN).Name = Range("A1")
    End If
End Sub
in das entsprechen Tabellenblatt und es klappt auch bei jeder weiteren Änderung in "A1"
Gruß Dirk
---------------
100  - Wenn du nicht weißt, wo du hin willst, ist es egal, welchen Weg du einschlägst.

Antworten Top
#5
Hi,

Target = Range("A1") funktioniert zwar, aber mehr oder weniger nur zufällig. Und wieso nicht Me verwenden?
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        Me.Name = Target
    End If
End Sub
Aber selbst das funktioniert nur, wenn A1 die einzige Zelle ist, die geändert wird. Besser wäre
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Me.Name = Range("A1")
    End If
End Sub
Aber auch hier funktioniert es nur bei händischer Eingabe. Wenn sich der Inhalt aufgrund einer Formel ändert, funktioniert auch dies nicht. Dann muss man die Vorgängerzellen mit überprüfen:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1").Precedents) Is Nothing Then
        Me.Name = Range("A1")
    End If
End Sub
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#6
Hallo Helmut,

jepp, stimmt.
Danke für dein "Aufzeigen"

Die vermeidlich "beste" Variante, die mich tatsächlich auch selbst interessiert hätte,
Code:
    If Not Intersect(Target, Range("A1").Precedents) Is Nothing Then
gibt mir allerdings die Fehlermeldung 1004 /Keine Zellen gefunden\  zurück.
Egal ob A1 handich oder über Code geändert wurde.

P.S. funktionier ausschließlich wenn A1 eine Formel enthält und der Inhalt sich über die Formel ändert. (Vlt ein Gedankenfehler meinerseits. Die Kombi von beidem ist es dann wohl)

Die anderen Varianten funktionieren, sind halt nur bedingt besser, bringen eben den Mehrwert nicht mit.
Gruß Dirk
---------------
100  - Wenn du nicht weißt, wo du hin willst, ist es egal, welchen Weg du einschlägst.

Antworten Top
#7
Hin Dirk,

diese Variante funktioniert nur, wenn in A1 eine Formel steht und eine der Ausgangszellen der Formel verändert wird. Ohne Formel die auf anderen Zellen basiert, führt Precedents zu einem Fehler.

Wenn A1 per Code verändert wird, dann kann man doch auch gleich im selben Code den Blattnamen ändern. Da braucht es kein Event.

Wenn in A1 wahlweise eine Formel mit anderen Zellen oder ein händischer Eintrag vorkommen sollte, dann muss man vorher prüfen, ob es sich um eine Formel handelt und entsprechend reagieren.

Oder man macht es so:
Code:
...
Dim Bereich As Range
...
Set Bereich = Range("A1")
On Error Resume Next
Set Bereich = Union(Bereich, Bereich.Precedents)
On Error Goto 0
If Not Intersect(Target, Bereich) Is Nothing Then
...

Hi Dirk,

(22.12.2022, 11:10)DIZA schrieb: Die anderen Varianten funktionieren, sind halt nur bedingt besser, bringen eben den Mehrwert nicht mit.

Das stimmt so auch nicht ganz. Mal abgesehen davon, dass die Variante
Code:
TN = ActiveSheet.Name
unnötigerweise eine Variable benötigt und einige überflüssige Zugriffe auf Excel.Objekte benötigt (die langsam sind), steckt tief versteckt eine Fehlermöglichkeit, auf die ich selbst schon mal reingefallen bin.

Ich habe damals ewig gebraucht den Fehler zu finden. Und es ist mir erst gelungen, als ich dem Anwender über die Schulter geschaut habe. Dieser Anwender hatte die Angewohnheit etwas in Zelle einzutragen und dies nicht mit Enter zu bestätigen, sondern einfach mit der Maus die nächste Eingabezelle auszuwählen. Selbst das funktioniert normalerweise. Nur wenn die nächste Eingabe auf einem anderen Blatt stattfinden sollte, dann hat er einfach direkt das nächste Blatt ausgewählt. Somit war ActiveSheet eben nicht mehr das Blatt, in dem das Event lieg, sondern ein anderes. In deinem Fall würde also das neue Blatt den Namen der Zelle A1 im alten Blatt bekommen.
Seither weiß ich, dass alles was ActiveXXX heißt, gefährlich ist. Ich zitiere mal sinngemäß einen bekannten Satz aus einem Film: "ActiveIrgendswas ist wie eine Schachtel Pralinen, man weiß nie, was man bekommt."
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
[-] Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:
  • DIZA
Antworten Top
#8
Hi,

hatte mir es jetzt so..
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Me.Name = Range("A1")
    ElseIf Not Intersect(Target, Range("A1").Precedents) Is Nothing Then
        Me.Name = Range("A1")
    End If
On Error GoTo 0
End Sub
zurecht gelegt.
Dein Weg ist sicher genau so gut.

Fazit:
Der TS sollte nun eine "häpchen geschnittene" Lösung einsetzen können und für mich ist auch noch was "abgefallen" 05
Gruß Dirk
---------------
100  - Wenn du nicht weißt, wo du hin willst, ist es egal, welchen Weg du einschlägst.

Antworten Top


Gehe zu:


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