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

Verknüpfte Tabellenblätter einblenden

Verknüpfte Tabellenblätter einblenden
19.03.2009 11:21:13
archie
Hallo erst mal!
Also, meine Freunde nennen mich Archie ... und bin dafür bekannt, dass ich gleich auf den Punkt komme.
Zu allererst aber ein DICKES LOB an alle hier beteiligten - super Site, hat mir schon sehr oft geholfen!
MEIN PROBLEM:
habe ein Monsterfile im Excel gebastelt, welches jede Menge Datenblätter beinhaltet - um genau zu sein 430 Tabellenblätter. Damit das ganze aber übersichtlich bleibt, habe ich mit einfachen Buttons ein Menü gebastelt mit dem der Benutzer nur das bekommt, was er auch will.
Jetzt ist lediglich das eine kleine Problem, dass wenn der Benutzer schnell mal sich das ganze Tabellenblatt ansehen will, wer sich durch die Menüs klicken muss.
ICH WILL:
Dass der Benutzer mit einer Tastenkombination (zB. Strg+F) aus der gerade markierten Zelle, die darin verformelten Tabellenblätter eingeblendet bekommt.
BEISPIEL:
INPUT:
in Tabelle1 ist in der Zelle 1A die Formel = Tabelle2(3C) + Tabelle3(2B)
OUTPUT:
mit obiger Tastenkombination soll er mir genau die zwei Tabellenblätter, also Tabelle2 und Tabelle3 einblenden.
Was haltet ihr von diesem Vorhaben? In diesem Wulst an Informationen ist es echt wichtig einen Überblick zu bewahren.
Danke für Eure Unterstützung!!!!
Euer Archie!

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verknüpfte Tabellenblätter einblenden
19.03.2009 11:55:29
Oberschlumpf
Hallo mein Freund Archie ;-)
Was hältst du von dieser Idee?
1. Erstelle mit dem Recorder ein Makro, und weise dem Makro eine Tastenkombination zu
2. Wenn ein Benutzer nun durch dein Menü ein Tabellenblatt angezeigt bekommt, eine Zelle auswählt, und durch die Tastenkombi das von dir erstellte Makro startet, ...
...liest das Makro zuerst die Formel in der aktiven Zelle aus
...danach werden aus dieser Formel die Namen aller "beteiligten" Tabellenblätter "herausgelöst"
...und zu guter letzt werden dann auch die Tabellen mit den zuvor ermittelten Namen eingeblendet
3. Mit einer anderen Tastenkombi (anderes Makro) könnten diese Tabellenblätter wieder ausgeblendet werden
Das kann aber auch mit der selben Tastenkombi geschehen, mit der die Einblendung erfolgt.
Ich denke, das könnte man dann mit einer Variablen vom Typ Boolean lösen.
Ist diese Idee ein nützlicher Denkanstoß?
Ciao
Thorsten
Anzeige
AW: Verknüpfte Tabellenblätter einblenden
19.03.2009 12:44:23
archie
Hallo Thorsten!
Danke vorab mal für Deine Antwort.
Hmmm...
Ich habe gerade eben nur keine Ahnung wie Du das meinst.
Ich habe die Tabellenblätter alle irgendwie miteinander verknüpft. Und in sehr vielen Zellen wird berechnet und auf die verschiedensten Tabellenblätter verwiesen.
Der Recorder nimmt mir aber doch immer nur genau diese Schritte auf, die ich ihm auch zeige.
Natürlich kann man dem Recorder nützliche Informationen entnehmen, es ist aber, glaub ich zumindest, nicht das was ich hier benötige.
Es geht ja darum, dass ich als Informationsgehalt, aus der Formel = Tabelle2(3C) + Tabelle3(2B)
das Ergebnis die Tabelle2 und Tabelle3 bekommen möchte, da diese dann eingeblendet werden sollen.
Im gleichen Tabellenblatt kann aber auch eine Zelle mit der Berechnung = Tabelle11(55X) + Tabelle20(33F)
stehen aus der ich die Tabellen 11 und 20 eingeblendet haben möchte.
Aber eben nur wenn ich diese Zelle in der diese Formel steht markeirt habe und eben diese "Tastenkombination" gedrückt habe.
Any other idea?
lG, Archie
Anzeige
AW: Verknüpfte Tabellenblätter einblenden
19.03.2009 13:59:43
Jogy
Hi.
Hier mal ein Code, der die Tabellenblattnamen aus den Formeln in den übergebenen Zellen herausliest, Ist ein wenig getestet, kann aber nicht die Fehlerfreiheit garantieren. Probier es mal aus, damit sollte der Rest beim Level "VBA gut" keine Problem mehr sein.
Damit es funktioniert brauchst Du einen Verweis auf Microsoft VBScript Regular Expressions. Wenn Du den nicht haben willst, dann einfach die Variablentypen bei regEx, myMatches sowie myMatch entfernen (oder as Object) und ganz am Anfang (nach den Deklarationen) dann noch Set regEx = CreateObject("Vbscript.Regexp") in den Code schreiben.

