Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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ß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten 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
Antworten 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.
Antworten 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ß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten 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)
Antworten 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.
Antworten 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!

Grüße aus Norderstedt, Peter
Antworten 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!? :s 

Liebe Grüße
Antworten 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!

Grüße aus Norderstedt, Peter
Antworten Top


Gehe zu:


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