VBA Frage
#11
Hallo

Beschreibe(evtl. mit Datei) bitte noch mal was mit der/den Spalten bei Ein und Ausblenden passieren soll. Ein generelles Verschieben der Spalte nach links oder....? Das "!" steht dann in Zeile 1 oder?

Gruß Elex
Antworten Top
#12
Bisher ist der Code ja so, dass beim Klicken dann alle Spalten und Zeilen in denen etwas geschrieben steht eingeblendet bleiben.
Nun sollen zusätzlich noch jene Spalten in denen ein "!" steht nicht nur eingeblendet bleiben sondern auch noch links fixiert werden.
(Siehe Bild).

Liebe Grüße


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#13
Das würde ein generelles verschieben der Spalten und Zeilen bedeuten. Ein zurück an alte Stelle ist nicht möglich.
Hast du eventuelle Auswirkungen der Umordnung auf Formel oder anderen Code bedacht?
Antworten Top
#14
Hallo Elex,

ja du hast recht. Das Gute ist, dass die Spalten die ich bei Klick fixiert haben will, sich ganz links nacheinander befinden und es ist keine Spalte mit "x" dazwischen.

Also der Code sollte einfach nur die leeren Spalten/Zeilen ausblenden und die gefüllten Spalten eingeblendet lassen (wie es dein bisheriger Code tut), und dann eben noch die Spalten mit "!" links fixieren. 
Voraussetzung: Ich müsste dann immer nur schauen dass VOR bzw. ZWISCHEN den Spalten mit "!" keine Spalten mit "x" stehen. Sonst würde wie du sagst eine Verschiebung stattfinden.
Antworten Top
#15
Hi,

also wenn ich es jetzt richtig versteh, braucht es eigentlich nur ein "!" in Zeile 1 und Spalte 1. Das ist dann der Schnittpunkt für die Fixierung.
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Address = "$A$1" Then
  ActiveWindow.FreezePanes = False
  Cancel = True
  On Error Resume Next
  If Target.Value = "Ein" Then
    Target.Value = "Aus"
    Cells.Columns.Hidden = False
    Cells.Rows.Hidden = False
  Else
    Target.Value = "Ein"
    Rows(1).SpecialCells(xlCellTypeBlanks).Columns.Hidden = True
    Columns(1).SpecialCells(xlCellTypeBlanks).Rows.Hidden = True
  End If
  Cells(Columns(1).Find("!", Cells(1), xlValues, xlWhole, , xlPrevious).Row + 1, Rows(1).Find("!", Cells(1), xlValues, xlWhole, , xlPrevious).Column + 1).Select
  ActiveWindow.FreezePanes = True
End If
End Sub
Gruß Elex
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • HansMartin888
Antworten Top
#16
Hi Elex,

da tut sich bei mir nichts. Ich hab dir jetzt mal die Datei angehängt wie sie aufgebaut ist. Die ersten 3 Spalten sind immer fixiert, danach ist alles scrollbar. Bei Klick möchte ich, dass alle Spalten wo was steht NICHT ausgeblendet werden (wie es dein bisheriger Code perfekt umsetzt), und nun die Spalten mit "!"  (Spalte F-I) zusätzlich noch links an die bereits fixierten Spalten rangeheftet werden, sodass sie auch fixiert sind. Sorry für die Verwirrung.


Angehängte Dateien
.xlsx   Bsp.xlsx (Größe: 8,84 KB / Downloads: 3)
Antworten Top
#17
Dein Bild in #12 hat in Spalte 1 ja auch ein "!". Das fehlt in deiner Datei aber.
Antworten Top
#18
Ja am besten wir nehmen #16 als Grundlage, so sieht die Datei letztlich aus.

Der Code sollte also die leeren Spalten ausblenden, die Spalten mit "x" (nicht leer) eingeblendet lassen, und die Spalten mit "!" NACH Spalte C anhängen (die ersten 3 Spalten benötige ich immer sichtbar).
Ich muss dann immer drauf achten dass ich wie gesagt links von der ersten "!"-Spalte oder zwischen den "!"-Spalten keine Spalten mit "x" habe, da sonst Spalten verschoben werden. So hab ich s jetzt verstanden ; )
Antworten Top
#19
Ok.

Test die Geschichte mal.
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Address = "$A$1" Then
  Dim PosZ As Long, PosS As Long
  ActiveWindow.FreezePanes = False
  Cancel = True
  On Error Resume Next
  If Target.Value = "Ein" Then
    Target.Value = "Aus"
    Cells.Columns.Hidden = False
    Cells.Rows.Hidden = False
  Else
    Target.Value = "Ein"
    Rows(1).SpecialCells(xlCellTypeBlanks).Columns.Hidden = True
    Columns(1).SpecialCells(xlCellTypeBlanks).Rows.Hidden = True
  End If
 
  PosZ = Columns(1).Find("!", Cells(1), xlValues, xlWhole, , xlPrevious).Row + 1
  PosZ = WorksheetFunction.Max(2, PosZ)
  PosS = Rows(1).Find("!", Cells(1), xlValues, xlWhole, , xlPrevious).Column + 1
  PosS = WorksheetFunction.Max(4, PosS)
  Cells(PosZ, PosS).Select
  ActiveWindow.FreezePanes = True
End If
End Sub
Gruß Elex
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • HansMartin888
Antworten Top
#20
Hallo Elex,

habs gerade getestet, folgende Dinge sind mir aufgefallen:
Wenn man wieder klickt, geht alles zwar wieder in seine ursprüngliche Stellung zurück, jedoch bleibt die Anzahl der Spalten die vorher für die "!"-Spalten-Fixierung benötigt wurden, links fixiert. Die Fixierung müsste sich jedoch wieder lösen (nicht aber die ersten 3 Spalten und Zeilen, die ja grundsätzlich immer fixiert bleiben). Auch sehr viele Zeilen (statt nur der ersten 3) bleiben fixiert obwohl ich wieder alles eingeblendet habe.

Liebe Grüße
Antworten Top


Gehe zu:


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