Wenn bestimmte Zelle leer, dann die komplette Zeile ausblenden (VBA)
#1
Hallo zusammen,

ich habe ein Tabellenblatt in dem in bestimmten Zellen mit Doppelklick ein "X" gesetzt und wieder entfernt werden kann,
über einen Button "Ausblenden" möchte ich anschließend alle Zeilen in denen die bestimmten Zellen nicht mit "X" markiert sind, also "" sind ausblenden.

Danach würde ich gerne noch einen Button erstellen, der diesen Schritt wieder rückgängig machen kann.

Bisher habe ich mir folgenden Code zusammengeschustert, der allerdings nicht funktioniert:


Code:
Private Sub Ausblenden(ByVal Target As Range)

If (Target, Union(Range("B18,B301,B313,B325,B371,B380,B470,B475"), _
Range("C20,C58,C66,C93,C167,C211,C233,C257,C327,C349,C382,C384,C386,C422,C438,C450,C458,C472,C477,C491"), _
Range("D95,D145,D153,D159,D303,D305,D307,D309,D311,D315,D317,D319,D321,D323,D331,D336,D339,D343,D351,D367,D369"), _
Range("F22,F36,F42,F48,F50,F54,F60,F64,F68,F70,F72,F74,F76,F78,F80,F82,F84,F97,F99,F101,F103,F105,F107,F109,F111,F115,F119,F123,F127,F129,F131,F133,F135,F137,F139,F141,F143,F147,F149,F151,F155,F157,F161,F163,F165,F169,F181,F185,F197,F213,F223,F229,F235,F249,F253"), _
Range("F259,F269,F285,F329,F345,F347,F353,F355,F357,F361,F365,F388,F418,F420,F424,F426,F428,F430,F434,F436,F440,F442,F444,F446,F448,F452,F454,F456,F460,F462,F464,F466,F468,F480,F482,F485,F489"), _
Range("H24,H26,H28,H30,H32,H34,H38,H40,H44,H46,H52,H62,H87,H89,H91,H113,H117,H121,H125,H171,H173,H175,H177,H179,H183,H187,H189,H191,H193,H195,H199,H201,H203,H205,H207,H209,H215,H217,H219,H221,H225,H227,H231,H237,H239,H241,H243,H245,H247,H251,H255,H261,H263,H265"), _
Range("H267,H271,H273,H275,H277,H279,H281,H283,H287,H289,H291,H293,H295,H297,H299,H390,H392,H394,H396,H398,H400,H402,H404,H406,H408,H410,H412,H414,H416,H432"))) ="" Then
                             
EntireRow.Hidden = True

End Sub


Oben sind die Zellen angegeben in denen ein "X" stehen kann oder nicht.
Wie passe ich meinen Code richtig an?

Über eine Erklärung würde ich mich freuen, da ich noch nicht so versiert in VBA bin.   Huh

Vielen Dank euch schonmal!

LG MrHoef
Antwortento top
#2
Hallo,

es ist wie bei Formeln auch, die Formalitäten müssen eingehalten werden!

Es gibt bestimmte festgelegte Makro-Namen, die genau festgelegte Abläufe beinhalten. Bei Dir wäre das entweder das Worksheet_BeforeDoubleclick oder besser noch

Worksheet_Change, das reagiert auf einfaches X:


Code:
Private Sub worksheet_change(ByVal Target As Range)

If Intersect(Target, Union(Range("B18,B301,B313,B325,B371,B380,B470,B475"), Range("C20,C58,C66,C93,C167,C211,C233,C257,C327,C349,C382,C384,C386,C422,C438,C450,C458,C472,C477,C491"), _
Range("D95,D145,D153,D159,D303,D305,D307,D309,D311,D315,D317,D319,D321,D323,D331,D336,D339,D343,D351,D367,D369"), Range("F22,F36,F42,F48,F50,F54,F60,F64,F68,F70,F72,F74,F76,F78,F80,F82,F84,F97,F99,F101,F103,F105,F107,F109,F111,F115,F119,F123,F127,F129,F131,F133,F135,F137,F139,F141,F143,F147,F149,F151,F155,F157,F161,F163,F165,F169,F181,F185,F197,F213,F223,F229,F235,F249,F253"), _
Range("F259,F269,F285,F329,F345,F347,F353,F355,F357,F361,F365,F388,F418,F420,F424,F426,F428,F430,F434,F436,F440,F442,F444,F446,F448,F452,F454,F456,F460,F462,F464,F466,F468,F480,F482,F485,F489"), _
Range("H24,H26,H28,H30,H32,H34,H38,H40,H44,H46,H52,H62,H87,H89,H91,H113,H117,H121,H125,H171,H173,H175,H177,H179,H183,H187,H189,H191,H193,H195,H199,H201,H203,H205,H207,H209,H215,H217,H219,H221,H225,H227,H231,H237,H239,H241,H243,H245,H247,H251,H255,H261,H263,H265"), _
Range("H267,H271,H273,H275,H277,H279,H281,H283,H287,H289,H291,H293,H295,H297,H299,H390,H392,H394,H396,H398,H400,H402,H404,H406,H408,H410,H412,H414,H416,H432"))) Is Nothing Then exit sub

If Target="" then Target.entirerow.hidden=true
End Sub
Außerdem muß man dem Makro auch sagen, was es prüfen soll. Hier wird mit intersect festgestellt, ob die Target-Adresse mit einer Deiner Zellen zusammenpasst. Mit der vorletzten Zeile wird ausgeblendet. Nach welchen Kriterien willst Du dann wieder einblenden?????
Gruß
Opa Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antwortento top
#3
Hallo und danke schon mal für deine Hilfe,

habe mal ein Bild angehängt.

   

Das ich die Zellen mit "X"markieren kann und das dadurch spezielle Zeilen ein- bzw. ausgeblendet werden sollen habe ich schon realisiert.
Jetzt sollen praktisch am Ende noch alle übrigen Zellen und die dazugehörige Zeile, die nicht mit "X" markiert sind durch Klick auf einen Button ausgeblendet werden.
Im Beispiel: Zeile 24, 28, 30, 32, 34, 36, 42, 48 etc.

Kriterium zum ein- bzw. ausblenden ist entweder ein "X" in der Zelle oder "" (leer)



Kann deinen Code auch leider mit keiner Schaltfläche verknüpfen, da dieser Code bei mir im Modul 1 stehen soll und beim "Makro zuweisen" nicht gefunden wird.


Das Einblenden soll durch eine Weitere Schaltfläche "Einblenden" realisiert werden bzw. die vorherige "Ausblenden"-Prozedur soll dadurch nur rückgängig gemacht werden.


Hoffe das hilft dir weiter. Huh

LG
Antwortento top
#4
Hi,

(02.06.2016, 11:59)MrHoef schrieb: Kann deinen Code auch leider mit keiner Schaltfläche verknüpfen, da dieser Code bei mir im Modul 1 stehen soll und beim "Makro zuweisen" nicht gefunden wird.

der Code kann auch nicht gefunden werden, weil er erstens ein "Private" Sub ist und außerdem heißt das Makro Worksheet und das wiederum heißt übersetzt Tabellenblatt.
Dieses Makro gehört also nicht in ein allgemeines Modul, sondern hinter das Tabellenblatt, in dem es arbeiten soll.

Und hier findest Du eine Erklärung dazu.
Und lies vor allem auch das.
Antwortento top
#5
Hallo,

Bilder helfen gar nicht. der aktuelle Code reagiert auf die Eingabe von X! Wenn Du das über eine Schaltfläche machen willst, dann nützt der Code überhaupt nicht, da muß dann was ganz anderes her. Das mit der "vorherigen Aktion rückgängig machen" wird wohl ein sehr schwieriges Unterfangen!
Gruß
Opa Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antwortento top
#6
Hallo nochmal ihr beiden und Danke für eure Hilfe,


habe euch die Datei als Beispiel angehängt, hoffe das hilft besser weiter mich zu verstehen.
Durch Doppelklick können die Menüs ein- bzw. ausgeklappt werden.

Ist es nicht irgendwie möglich, dass anschließende nachträgliche Ausblenden über einen Button zu realisieren?
Es soll wirklich nur das im Bericht angezeigt werden was auch inhaltlich dabei (mit X angeklickt) ist.

Ungefähr so:
Button Ausblenden:
Wenn zB. F22 = "", Dann Zeile 22 ausblenden

Button Einblenden:
Wenn zb. F22 = "", Dann Zeile 22 wieder einblenden



@ Rabe:

habe verstanden, dass ich den gleichen Code aus dem Worksheet nicht in einem Modul verwenden kann, aber wie muss ich ihn dann anpassen?
War mir jetzt aus den beiden links nicht ersichtlich...

Liebe Grüße
Sebbi


Angehängte Dateien
.xlsm   Bericht_Spezifikation_Dienstleistungen_Test.xlsm (Größe: 159,93 KB / Downloads: 4)
Antwortento top
#7
Hi,

(02.06.2016, 11:59)MrHoef schrieb: Kriterium zum ein- bzw. ausblenden ist entweder ein "X" in der Zelle oder "" (leer)

wenn die Zeile ausgeblendet ist, woher soll Excel wissen, welche wieder eingeblendet werden soll? Du willst ja sicher nicht alle ausgeblendeten wieder einblenden.
Es steht ja dann in der Target-Zelle kein X (sonst wäre sie ja eingeblendet), aber bei ausgeblendeter Zeile kannst Du die Target-Zelle nicht anklicken, um die einzublendende Zeile zu definieren.
Antwortento top
#8
Hallo Edgar,

Zitat:Das mit der "vorherigen Aktion rückgängig machen" wird wohl ein sehr schwieriges Unterfangen!

kann ich mir nicht vorstellen, daß das schwierig werden soll. Der TE will ja keine Werteänderungen oder
sowas zurückholen, sondern nur ausgeblendete Zeilen wieder einblenden und eventuell die "x"e entfernen.
So jedenfalls habe ich das verstanden. Wenn der TE was anderes will, muß er jedenfalls mich erst mal erleuchten.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

?mage
Antwortento top
#9
Hi Rabe,

verstehe deinen Einwand, dann würden ja wieder alle bereits ausgeblendeten, eingeblendet werden...logisch 16
vergessen wir das einblenden - wäre es möglich wenigstens den "Ausblenden"-Button so zu realisieren? 

Oder alternativ durch Button-Klick ein neues Tabellenblatt erstellen und alle Zellen + Zeile die leer sind NICHT in dieses kopieren, den Rest aber schon!? Confused 

Liebe Grüße
Antwortento top
#10
Hallo,

Zitat:wäre es möglich wenigstens den "Ausblenden"-Button so zu realisieren?

da braucht man keine zwei Buttons. Man benutzt einen als Umschalter
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

?mage
Antwortento top


Gehe zu:


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