' Liest die Namen der Tabellenblätter aus einer Formel heraus
' Rückgabewert ist Array mit den Tabellenblattnamen von 1 bis ...
' Ist Obergrenze des Arrays 0, dann wurde nichts gefunden
' Sollte mit allen Namen gehen
' ggf. müssen mögliche Zeichen, die nicht zu ' um den Namen führen, noch
' in regex.pattern ergänzt werden
' externe Verweise werden ignoriert
Function getVerweise(myRange As Range) As String()
Dim regEx As New RegExp
Dim myMatches As MatchCollection
Dim myMatch As Match
Dim tempFormel() As String
Dim tableNames() As String
Dim i As Long
Dim startPos As Long
Dim tempName As String
Dim checkName
Dim douBlette As Boolean
Dim zeLLe As Range
' Array vordimensionieren, 0 damit es nachher erkennbar ist,
' ob schon Werte geschrieben wurden
ReDim tableNames(0 To 0)
' Groß/Klein egal
regEx.IgnoreCase = True
' Suchmuster: ^ bedeutet "alles außer"
regEx.Pattern = "[^0-9a-z_]"
For Each zeLLe In myRange
' Wenn Formel vorhanden und ! (sonst kein Bezug auf anderes Blatt) in der Formel,
' dann Bearbeiten
If zeLLe.HasFormula And InStr(zeLLe.Formula, "!")  0 Then
' Nach ! aufteilen (kommt in jedem Bezug zu anderm Blatt vor)
tempFormel = Split(zeLLe.Formula, "!")
For i = 0 To UBound(tempFormel) - 1
' Wenn in Hochkommas
If Right(tempFormel(i), 1) = "'" Then
' voriges Hochkomma suchen
startPos = InStrRev(Left(tempFormel(i), Len(tempFormel(i)) - 1), "'") + 1
' Wenn nach diesem ' ein [ kommt, ist es ein externer Bezug
' also nur weiter, wenn das nicht der Fall ist
If InStr(startPos, tempFormel(i), "[") = 0 Then
tempName = Mid(tempFormel(i), startPos, Len(tempFormel(i)) - startPos)
End If
' Wenn nicht in Hochkommas
Else
' Suche mit Regexp
Set myMatches = regEx.Execute(tempFormel(i))
' Wenn was gefunden, dann die Position des letzten gefundenen Zeichens
' +2, da ab 0 gezählt wird und das erste zu verwertende Zeichen gesucht
If Not myMatches Is Nothing Then
startPos = myMatches(myMatches.Count - 1).FirstIndex + 2
' Ansonsten soll ab erstem Zeichen übertragen werden
Else
startPos = 1
End If
' Speichert Namen zwischen
tempName = Right(tempFormel(i), Len(tempFormel(i)) - startPos + 1)
End If
' Wenn was in Tempname steht,
If tempName  "" Then
' Auf Doubletten testen
douBlette = False
For Each checkName In tableNames
If checkName = tempName Then
douBlette = True
Exit For
End If
Next
' und wenn es keine ist, Array vergrößern und Wert übergeben
If Not douBlette Then
If UBound(tableNames) = 0 Then
ReDim tableNames(1 To 1)
Else
ReDim Preserve tableNames(1 To UBound(tableNames) + 1)
End If
tableNames(UBound(tableNames)) = tempName
End If
End If
tempName = ""
Set myMatches = Nothing
Next
End If
Next
' Rückgabewert
getVerweise = tableNames
End Function


Gruss, Jogy

Anzeige
AW: Verknüpfte Tabellenblätter einblenden
19.03.2009 14:09:33
Archie
Wow!
Bin begeistert... Also, wenn ich mir das von der Ferne so betrachte, dann würde ich sagen, damit klappts. Ich werd mich mal reinlesen, es sollte damit aber machbar sein.
Wenn ich hierzu noch Fragen habe, komme ich wieder auf Dich zu!
VIELEN, VIELEN Dank!
PS: Dass das so rasch ging - Hut ab! DANKE!
AW: Verknüpfte Tabellenblätter einblenden
20.03.2009 20:47:25
Jogy
Hi.
Mir ist noch ein Fehler aufgefallen: Wenn in der Formel ein ! in Anführungszeichen steht, dann liest es falsch aus.
Korrektur:

' Liest die Namen der Tabellenblätter aus einer Formel heraus
' Rückgabewert ist Array mit den Tabellenblattnamen von 1 bis ...
' Ist Obergrenze des Arrays 0, dann wurde nichts gefunden
' Sollte mit allen Namen gehen
' ggf. müssen mögliche Zeichen, die nicht zu ' um den Namen führen, noch
' in regex.pattern ergänzt werden
' externe Verweise werden ignoriert
Function getVerweise(myRange As Range) As String()
Dim regEx As New RegExp
Dim myMatches As MatchCollection
Dim myMatch As Match
Dim tempFormel() As String
Dim tableNames() As String
Dim tempString As String
Dim i As Long
Dim startPos As Long
Dim tempName As String
Dim checkName
Dim douBlette As Boolean
Dim zeLLe As Range
' Array vordimensionieren, 0 damit es nachher erkennbar ist,
' ob schon Werte geschrieben wurden
ReDim tableNames(0 To 0)
' Groß/Klein egal
regEx.IgnoreCase = True
' Suchmuster: ^ bedeutet "alles außer"
regEx.Pattern = "[^0-9a-zäöü_]"
' Soll den kompletten String durchsuchen
regEx.Global = True
For Each zeLLe In myRange
' Wenn Formel vorhanden und ! (sonst kein Bezug auf anderes Blatt) in der Formel,
' dann Bearbeiten
If zeLLe.HasFormula And InStr(zeLLe.Formula, "!")  0 Then
' Es könnten jetzt noch ! in "" stehen, die müssen entfernt werden
If InStr(zeLLe.Formula, """")  0 Then
tempFormel = Split(zeLLe.Formula, """")
' Jedes 2. Element (ungerade) des Datenfeldes ist zwischen "", dort ! ersetzen
For i = 1 To (UBound(tempFormel) - 1) / 2
tempFormel(2 * i - 1) = Replace(tempFormel(2 * i - 1), "!", "")
Next
' Wieder zusammensetzen
tempString = Join(tempFormel, """")
Else
tempString = zeLLe.Formula
End If
' Wenn kein ! mehr vorhanden, dann muss nichts gemacht werden
If InStr(tempString, "!")  0 Then
' Nach ! aufteilen (kommt in jedem Bezug zu anderm Blatt vor)
tempFormel = Split(tempString, "!")
For i = 0 To UBound(tempFormel) - 1
' Wenn in Hochkommas
If Right(tempFormel(i), 1) = "'" Then
' voriges Hochkomma suchen
startPos = InStrRev(Left(tempFormel(i), Len(tempFormel(i)) - 1), "'") +  _
1
' Wenn nach diesem ' ein [ kommt, ist es ein externer Bezug
' also nur weiter, wenn das nicht der Fall ist
If InStr(startPos, tempFormel(i), "[") = 0 Then
tempName = Mid(tempFormel(i), startPos, Len(tempFormel(i)) -  _
startPos)
End If
' Wenn nicht in Hochkommas
Else
' Suche mit Regexp
Set myMatches = regEx.Execute(tempFormel(i))
'                        regEx.Pattern = "[^0-9a-zäöü_]"
'                        Set myMatches = regEx.Execute("äcc#ddd#ddd#")
' Wenn was gefunden, dann die Position des letzten gefundenen Zeichens
' +2, da ab 0 gezählt wird und das erste zu verwertende Zeichen gesucht
If Not myMatches Is Nothing Then
startPos = myMatches(myMatches.Count - 1).FirstIndex + 2
' Ansonsten soll ab erstem Zeichen übertragen werden
Else
startPos = 1
End If
' Speichert Namen zwischen
tempName = Right(tempFormel(i), Len(tempFormel(i)) - startPos + 1)
End If
' Wenn was in Tempname steht,
If tempName  "" Then
' Auf Doubletten testen
douBlette = False
For Each checkName In tableNames
If checkName = tempName Then
douBlette = True
Exit For
End If
Next
' und wenn es keine ist, Array vergrößern und Wert übergeben
If Not douBlette Then
If UBound(tableNames) = 0 Then
ReDim tableNames(1 To 1)
Else
ReDim Preserve tableNames(1 To UBound(tableNames) + 1)
End If
tableNames(UBound(tableNames)) = tempName
End If
End If
tempName = ""
Set myMatches = Nothing
Next
End If
End If
Next
' Rückgabewert
getVerweise = tableNames
End Function

Gruss, Jogy

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige