Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
968to972
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
968to972
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Frage zu Me

Frage zu Me
12.04.2008 11:11:44
Peter
Guten Tag
Ich möchte in einem Standardmodul nachfolgenden Funktion aufrufen und diese sollte mir den Namen der Tabelle zurückgeben.
Im Moment erhalte ich eine leere MsgBox.
Was muss ich am Code ändern?
Wo muss ich Namemod als String dimensionieren?
Danke für eine Rückmeldung.
Peter

Sub xyz()
MsgBox namemod
End Sub



Function namemod()    'Code hinter Tabelle
Namemod =  Me.Name
End Sub


20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frage zu Me
12.04.2008 11:26:00
Daniel
Hi
eigentlich sollte dein Makro mit einem Fehler Abbrechen, weil eine Funktion nicht mit "End Sub" sondern mit "End Function" beendet wird.
ansonsten ist der Code lauffähig, allerdings sollte die Funtkion wie du richtig erkannt hast, als String deklariert werden, das sieht dann so aus:

Function namemod() as string


allerding kannst du ME nur im Modul einer Tabelle verwenden und nicht in einem Standardmodul, da das Standardmodul die Eigenschaft .Name nicht hat.
wenn du dir den Namen des gerade Aktiven Tabellenblatts zurückgeben lassen willst, müsste der Code so aussehen, das geht dann auch im allgemeinen Modul:
Function namemod() as string
namemod = activesheet.Name
End Function
Gruß, Daniel

Anzeige
AW: Frage zu Me
12.04.2008 11:46:31
Peter
Hallo Daniel
Danke für die Antwort. Das End Sub

kommt noch von daher, dass ich ursprünglich mit einem normalen Sub geübt habe.
Jetzt habe ich immer noch ein Problem. Ich möchte nämlich die Set-Zuweisung machen und dabei den Rückgabewert der Funktion nameMod verwenden. Da erhalte ich jedoch die Fehlermeldung "Index ausserhalb des gültigen Bereichs".
Was muss ich ändern?
Gibt es eine zusätzliche Anforderung, wenn der zurückgegebene Tabellenname auch ein Leerzeichen enthält?
Danke für eine Rückmeldung.
Peter
Set WkSh_Z = Worksheets(nameMod)


Private Function nameMod() As String   'Code hinter Tabelle
nameMod = Me.Name
End Function


Anzeige
AW: Frage zu Me
12.04.2008 11:56:05
Daniel
Hi
verstehe ich nicht, die Funktion funktioniert einwandfrei, ein ungültiger Tabellenblattname kann ja nicht zurückgebeben werden.
allerdings muss diese Funktion im Modul der Tabelle stehen, nicht in einem allgemeinen Modul
generell ist es bei Fehlern immer besser, die Datei hochzuladen, weil das Problem nicht immer nur am Code allein liegt.
allerdings ist die Funktion eigentlich überflüssig, sinniger wäre doch:
set wksh_z = activeworkbook (im allgemeinen Modul)
set wksh_z = thisworkbook (im Modul der Tabelle)
Gruß, Daniel

AW: Frage zu Me
12.04.2008 11:47:00
Nepumuk
Hallo Peter,
Prozeduren in Klassenmodulen, und eine Tabelle ist eine Klasse (Objekt), kannst du nur benutzen, wenn du den Namen der Klasse angibst. Der Kassenname einer Tabelle ist der Name im Projektexplorer, welcher vor dem Namen in Klammern steht. Also z.B. so:
Sub xyz()
    MsgBox Tabelle1.namemod
End Sub

Gruß
Nepumuk

