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

bei bestimmtem Wert Tabelle ausblenden

bei bestimmtem Wert Tabelle ausblenden
Peter
Guten Tag
Ich habe in einer Datei 12 Tabellen. In jeder ist eine Zelle, benannt mit "cl_?" (also "cl_01", "cl_02", "cl_03" etc.) enthalten.
Wenn in der jeweiligen benannten Zeile in einem Sheet eine 0 steht, soll diese Tabelle ausgeblendet werden - wenn nicht, muss sie immer eingeblendet sein.
Mein Code stoppt allerdings schon bei der 1 Zeile. Was ist denn mit
If Range("cl_01").Value = 0 then falsch?
Danke für eine Antwort.
Gruss, Peter
Sub Ausblenden()
If Range("cl_01").Value = 0 Then
Sheets(Range("cl_01").Parent.Name).Visible = False
Else
Sheets(Range(cl_01).Parent.Name).Visible = True
End If
If Range("cl_02").Value = 0 Then
Sheets(Range("cl_02").Parent.Name).Visible = False
Else
Sheets(Range(cl_02).Parent.Name).Visible = True
End If
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: bei bestimmtem Wert Tabelle ausblenden
04.11.2009 10:51:09
Björn
Dass Deine Range nicht so heißt.
Range muss immer Spalte und Zeile angegeben werden, also z.B. A1 oder K12.
Du hast aber Namen vergeben, die musst du über Reference ansprechen.
Versuch es mal mit Makrorekorder.
Da steht dann auch nix von Range("c1_01") oder ähnlichem...
Gruß
Björn
AW: bei bestimmtem Wert Tabelle ausblenden
04.11.2009 11:21:47
Björn
Versuch es mal damit...
Allerdings noch nicht ganz ausgereift.
Ich weiß nicht, wie man vom Namen auf das Sheet kommt.
Über Parent lande ich beim Workbook, nicht beim Sheet.
Vielleicht kann da einer helfen.
Wie heißen denn Tabellen, könnte man die 12 vielleicht auch in ner Schleife zusammensetzen?
z.B. Tab1, Tab2, Tab3, usw
Sub ausblenden()
Dim i As Integer
Dim C As String
For i = 1 To ActiveWorkbook.Sheets.Count
If i 
Gruß
Björn
Anzeige
vergiss es...
04.11.2009 11:26:01
Björn
.. da war ich wieder zu schnell, du kannst so gar nicht so einfach auf den Value zugreifen.
Names kann ja auch mehr als eine Zelle beinhalten, deshalb funktioniert das wohl nicht.
Vergiss den Code von mir.
Die Schleife kannst Du ja vielleicht verwenden, dann musst du den Code nicht 12 mal schreiben, aber der Rest funktioniert so nicht.
Sorry.
AW: bei bestimmtem Wert Tabelle ausblenden
04.11.2009 11:25:30
Erich
Hi Peter,
"If Range("cl_01").Value = 0 then" ist nicht falsch.
Aber du hast jeweils bei "Visible=True" die Namen ohne Gänsefüße geschrieben.
Wenn du da "cl_01" statt cl_01 schreibst, sollte es funzen.
Kürzer wäre

Sub Ausblenden()
Sheets(Range("cl_01").Parent.Name).Visible = Range("cl_01").Value  0
Sheets(Range("cl_02").Parent.Name).Visible = Range("cl_02").Value  0
End Sub
Und wenn es viele Namen sind, kann man das Ganze auch in wenigen Zeilen
mit einer Schleife über die Namen erledigen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Ergänzungen
04.11.2009 11:31:49
Erich
Hi Peter,
Sheets(Range("cl_01").Parent.Name)
ist doch nichts anderes als
Range("cl_01").Parent
Damit ginge es (hofffentlich, weil ungetestet) besser - und auch noch mit Schleifchen:

