VBA - Zelle eines Bereiches eingeblenden, wenn wert in obere zeile eingefügt wird.
#1
Hall an alle,



brauche mal kurz hilfe mit VBA Smile



Beispiel: Datei ist eingefügt.
.xlsm   Test_Zeilen_Montage_pro_Kollege.xlsm (Größe: 25,09 KB / Downloads: 4)

Wenn Zeile A7 wert eingefügt wird, dann gleich nach A7 eine Zusatz Zeile einblenden lassen, …und wenn kein wert, soll Zeile sich ausblenden.

Alle anderen Zeilenbereiche sollen sich nicht ändern.

 

Genauso wenn ab Zeile A20 ein wert eingefügt wird soll sich nach A20 eine Zusatz Zeile einblenden lassen…und wenn kein wert, soll Zeile sich ausblenden.

Alle anderen Zeilenbereiche sollen sich nicht ändern.

 

Dasselbe wenn ab Zeile A33 ein wert eingefügt wird soll sich nach A33 eine Zusatz Zeile einblenden lassen…und wenn kein wert, soll Zeile sich ausblenden.

Alle anderen Zeilenbereiche sollen sich nichts ändern.

 Zeilenbereiche:
Bereich 1: Zeilen 5-14
Bereich 2: Zeilen 18-27
Bereich 3: Zeilen 31-40

Resume: Es soll jeweils nur eine Zelle des einen Bereiches eingeblendet werden, wenn ein wert in einer der eingeblendeten Zeilen (im selben Bereich) in A ein wert eingetragen wird.

Habe zwar ein code (aus dem Internet), der aber funktioniert für alle zeilen.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Bereich As Range, Berechnung As Long

Berechnung = Application.Calculation
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = False


Me.Unprotect ("1234")

Set Bereich = Intersect(Target, Range("A5:A43"))


If Not Bereich Is Nothing Then
     Application.EnableEvents = False
     Range("A5:A43").EntireRow.Hidden = False
      Range("A5:A43").EntireRow.AutoFit
     Range("A" & 43 + WorksheetFunction.CountA( _
     Range("A5:A43")) & ":A43").EntireRow.Hidden = True
    
End If

Me.Protect ("1234")

Application.EnableEvents = True
Application.Calculation = Berechnung
Application.ScreenUpdating = True

End Sub



Danke für jede Hilfe,

Niko 78
Antworten Top
#2
Hallöchen,

schon mal selbst was angefangen zu programmieren?

Im Code hast Du

Set Bereich = Intersect(Target, Range("A5:A43"))

Dein erster Bereich geht von Zeile 5 bis Zeile 14 --> und nicht bis 43.
Wäre also schon mal ein Ansatz.

Der Code beackert einen Bereich von Zeile 5 bis 43.
Du hast 3 Bereiche.
Wäre also eventuell der nächste Ansatz, die Aktionen 3x für die 3 Bereiche zu programmieren. Kann und sollte man sicher anders machen, aber für den Anfang ..

7, 20 und 33 liegen übrigens mitten in den Bereichen, warum also nicht z.B. 7:14 statt 5:14 ?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hallo vorab Vielen Dank für die Antwort.

Ich glaube ich habe mich richtig zu verstehen gegeben.

Diese Bereiche sollen voneinander unabhängig sein,
d.h wenn ich in der eigefügten Datei eine Zeile im Bereich zwischen 5 und 14 ein wert in einer Zeile in A Spalte eingeben,
soll es nur in diesen Bereich eine spalte einblenden.
Besser gesagt Bereich 5-14 (9 bis 14 sind hide), gebe in Zeile 8 ein wert, soll nur die 9 Zeile erscheinen.
Dasselbe gilt auch für die anderen Bereiche.
 
Selbst programmieren habe ich mir leider noch nicht beigebracht, bin ein Laie in Sachen VBA,
trotz meines Alters aber versuche ich etwas zu verstehen, obwohl es nicht immer klappt
…meistens verstehe ich es dann, wenn ich es sehen kann wie so etwas funktionieren könnte bzw. geschrieben wird in VBA.


Also jede Hilfe im Code, so dass ich mein Task bewerkstelligen kann wäre von großen Vorteil…für mich Smile.


Schalom,
Niko 78
Antworten Top
#4
Hallöchen,

das wäre mal der Ansatz für den ersten Bereich.
Voraussetzung: Die Zeilen 7 bis 14 sind ausgeblendet.
Eine Folgezeile wird auch ausgeblendet, wenn was drin steht. Schalter ist die Eingabezelle und der ist das lt. Aufgabe egal...
Wenn Zeile 15 nicht ausgeblendet werden soll, dann nur bis A13 programmieren.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
'Bereich festlegen
Set Bereich = Intersect(Target, Range("A5:A14"))
'Wenn die Eingabezelle im Bereich liegt, dann
If Not Bereich Is Nothing Then
     'Zeile nach der Eingabezelle ein-oder ausblenden, je nach Inhalt
     Target.Offset(1).EntireRow.Hidden = (Target.Value = "")
'Ende Wenn die Eingabezelle im Bereich liegt, dann
End If
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Niko
Antworten Top
#5
Jetzt hat es klick gemacht 33 …manchmal dauertest bei manchen wie ich etwas länger  Idea

Vielen Dank für den Code, hat mir echt sehr weiter geholfen nicht nur in meinem Bereich aber auch beim besseren Verständnis des Codes.

Anbei die Verlängerung für manch andere Smile


Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
'Bereich festlegen
Set Bereich = Intersect(Target, Range("A5:A14, A18:A27, A31:A40"))
'Wenn die Eingabezelle im Bereich liegt, dann
If Not Bereich Is Nothing Then
     'Zeile nach der Eingabezelle ein-oder ausblenden, je nach Inhalt
     Target.Offset(1).EntireRow.Hidden = (Target.Value = "")
'Ende Wenn die Eingabezelle im Bereich liegt, dann
End If
End Sub
Antworten Top


Gehe zu:


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