Anzeige
AW: Frage zu Me
12.04.2008 12:09:14
Peter
Hallo zusammen
Vielen Dank für die Rückmeldungen.
Die Funktion war im Klassenmodul, die Set Anweisung in einem allgemeinen Modul.
Da gemäss Nepumuk ich die Funktion aus dem Klassenmodul immer mit der dazugehörenden Tabellenbezeichnung aufrufen müsste, komme ich auf diese Weise nicht weiter, da der Tabellenname gelegentlich ändert und ich dann den Code anpassen müsste.
Vielleicht komme ich auf anderem Wege zum Ziel: in der entsprechenden Tabelle, von der ich den jeweils gültigen Namen möchte, ist eine Zelle jeweils mit "Identifier" benannt. Kann ich eine Abfrage auf den RANGE("Identifier") machen, der mir den Tabellennamen zurückgibt? Wenn ja, wie müsste diese definiert sein und spielt es eine Rolle, ob der Tabellenname auch ein Leerzeichen enthält?
Danke für eine Rückmeldung.
Gruss, Peter

Anzeige
AW: Frage zu Me
12.04.2008 12:17:21
Nepumuk
Hallo Peter,
dann benutze doch einfach den Objektnamen der Tabelle. Damit wirst du unabhängig von deren Name auf der Exceloberfläche. Der Objektname ist, wie schon geschrieben, der Name im Projektexplorer vor dem Namen in Klammern.
Gruß
Nepumuk

AW: Frage zu Me
12.04.2008 12:35:00
Erich
Hallo Peter,
da sehe ich zwei kurze Möglichkeiten
(zu denen du vielleicht gar keine Funktion zu definieren brauchst):

Function TabNam1() As String
TabNam1 = Tabelle1.Name  ' Tabelle1 ist der Codename der Tabelle, nicht der Name
End Function
Function TabNam2() As String
TabNam2 = Range("Identifier").Parent.Name
End Function

Der Tabellenname kann sich leicht ändern.
Codenamen werden üblicherweise nicht geändert (geht nur in VBA).
Ob Leerzeichen enthalten sind, spielt keine Rolle.
Hier zum Spielen: https://www.herber.de/bbs/user/51474.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Frage zu Me
12.04.2008 12:47:23
Nepumuk
Hallo Erich,
ist doch irgendwie unsinnig den Namen eines Objektes zu benutzen, um damit das Objekt anzusprechen. Da kannst du doch gleich mit dem Objekt arbeiten.
Zur Verdeutlichung:
Public Sub Unsinn()
    Worksheets(Tabelle1.Name).Cells(1, 1).Value = "Unsinn"
End Sub

Public Sub Sinnvoll()
    Tabelle1.Cells(1, 1).Value = "Sinnvoll"
End Sub

Gruß
Nepumuk

Anzeige
AW: Tabellennamen ermitteln
12.04.2008 13:07:00
Erich
Hi Max,
klar, das sehe ich auch so.
Aber ich weiß nicht, wofür Peter den Tabellennamen so braucht...
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

AW: Tabellennamen ermitteln
12.04.2008 13:39:00
Peter
Hallo miteinander
Vielen Dank für alle Rückmeldungen.
Ich habe eingesehen, dass ich etwas will, das nicht so geht, wie ich es mir usprünglich vorgestellt habe.
Deshalb ermittle ich nun den Tabellennamen über einen benannten Zellnamen und komme so zum Ziel:
Dim tRefTo As String 'diesem String wird der Bezug von "Identifier" zugewiesen
tRefTo = Application.Names("Identifier").RefersTo
tRefTo = Mid(tRefTo, 2, InStr(tRefTo, "!") - 2)
Set WkSh_Z = Worksheets(tRefTo) ' relevante Tabelle wird zugewiesen
Freundlicher Gruss, Peter

Anzeige
AW: Tabellennamen ermitteln
12.04.2008 13:48:26
Peter
Hallo
Kleiner Nachtrag.
Wenn der Tabellenname ein Leerzeichen enthält, muss tRefTo = WorksheetFunction.Substitute(tRefTo, "'", "")
noch eingefügt werden
Dim tRefTo As String 'diesem String wird der Bezug von "Identifier" zugewiesen
tRefTo = Application.Names("Identifier").RefersTo
tRefTo = Mid(tRefTo, 2, InStr(tRefTo, "!") - 2)
tRefTo = WorksheetFunction.Substitute(tRefTo, "'", "")
Set WkSh_Z = Worksheets(tRefTo) ' relevante Tabelle wird zugewiesen
Gruss, Peter