Sub Ausblenden()
Range("cl_01").Parent.Visible = Range("cl_01").Value  0
Range("cl_02").Parent.Visible = Range("cl_02").Value  0
End Sub
Sub AusblendenN()
Dim ii As Integer
For ii = 1 To 2
Range("cl_" & Format(ii, "00")).Parent.Visible = _
Range("cl_" & Format(ii, "00")).Value  0
Next ii
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Ergänzungen
04.11.2009 11:42:54
Peter
Hallo Erich
Das klappt mit der Schleife, vielen Dank!
Was mir jedoch immer noch nicht klar ist: Warum der nachfolgende Code bei
"If Range("cl_01").Value = 0 Then
stoppt.
Wenn ich über die gelb hinterlegte Zeile fahre, sehe ich den Hinweis:
""Range("cl_01").Value = <Die Methode 'Range' für das Objekt '_Worksheet ist ..."
Leider kann ich damit nichts anfangen.
Gruss, Peter
If Range("cl_01").Value = 0 Then
Sheets(Range("cl_01").Parent.Name).Visible = False
Else
Sheets(Range("cl_01").Parent.Name).Visible = True
End If
Wo steht der Code?
04.11.2009 12:13:46
Erich
Hi Peter,
Steht die Prozedur "Ausblenden" im Modul eines Tabellenblatts oder in einem "normalen" Modul?
Bei Ersterem gibt es einen Fehler - denn "Range(...)" soll ja zu dem Blatt gehören, in dem der Code steht.
Steht der Code in einem normalen Modul, läuft er wohl durch.
(Die Namen müssen natürlich definiert sein und auf einzellige Bereiche verweisen.)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wo steht der Code?
04.11.2009 12:40:24
Peter
Hallo Erich
Vielen Dank, dass du dich dem Problem angenommen hast und auch für die Hinweise im späteren Thread.
Es ist tatsächlich so, dass der Code ursprünglich im Modul eines Tabellenblattes stand. Somit ist mir jetzt auch klar, dass das die Ursache des Fehlers ist und es ist ja kein Problem, den Code in ein normales Modul auszulagern.
Trotzdem noch die Frage: Gibt es eine andere Möglichkeit im Modul eines Tabellenblattes einen Range in einer Tabelle anzusprechen, ohne den Code in ein normales Modul auszulagern?
Gruss, Peter
Range in anderer Tabelle
04.11.2009 13:18:15
Erich
Hi Peter,
ein Beispiel hatten wir in dem anderen Thread heute: https://www.herber.de/forum/archiv/1112to1116/t1114386.htm#1114396
Wesentlich ist, dass man vor Range das Blatt stellen muss.
Bei benannten Bereichen ist das Blatt vielleicht (zunächst) nicht bekannt und muss ermittelt werden,
ganz grob und ungetestet etwa so:
ActiveWorkbook.Names("X_12").RefersToRange.Parent
Das sollte dann das richtige Blatt sein - musst du mal ausprobieren.
Wenn es stimmt, könnte man A1 dieses Blatts so bekommen:
ActiveWorkbook.Names("X_12").RefersToRange.Parent.Cells(1,1)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Vielen Dank!! owT
04.11.2009 13:45:39
Peter
weitere Ergänzung
04.11.2009 12:25:54
Erich
Hi,
wenn der Code jetzt in einem normalen Modul steht, gehts auch schöner mit

Sub AusblendenN()
Dim ii As Integer, strN As String
For ii = 1 To 2
strN = "cl_" & Format(ii, "00")
Range(strN).Parent.Visible = Range(strN).Value = 0
Next ii
End Sub
Eins ist natürlich auch noch wichtig: Zu jeder Zeit muss mindestens ein Blatt eingeblendet sein, sonst knallts.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
noch ein Hinweis: Option Explicit
04.11.2009 11:39:14
Erich
Hi Peter,
augenscheinlich hast du oben im Modul nicht Option Explicit stehen.
Hättest du das, würde der VBA-Compliler dich darauf hinweisen, dass die Variable cl_01 nicht deklariert ist.
Ohne die Gänsefüße muss VBA cl_01 als Variablennamen auffassen.
"cl_01" dagegen ist ein Text - hier der die Bezeichnung eines Namens.
Zusatztipp:
Wenn du in VBA im Menü Extras - Optionen, Karte "Editor"
die Option "Variablendeklaration erforderlich" aktivierst,
schreibt der VBA-Editor automatisch "Option Explicit" als erste Zeile in jedes neue Modul.
Zu Option Explicit schau auch mal z. B. hier:
http://www.online-excel.de/excel/singsel_vba.php?f=4
http://www.vbarchiv.net/faq/allg_optionexplicit.php
http://www.vb-seminar.de/vb_27.htm
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige