Microsoft Excel

Herbers Excel/VBA-Archiv

Spalten ein-/ausblenden


Betrifft: Spalten ein-/ausblenden
von: Florian
Geschrieben am: 29.11.2018 08:00:46

Guten Morgen,

ich habe einen Schichtplan, der pro Kalenderwoche eine Spalte hat.
Per bedingter Formatierung markiert Excel immer die aktuelle Woche. In Zeile 2 wird dazu der Wert "Aktuell" ermittelt, damit die bedingte Formatierung ausgeführt werden kann.

Ich bräuchte jetzt zwei VBA-Codes:
1. Der erste Code soll alle Spalten (außer Spalte A und B) aus der Vergangenheit (also links von der Zelle, in der "Aktuell" steht) ausblenden.

2. Der zweite Code soll die Spalte der Vorwoche einblenden (extra Makro).

Ich habe leider nichts passendes gefunden, daher bräuchte ich dazu bitte eure Hilfe. Vielen Dank dafür.

Gruß
Florian

  

Betrifft: AW: Spalten ein-/ausblenden
von: RPP63
Geschrieben am: 29.11.2018 09:09:43

Moin!
Fixiere die Spalten A:B und scrolle per ActiveWindow.ScrollColumn = aktKW - 1 in die Vorwoche.
Näheres kann ich in Unkenntnis Deiner Datei nicht sagen.

Gruß Ralf


  

Betrifft: AW: Spalten ein-/ausblenden
von: Florian
Geschrieben am: 29.11.2018 09:51:52

Hallo Ralf,

damit komme ich leider nicht weiter.
Ich habe bisher folgenden Code:

Columns(Cells(2, Columns.Count).End(xlToLeft).Column).Resize(, 5).EntireColumn.Hidden = False
Ich kann ihn nicht genau lesen. Er blendet immer die nächsten 4 Spalten ein, die noch ausgeblendet sind. Ich brauche den gleichen Code nur in die linke Richtung und mit dem Einblenden einer Spalte. Wie muss dieser umgebaut werden?

Gruß
Florian


  

Betrifft: AW: Spalten ein-/ausblenden
von: Werner
Geschrieben am: 29.11.2018 10:09:36

Hallo Florian,

Columns(Cells(2, Columns.Count).End(xlToLeft).Column -1).EntireColumn.Hidden = False
Gruß Werner


  

Betrifft: quick & dirty
von: RPP63
Geschrieben am: 29.11.2018 10:11:46

Sub RPP()
Dim Spalte&, i&
Spalte = Rows(2).Find("aktuell", LookAt:=xlWhole, LookIn:=xlValues).Column
Columns.Hidden = False
For i = 3 To 1000
  If i < Spalte - 1 Then
    Columns(i).Hidden = True
  Else
    Exit For
  End If
Next
Range(Cells(1, Spalte + 1), Cells(1, Columns.Count)).EntireColumn.Hidden = True
End Sub
Gruß Ralf


  

Betrifft: AW: quick & dirty
von: Florian
Geschrieben am: 29.11.2018 10:27:42

Hallo zusammen,

der Code von Werner macht leider überhaupt nichts.
Der Code von Ralf funktioniert, er hat nur einen Schönheitsfehler.

Links von der Spalte mit dem Wert "Aktuell" sind normalerweise die Spalten ja bereits ausgeblendet. Der Code öffnet zuerst alle Spalten, bevor er alle Spalten (bis auf die Vorwoche und die Spalten A und B) wieder schließt. Kann man das verhindern, dass bereits ausgeblendete Spalten gar nicht erst eingeblendet werden, bevor die Spalten wieder ausgeblendet werden? Es sieht nur unschön aus, wenn bereits viele Spalten ausgeblendet sind...

Danke und Gruß
Florian


  

Betrifft: AW: quick & dirty
von: Florian
Geschrieben am: 29.11.2018 10:28:01

Hallo zusammen,

der Code von Werner macht leider überhaupt nichts.
Der Code von Ralf funktioniert, er hat nur einen Schönheitsfehler.

Links von der Spalte mit dem Wert "Aktuell" sind normalerweise die Spalten ja bereits ausgeblendet. Der Code öffnet zuerst alle Spalten, bevor er alle Spalten (bis auf die Vorwoche und die Spalten A und B) wieder schließt. Kann man das verhindern, dass bereits ausgeblendete Spalten gar nicht erst eingeblendet werden, bevor die Spalten wieder ausgeblendet werden? Es sieht nur unschön aus, wenn bereits viele Spalten ausgeblendet sind...

Danke und Gruß
Florian


  

Betrifft: AW: quick & dirty
von: Werner
Geschrieben am: 29.11.2018 11:28:37

Hallo Florian,

dass mein Code nichts macht, das wage ich mal zu bezweifeln. Der macht genau das, was nach deinen Vorgaben gefordert war.
Er ermittelt die letzte belegte Spalte in Zeile 2 und blendet die Spalte davor ein. Wenn die natürlich schon eingeblendet sein sollte, dann tut sich logischerweise gar nichts.

So war aber deine Vorgabe mit der einzelnen Codezeile von dir.

Dein Datei kenne ich nicht

Aber was solls, der Code von Ralf funktioniert dann ja wohl, weil er alle ausgeblendeten Spalten zunächst einblendet. Das "unschöne" kriegst du weg, indem du am Anfang die Bildschirmaktualisierung ausschaltest.

Sub RPP()
Dim Spalte&, i&
Spalte = Rows(2).Find("aktuell", LookAt:=xlWhole, LookIn:=xlValues).Column

Application.ScreenUpdating = False

Columns.Hidden = False
For i = 3 To 1000
  If i < Spalte - 1 Then
    Columns(i).Hidden = True
  Else
    Exit For
  End If
Next
Range(Cells(1, Spalte + 1), Cells(1, Columns.Count)).EntireColumn.Hidden = True
End Sub
Gruß Werner