Microsoft Excel

Herbers Excel/VBA-Archiv

Problem bei mehreren VBA´s auf einer Zelle

    Betrifft: Problem bei mehreren VBA´s auf einer Zelle von: Markus
    Geschrieben am: 02.10.2003 20:49:41

    Hallo Excel Experten,

    ich arbeite in zwei Tabellbereichen. In Tab1 sind Eingabezellen, in die ein "x" vorgegeben werden kann. Dieses "x" sorgt dafür, dass in Tab2 ausgeblendete Zeilen eingeblendet werden. Das ganze funktioniert mit VBA:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
    Sheets("Tabelle2").Rows(10).Hidden = Not (UCase(Target.Value) = "X")
    End If
    End Sub
    


    .. Zeile 10 in Tab2 wird wieder eingeblendet. Nimmt man das "x" wieder weg, wird die Zeile wieder ausgeblendet. Stellt ohne den nachstehenden VBA auch kein Problem dar:

    dagegen habe ich in Tab2 eine Formel vorgegeben, die in Tab2 / Zelle A10 heißt:

    =WENN(Tabelle1!A2>0;Tabelle1!A2;"")

    in A2 kann man einen Text hinterlegen, wobei die Zelle mit einem Zeilenumbruch ausgestattet ist. Um einen Zeilenumbruch bei einem Text-Bezug per Formel in Tab2 / A10 zu bewirken, habe ich folgenden VBA gesetzt:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address <> "A2" Then
            Sheets("Tabelle2").Rows(10).AutoFit
        End If
    End Sub
    


    natürlich ohne die erst und letzte Zeile, da beide VBA´s unter Tab1 stehen, sonst bringt Excel mir ne Fehlermeldung.

    So, der Zeilenumbruch findet weiterhin statt. Aber wenn ich jetzt ein "x" in Tab1 / A1 setzte und es wieder entferne, bleibt die Zeile 10 in Tab2 weiterhin eingeblendet. Ich denke das ist nur, weil ich einen anderen VBA bezogen auf diese Zeile habe. Wie gesagt, wenn die Zelle ohne diesen VBA des Zeilenumbruchs besteht, funktioniert es reibungslos.
    Zur ausführlichen Erläuterung: Es sind insgesamt 5 Zeilen in Tab2 bei unterschiedlichen Eingabefeldern in Tab1 davon betroffen.


    Wer bis hierhin gelesen hat, denn Danke ich schonmal vielmals!!!!

    Jetzt kommts erst recht. Ich wollte Euch gerade ein Beispiel hochladen. Bei dem hat es nach dem vorstehenden Prinzip funktioniert. Leider muss ich noch weiter ausholen, da ich hier lediglich ein Bespiel beschrieben habe, bei dem es dummerweise klappt. Normalerweise habe ich eine sehr grosse Datei. Von den o.g. VBA´s die einen Zeilenumbruch bewirken habe ich insgesamt 5. Von den einzublendenden Zeilen ohne diesen VBA(Zeilenumbruch) 10, darüber hinaus arbeite ich mit einzublendenen Spalten (sind weit aus mehr, funktioniert jedoch auch weiterhin). Das ganze Spielchen findet parallel in 4 verschiedenen Tabellbereichen statt, wobei eine weitere Tabelle die Eingabetabelle ist. In diesen Tab-Bereichen werden oder bei manchen Zellen (mit dem Zeilenumbruch) sollten, jeweils zwei ausgeblendete Zeilen sich bei "x" wieder einblenden, was die Zeilen ohne diesen VBA (Zeienumbruch) auch machen, aber die anderen 5 (bzw. 10) nicht. That´s my thing.

    Vielleicht ist es ja auch nur eine ganz leichte Antwort, auf die ich einfach nicht komme. Hat es vielleicht was mit der Anordnung der Code´s zu tun?? Oder warum funktioniert das nur nicht bei den oben angesprochenen Zeilen?

    Wer mir hier weiterhelfen kann ist für mich der neue SUPERHELD!!
    wer kann es?

    Ich schick ich auch meine Datei, wenn Ihr wollt. Hat ca. 350KB. Aber BITTE helft mir Jungs! Ich bin echt am verzweifeln!!

    Ich DANKE Euch schonmal vielmals vorab!

    Gruß Markus
      


    Betrifft: AW: Problem bei mehreren VBA´s auf einer Zelle von: Matthias G
    Geschrieben am: 02.10.2003 20:56:25

    Hallo Markus,
    ohne mich jetzt bereits im Detail in Dein Problem eingearbeitet zu haben, ist mir doch aufgefallen, dass du schreibt:
    If Target.Address <> "A2" Then...
    Das ist natürlich immer <> "A2", denn es müsste heißen <> "$A$2".

    Vielleicht bringt Dich das schon weiter.

    Gruß,
    Matthias


      


    Betrifft: AW: Problem bei mehreren VBA´s auf einer Zelle von: Markus
    Geschrieben am: 02.10.2003 21:18:20

    Hallo Matthias,

    erstmal vielen Dank das Du Dich meinem Problem annimmst. Habe es gerade geändert. Leider ohne den gewünschten Erfolg. Noch kurz was dazu:

    bei der Änderung habe ich nochmal manuell alle betroffenen Zeilen (die mit dem Zeilenumbruch) ausgeblendet. Gebe ich nur in einer Eingabezelle ein "x" vor, blenden sich alle 5 (bzw. 10) Zeilen wieder ein. Nimm ich das "x" weg, passiert gar nichts. Das hat aber auch nichts mit der Änderung zu tun, sondern war schon vorher so.

    .. und noch was: wenn ich statt <> "A2", schreibe <> "$A$2", dann funktioniert das nicht mehr mit dem Zeilenumbruch bei Formelbezug. Daher hatte ich das $ weggelassen.

    Gruß Markus


      


    Betrifft: AW: Bitte hochladen von: Matthias G
    Geschrieben am: 02.10.2003 21:22:23

    Hallo Markus,
    lad' das Teil doch mal auf den Server hoch. Du kannst es ja zippen, aber 350kB sind ja nicht sooo viel.

    Gruß,
    Matthias


      


    Betrifft: AW: Bitte hochladen von: Markus
    Geschrieben am: 02.10.2003 21:30:10

    Hallo Matthias,

    da ist sie. Kurze Einführung:

    unter "Eingabe" ab Spalte "R" = Preise / Bezugsmaterialien nach Bezeichnung , um die geht es im wesentlichen. Die sollen nämlich dafür sorgen, dass unter den anderen Tabellbereichen die Zeilen (siehe VBA) eingeblendet werden sollen.

    Vielleicht kannst Du ja auch mein Problem bzgl. "Spalte einblenden bei Formelbezug" lösen, woran momentan Gerd dran ist.

    Gruß Markus


      


    Betrifft: AW: Bitte hochladen von: Markus
    Geschrieben am: 02.10.2003 21:31:34

    Hallo Matthias,

    da ist sie. https://www.herber.de/bbs/user/1264.xls Kurze Einführung:

    unter "Eingabe" ab Spalte "R" = Preise / Bezugsmaterialien nach Bezeichnung , um die geht es im wesentlichen. Die sollen nämlich dafür sorgen, dass unter den anderen Tabellbereichen die Zeilen (siehe VBA) eingeblendet werden sollen.

    Vielleicht kannst Du ja auch mein Problem bzgl. "Spalte einblenden bei Formelbezug" lösen, woran momentan Gerd dran ist.

    Gruß Markus


      


    Betrifft: AW: Alternative von: Matthias G
    Geschrieben am: 02.10.2003 22:16:50

    Hallo Markus,
    irgendwie gefällt mir deine gigantische Abfrageorgie nicht.
    Ich hab mal eine Alternative als Upload:

    https://www.herber.de/bbs/user/1265.xls

    Kern der Sache ist, dass die Tabellen, die auszublendende Zeilen/Spalten enthalten, einen direkten Bezug auf die Zelle enthalten, die die Ein/Ausblendung verursacht.
    Im Calculate-Ereignis von Tabelle2(!) werden nun alle Zellen geprüft und die Zeilen/Spalten ausgeblendet, die kein "X" haben.
    Deine Einzelabfragen funktionieren ja schon dann nicht, wenn mehrere Zellen auf einmal gelöscht werden. Dann ist Target.Address nämlich ein ganzer Bereich.
    Und wenn sich mal eine Polstergarnitur ändert, musst du stundenlang im Code rumbasteln! ;-)

    Uberlege dir, ob Du nicht eine flexiblere Abfrage schreiben willst.
    Der Worksheet_Change-Kram fällt weg, und in jedem Blatt mit Ein/Ausblendungen steht im Calculate-Ereignis:
    Private Sub Worksheet_Calculate()
    Dim z As Range
    For Each z In Range("A1:A15")'die Zeilen in welchen Bezüge zum Eingabeblatt stehen
        z.EntireRow.Hidden = Not (UCase(z.Value) = "X")
    Next z
    For Each z In Range("D1:K1")'die Spalten in welchen Bezüge zum Eingabeblatt stehen
    
        z.EntireColumn.Hidden = Not (UCase(z.Value) = "X")
    Next z
    End Sub
    

    Die andere Sache (mit dem Zeilenumbruch, AutoFit) habe ich leider überhaupt nicht verstanden.
    Muss AutoFit bei jeder Zelländerung neu ausgeführt werden?? Da reicht doch einmal.

    Ich hoffe Du hattest einige Anregungen durch mich. Bin auf Deine Antwort gespannt!

    Viele Grüße,
    Matthias


      


    Betrifft: AW: Alternative von: Markus
    Geschrieben am: 02.10.2003 23:39:10

    Hallo Matthias,

    hast schon recht, mit der gigantische Abfrageorgie. Hatte mal die Frage gestellt wie es überhaupt geht und da kam die Antwort ohne bezugnehmend auf "x" in einer betreffenden Tabelle. Bin frei nach dem Moto gegegen, hauptsache es klappt.

    Bin Deinem VBA nachgegangen und hab "Einzelelemente" Spalte "BE" auf den Zeilen "22:35" mit entsprechenden Formeln ausgestattet. Klappt bei den Zeilen ohne die VBA mit dem Zeilenumbruch, sprich "22:30", aber weiterhin nicht bei den anderen. (leider wie vorher)

    Das Problem besteht offenbar nicht bei überschneidenen Zeilen- & Spaltenausblendungen, sondern wahrscheinlich bei dem Zeilenumbruch.

    Bei dem AutoFit wurde es mir mal so zu verstehen gegeben. Hatte die Frage auch mal gestellt ...
    https://www.herber.de/forum/messages/316253.html

    bin noch VBA-Anfänger und bin mit den aneinanderreien bisher ganz gut gefahren, auch wenn´s wild aussieht. Die Einzelabfrage klappt, wenn man jede Eingabe/Entnahme des "x" mit der Eingabetaste bestätigt, aber ich werde die Datei so abändern wie Du es aufgezeigt hast. Ist auf jedem Fall besser! Dann klappt´s auch mit einem "x"-Formelbezug. Muss man nur mal aufgezeigt bekommen. Hoffe Du kannst mir noch bei den Zeilen mit dem Umbruch helfen, die eingeblendet werden sollen.

    Gruß Markus


      


    Betrifft: AW: Alternative von: Matthias G
    Geschrieben am: 02.10.2003 23:52:23

    Hallo Markus,
    ich habe den Verdacht, dass die verbundenen Zellen damit zu tun haben.
    Löse mal testhalber alle Verbindungen auf und schau, was passiert.

    Gruß,
    Matthias


      


    Betrifft: AW: Alternative von: Markus
    Geschrieben am: 03.10.2003 11:35:34

    Hallo Matthias,

    aber in den Zeilen des Zeilenumbruchs sind doch gar keine verbundenen Zellen drin. Bei den Spalten funktioniert es ja, auch wenn die Zellen in manchen Zeilen verbunden sind. Die Zeilen, wo oberste und unterste Zellen miteinander verbunden sind, blenden sich auch ein und aus.

    Ich glaub bald, dass liegt an den VBA vom Zeilenumbruch. Mal ne Theorie von Übernacht:

    Der VBA ist ja so konzipiert, dass, wenn sich ein Text drin befindet, sich die Zeilenhöhe an den Text anpasst und wenn der Text nicht gegeben ist, sich die Zeilenhöhe auf die Standardhöhe zurückversetzt. Somit könnte es vielleicht erklärt werden, dass die sich nicht gänzlich ausblenden lassen, da der VBA immer an der Standardhöhe festhält. Ist denn ein Ausblenden einer Zeile nicht das gleiche, als ob die Höhe auf "0" gesetzt wird? Bzw. regelt Excel dass nicht in dieser Weise? Dann müßte man ja eigentlich nur diesen VBA so hinbiegen, dass er bei einem Textentzug nicht auf die Standardhöhe geht, sondern auf Höhe "0". Die Frage ist jetzt nur noch, wie?

    Gruß Markus


      


    Betrifft: AW: Alternative von: Matthias G
    Geschrieben am: 03.10.2003 14:05:47

    Hallo Markus,
    Erstmal einen schönen Feiertag!
    Also das mit den verbundenen Zellen war ein Flop, hast recht.
    Die Autofit-Methode setzt die Spaltenbreite/Zeilenhöhe fest, damit alles in eine Zelle passt. Wenn du den Zeilenumbruch in der Zelle aktiviert hast, brauchst Du m.W. keine Autofit-Methode. Die Zellhöhe passt sich automatisch an den Zellinhalt an (Das soll sie ja auch, oder etwa die Spaltenbreite?).

    Also formatiere alle Zellen, die es nötig haben, mit Zeilenumbruch und lass die AutoFit-Methode weg. Ich hab's getestet, du hast recht, Autofit blendet ausgeblendete Zellen wieder ein.

    Ein anderer Weg wäre, vor der AutoFit-Methode abzufragen, ob die Zelle ausgeblendet ist:
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address <> "A2" and Sheets("Tabelle2").Rows(10).Hidden = False Then
            Sheets("Tabelle2").Rows(10).AutoFit
        End If
    End Sub
    

    (Hab' das nur beispielhaft in deinen Codeschnipsel eingebaut, ohne zu testen.)

    Aber ich würde an Deiner Stelle den Verzicht auf AutoFit, wenn möglich, bevorzugen.

    Viel Erfolg!
    Matthias


      


    Betrifft: AW: Alternative von: Markus
    Geschrieben am: 03.10.2003 16:48:30

    Hallo Matthias,

    Danke, Dir auch einen schönen Feiertag!
    Die AutoFit - Methode musste hinterlegt werden, da die Zeilen sich bei einem Formelbezug nicht automatisch in der Höhe anpassten, wenn der Text bezogen wurde, auch wenn diese mit Zeilenumbruch ausgestattet waren. Das klappt nur bei direkter Eingabe in eine Zelle. Weiß auch nicht warum.

    Bin Deinem Beispiel nachgegangen und soll ich Dir was sagen?

    .... DU BIST MEIN NEUER SUPERHELD !!!!

    hat alles wunderbar funktioniert.

    Ich Dank Dir vielmals !! .. und wünsch Dir noch ein schönes langes Wochenende.

    Gruß Markus


      


    Betrifft: AW: Bitte sehr, gern geschehen :-) o.T. von: Matthias G
    Geschrieben am: 03.10.2003 18:33:56

    -


     

    Beiträge aus den Excel-Beispielen zum Thema " Problem bei mehreren VBAs auf einer Zelle"