AW: Tabellennamen ermitteln
12.04.2008 13:54:45
Reinhard
Hallo Peter,
hast du Kontrolle darüber daß kein User ein Blatt so nennt: "Ta!belle2" ?
Excel und Vba akzeptieren so einen Namen:

Sub tt()
MsgBox Worksheets("Ta!belle2").[A1]
End Sub


Gruß
Reinhard

Anzeige
AW: Tabellennamen ermitteln
12.04.2008 14:02:44
Daniel
Hi
das könnte man ja damit abfangen, daß man InstrRev anstelle von Instr verwendet.
das Ausrufezeichen zum Trennen von Tabellenblattnamen und Zellbezug muss ja auf jedenfall das letze ausrufezeichen im String sein und kann mit InstrRef sicher gefunden werden:
tRefTo = Application.Names("Identifier").RefersTo
tRefTo = Mid(tRefTo, 2, InStrRev(tRefTo, "!") - 2)
Gruß, Daniel

AW: Tabellennamen ermitteln
12.04.2008 14:05:00
Peter
Hallo miteinander
Das ist ja schon die Antwort auf meine Anschlussfrage.
Vielen Dank!
Peter

AW: Tabellennamen ermitteln
12.04.2008 14:20:00
Reinhard
Hallo Peter,
InstrRev ist ja recht einfach zu benutzen.
Eines noch dazu, wenn du deine Datei weitergibst an Fremd-PCs, Instrrev gibt es erst ab XL2000 aufwärts.
Für XL97 habe ich mir einen Ersatz gebastelt (dito für Split), den man mit bedingter Kompilierung einbinden kann.
Melde dich hier bei Bedarf.
Gruß
Reinhard

Anzeige
AW: Tabellennamen ermitteln
12.04.2008 14:27:21
Peter
Hallo Reinhard
Vielen Dank für die Rückmeldung und die Hilfe.
Die Datei wird auf verschiedenen Rechnern eingesetzt; es ist jedoch immer mindestens Excel2000 installiert.
Freundlicher Gruss, Peter

AW: Tabellennamen ermitteln
12.04.2008 14:31:26
Peter
Hallo Reinhard
Vielen Dank für die Rückmeldung und die Hilfe.
Die Datei wird auf verschiedenen Rechnern eingesetzt; es ist jedoch immer mindestens Excel2000 installiert.
Freundlicher Gruss, Peter

AW: Tabellennamen ermitteln
12.04.2008 14:03:58
Peter
Hallo Reinhard
Im konkreten Fall ist das nicht zu befürchten. Aber das hätte ich tatsächlich nicht für zulässig gehalten. Vielleicht hast du jedoch eine Idee, wie ich aus diese Unsicherheit ausschalten könnte. Kann ich auf andere Weise mit Sicherheit aus Application.Names("Identifier").RefersTo den Dateinamen auslesen?
Freundlicher Gruss, Peter

AW: Tabellennamen ermitteln
12.04.2008 17:08:54
Erich
Hi Peter,
nochmal:
Range("Identifier").Parent.Name
liefert dir den Namen des Blatts, in dem "Identifier" liegt. Ganz ohne Instr und InstrRev.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

AW: Tabellennamen ermitteln
12.04.2008 17:46:29
Peter
Hallo Erich
Ja, das hattest du ja bei Variante 2 geschrieben - und ich habe es in der Eile überlesen.
Ursprünglich hatte ich mal mit "parent" verucht, jedoch nicht realisiert, dass da noch .name hintendran muss.
Nochmals vielen Dank, Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige