Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1628to1632
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

Bezeichnet eines Tabellenblatts auslesen

Bezeichnet eines Tabellenblatts auslesen
15.06.2018 09:10:15
Holger
Hallo,
ich habe da zwei (hoffentlich) kleine Probleme und hoffe auf eure Hilfe.
Zur Laufzeit erstelle ich mehrere Tabellenblätter, die benannt werden.
Ebenfalls zur Laufzeit schreibe ich Code in den VBA Editor dieser Tabellenblätter. Das klappt auch, wenngleich ich auch schon hier eine "Index außerhalb des gültigen Bereichs" Meldung erhalte, die seltsamerweise problemlos durchläuft, wenn ich die Ausführung des Codes dann fortsetze. Und das wäre Problem 1:
Mein Programm läuft etwa so:
ErstelleTabellenblatt
FülleBlattMitDaten
AddCodeZuTabellenblatt
Und obwohl AddCodeToTabellenblatt erst ausgeführt wird, nachdem ErstelleTabellenblatt durch ist, scheint er den eindeutigen Namen des Tabellenblatts hier noch nicht zu finden.
Aber weiter im Text:
Den Code, den ich in das neue Tabellenblatt schreibe, sieht etwa so aus:
Private Sub Worksheet_Change(ByVal Target As Range)
Worksheets("MeinTabellenblatt").Activate
Dim WSName As Object
WSName = ThisWorkbook.Sheets("MeinTabellenblatt").Name
Application.DisplayAlerts = False
Application.EnableEvents = False
If Not Intersect(Target, Range("$K$7:$K$90")) Is Nothing Then
Call WSName.MeinMakro

End If
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub

Der Code Editor läd mein Ändern einer Zelle im o.g. Bereich "Call WSName.MeinMakro", meckert aber auch an dieser Stelle:
Objektvariabel oder With Blockvariable nicht festgelegt.
Ich habe auch schon versucht, WSName als String auszulesen. Leider erhalte ich damit nur "MeinTabellenblatt" als Ergebnis und damit gibt VBA bei Call WSName.MeinMakro den Fehler "ungültiger Bezeichner" aus.
Das wäre Problem 2. Ich hoffe so sehr, dass jemand die Lösung kennt.
Viele Grüße
Holger

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bezeichnet eines Tabellenblatts auslesen
15.06.2018 09:23:38
EtoPHG
Hallo Holger,
Code at Runtime addieren ist IMHO immer eine schlechte Idee.
Warum nicht ein (verstecktes) Tabellenblatt (mit Code) kopieren? Dann wird dieses Gefummel überflüssig.
Bei VBA gut würde ich erwarten, dass die Unterschiedlichen Referenzierungsarten von Tabellenblätter, nämlich: Registerbezeichnung(Name), Index(Integer) und Klassenname(VBA), bekannt sind. Du referenzierst mit einem Klassennamen der dem Registernamen entspricht, was IMHO völliger Unsinn ist!
Gruess Hansueli
AW: Bezeichnet eines Tabellenblatts auslesen
15.06.2018 09:48:28
Holger
@Hansueli
Dass irgendwas in meinem Code "völliger Unsinn" ist, habe ich auch ohne diesen Kommentar verstanden, denn schließlich gibt es ne Fehlermeldung.
Anzeige
AW: Bezeichnet eines Tabellenblatts auslesen
15.06.2018 09:36:26
Werner
Hallo Holger,
Private Sub Worksheet_Change(ByVal Target As Range)
Dim WSName As String
WSName = ThisWorkbook.Worksheets("MeinTabellenblatt").Name
Application.DisplayAlerts = False
Application.EnableEvents = False
If Not Intersect(Target, Range("$K$7:$K$90")) Is Nothing Then
Call Worksheets(WSName).MeinMakro
End If
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
Gruß Werner
AW: Bezeichnet eines Tabellenblatts auslesen
15.06.2018 09:51:39
Holger
Hallo Werner,
erstmal vielen Dank für deine Antwort.
Ich habe meinen Code mal angepasst. Hier mal der Code, der so 1:1 in das richtige Tabellenblatt geschrieben wird.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim WSName As String
WSName = ThisWorkbook.Worksheets("Einstellungen").Name
Application.DisplayAlerts = False
Application.EnableEvents = False
If Not Intersect(Target, Range("$K$7:$K$90")) Is Nothing Then
Call Worksheets(WSName).TurnierRechnen
Call Worksheets(WSName).TippspielRechner
End If
If Not Intersect(Target, Range("$M$7:$M$90")) Is Nothing Then
Call Worksheets(WSName).TurnierRechnen
Call Worksheets(WSName).TippspielRechner
End If
If Not Intersect(Target, Range("$O$7:$MO90")) Is Nothing Then
Call Worksheets(WSName).TippspielRechner
End If
If Not Intersect(Target, Range("$Q$7:$Q$90")) Is Nothing Then
Call Worksheets(WSName).TippspielRechner
End If
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
Leider erhalte ich bei Änderungen in den entsprechenden Bereichen immer noch einen Hinweis auf die Call Aufrufe mit der Meldung: Typen unverträglich
Anzeige
AW: Bezeichnet eines Tabellenblatts auslesen
15.06.2018 09:57:35
Holger
Das angepasste Makro sieht nun so aus:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim WSName As String
WSName = ThisWorkbook.Worksheets("Einstellungen").Name
Application.DisplayAlerts = False
Application.EnableEvents = False
If Not Intersect(Target, Range("$K$7:$K$90")) Is Nothing Then
Call Worksheets(WSName).TurnierRechnen
Call Worksheets(WSName).TippspielRechner
End If
If Not Intersect(Target, Range("$M$7:$M$90")) Is Nothing Then
Call Worksheets(WSName).TurnierRechnen
Call Worksheets(WSName).TippspielRechner
End If
If Not Intersect(Target, Range("$O$7:$O90")) Is Nothing Then
Call Worksheets(WSName).TippspielRechner
End If
If Not Intersect(Target, Range("$Q$7:$Q$90")) Is Nothing Then
Call Worksheets(WSName).TippspielRechner
End If
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
Beim Ändern von Werten in den überwachten Ranges öffnet sich der Debugger mit "Typen unverträglich"
Anzeige
AW: Bezeichnet eines Tabellenblatts auslesen
15.06.2018 11:18:42
Holger
Ich habe es gelöst, indem ich alle Makros in Module gepackt habe. Auf diese Weise erspare ich mir den Aufruf über den Tabellennamen.
Danke

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige