Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
908to912
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
908to912
908to912
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
nur bestimmte Spalten anzeigen per Makro
22.09.2007 13:44:00
Matthias
Hi,
folgendes schwebt mir vor: Die angehängte Datei ist eine Liste, in der Zeichnungs- und Stücklistennummern sowie Gewichte für eine Maschine eingetragen werden. In den Spaltenköpfen steht dabei immer die Baugröße der Maschine (z.B. 32/27).
Nun hätte ich es ganz gerne, dass mir auf einfache Weise nur die Spalten einer bestimmten Baugröße angezeigt werden. Dies wären z.B. bei der Baugröße 32/27 die Spalten K, L und CC. Normalerweise könnte man dies mit "Benutzdefinierter Ansicht" erreichen, ich möchte aber weiterhin noch die Möglichkeit haben, nicht nur eine, sondern mehrere Baugrößen nebeneinander darzustellen, um diese zu vergleichen.
Toll wäre es, wenn man ein Makro hätte, das dem Benutzer ein Auswahlfenster zeigt, in dem er die gewünschten Baugrößen auswählen kann, und dann die passenden Spalten ein- bzw. ausblendet. Die Spalten A und B sollen dabei aber immer eingeblendet bleiben. Wäre sowas möglich?
Die Datei:

Die Datei https://www.herber.de/bbs/user/46265.xls wurde aus Datenschutzgründen gelöscht


Danke schon mal für Eure Tipps!
Gruß
Matthias

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nur bestimmte Spalten anzeigen per Makro
22.09.2007 14:52:00
Josef
Hallo Matthias,
https://www.herber.de/bbs/user/46266.xls
leider korrespondieren die Spalten der Maschinengrössen nicht mit den Gewichtsspalten.
Gruß Sepp

AW: nur bestimmte Spalten anzeigen per Makro
22.09.2007 15:31:00
Matthias
Hi,
wow das gefällt mir schon sehr gut. Das Auswahlfenster finde ich sehr übersichtlich. Die Funktion ist aber noch nicht ganz so wie ich gedacht hatte:
- Die Spalten im linken Teil der Liste (orange und hellblaue Spalten) sind immer paarweise zu verstehen, also z.B. 16/27 und 16/27S, d.h. ein im Auswahlfenster soll nur "16/27" ausgewählt werden, damit beide Spalten erscheinen. Ein extra Auswählen von "16/27S" ist hier nicht notwendig.
- Stattdessen soll aber ein Auswahlfeld für die Gewichte vorhanden sein, also z.B. 16/27G. Die Gewichtsspalten sollen direkt neben den anderen Spalten dargestellt werden, d.h. Spalten AY und AZ sollen ausgeblendet werden.
Wenn ich mich nicht irre, korrespondieren die Gewichtsspalten mit den (paarweisen) Spalten im linken Teil der Tabelle.
Vielen Dank schon mal für die Mühe
Matthias

Anzeige
AW: nur bestimmte Spalten anzeigen per Makro
22.09.2007 16:00:00
Josef
Hallo Matthias,
in deiner Datei waren die Gewichtsspalten doppelt vorhanden, deshalb meine Verwirrung.

Die Datei https://www.herber.de/bbs/user/46268.xls wurde aus Datenschutzgründen gelöscht


Gruß Sepp

AW: nur bestimmte Spalten anzeigen per Makro
22.09.2007 16:59:00
Matthias
Hi,
danke, perfekt! Die Frage ist damit beantwortet, ich werde das Makro so in die Liste übernehmen.
Vielleicht noch eine letzte Frage: Was muss ich am Code ändern, wenn ich weitere Baugrößen (=Spalten) zu der Tabelle hinzufüge?
Ansonsten bin ich superglücklich damit!
Matthias

Anzeige
AW: nur bestimmte Spalten anzeigen per Makro
22.09.2007 19:27:46
Josef
Hallo Matthias,
in der Zeile

For Each rng In Sheets("Gesamtliste").Range("C3:AX3")


wird der Bereich mit den Spaltenüberschriften festgelegt.

Gruß Sepp

AW: nur bestimmte Spalten anzeigen per Makro
24.09.2007 18:44:47
Matthias
Hi,
ich brauche doch ein bisschen Hilfe. In der angehängten Datei habe ich mal vorne ein paar Spalten eingefügt - dann funktioniert das Makro nicht mehr korrekt. Kannst mir jemand sagen, an welchen Stellen im Code ich Änderungen vornehmen muss?
https://www.herber.de/bbs/user/46299.xls
Gruß Matthias

Anzeige
AW: nur bestimmte Spalten anzeigen per Makro
24.09.2007 19:33:00
Josef
Hallo Matthias,
wenn du vorher Spalten einfügst, dann sind mehrere Anpassungen im Code notwendig.
' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private Sub CommandButton1_Click()
Dim oCntrl As MSForms.Control
Dim intC As Integer

On Error Resume Next
Application.ScreenUpdating = False

For Each oCntrl In Me.Controls
    If TypeOf oCntrl Is MSForms.CheckBox Then
        intC = Cint(Mid(oCntrl.Name, 3))
        Sheets("Gesamtliste").Columns(intC).Hidden = Not oCntrl.Value
        Sheets("Gesamtliste").Columns(intC + 1).Hidden = Not oCntrl.Value
        Sheets("Gesamtliste").Columns(54 + Int((intC - 1) / 2)).Hidden = Not oCntrl.Value
    End If
Next
ActiveWindow.ScrollColumn = 3
Application.ScreenUpdating = True
Unload Me
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub CommandButton3_Click()
Dim oCntrl As MSForms.Control
For Each oCntrl In Me.Controls
    If TypeOf oCntrl Is MSForms.CheckBox Then
        oCntrl.Value = True
    End If
Next
End Sub

Private Sub CommandButton4_Click()
Dim oCntrl As MSForms.Control
For Each oCntrl In Me.Controls
    If TypeOf oCntrl Is MSForms.CheckBox Then
        oCntrl.Value = False
    End If
Next
End Sub

Private Sub CommandButton5_Click()
Dim oCntrl As MSForms.Control
For Each oCntrl In Me.Controls
    If TypeOf oCntrl Is MSForms.CheckBox Then
        oCntrl.Value = Not oCntrl.Value
    End If
Next
End Sub
Private Sub UserForm_Activate()
Dim oCB As MSForms.CheckBox
Dim rng As Range
Dim intT As Integer, intL As Integer

intL = 18

For Each rng In Sheets("Gesamtliste").Range("F3:BA3") ' hier den Bereich mit den Baugrößen festlegen!!!
    If rng.Column Mod 2 = 0 Then
        Set oCB = Me.Controls.Add("Forms.CheckBox.1")
        
        intT = intT + 20
        
        If intT > 160 Then
            intT = 20
            intL = intL + 80
        End If
        
        With oCB
            .Caption = rng.Text
            .Top = intT
            .Left = intL
            .Height = 18
            .Width = 60
            .Value = Not rng.EntireColumn.Hidden
            .Name = "CB" & rng.Column
        End With
    End If
Next

End Sub

Gruß Sepp

Anzeige
AW: nur bestimmte Spalten anzeigen per Makro
24.09.2007 20:55:58
Matthias
hi,
danke erst mal für die schnelle Antwort! Ich habe versucht herauszufinden, warum Du welche Stellen im Code geändert hast, verstehe es aber mangels VBA-Kenntnissen nicht richtig. Kannst Du vielleicht kurz einen Kommentar hinter den betr. Stellen schreiben?
Dann verspreche ich auch, Ruhe zu geben ;-)
Gruß
Matthias

AW: nur bestimmte Spalten anzeigen per Makro
24.09.2007 21:00:10
Josef
Hallo Matthias,
neben dem Anpassen des Bereiches mit den Spaltenüberschriften, muss auch der Versatz zu den Gewichtsspalten angepasst werden.
Das geschieht in der zeile

Sheets("Gesamtliste").Columns(54 + Int((intC - 1) / 2)).Hidden = Not oCntrl.Value


Gruß Sepp

Anzeige
AW: nur bestimmte Spalten anzeigen per Makro
24.09.2007 21:35:39
Matthias
Hi,
ich kriege es noch immer nicht hin. Ich denke mit "Versatz" meinst Du die Zahl 54 in der Codezeile. Aber der Versatz zwischen welchen Spalten genau ist das dann?
Matthias

AW: nur bestimmte Spalten anzeigen per Makro
24.09.2007 21:50:58
Josef
Hallo Matthias,
in deiner Tabelle beginnen die Baugrössen in Spalte 6, die Gewichtsspalten in spalte 56.
Wenn nun die erste Checkbox ausgewählt ist, dann ist hat "intC" den Wert 6 (diesen lese ich aus dem Namen der CheckBox aus)
Da die Gewichtsspalten jeweils für zwei Baugrössen gilt, muss der Versatz errechnet werden.
54 ist dabei Fix und entspricht dem Versatz der ersten Baugrösse zur ersten Gewichtsspalte - der Ganzzahl (erste Baugrössenspalte / 2)
54 + Int((intC -1 ) / 2) ergibt für intC = 6 den Wert 56 (54 + 2)
und für intC = 8 ergibt sich dann 57, usw.
Gruß Sepp

Anzeige
AW: nur bestimmte Spalten anzeigen per Makro
24.09.2007 22:24:43
Matthias
Hallo Josef,
danke für die Erklärung. Könnte man das mit der Gewichtsspalte aber nicht einfacher erreichen? Excel könnte doch nach derjenigen Spalte suchen, in deren Kopf die Baugröße (z.B. 16/27) plus einem "G" steht, also 16/27G. Die Gewichtsspalten sollen für eine Baugröße immer nur einmal vorkommen, daher sollte auch immer nur eine Spalte gefunden werden.
Das hätte den Vorteil, dass man vom Aufbau der Tabelle her flexibler wäre. Denn diese Liste wird sehr häufig benutzt und auch ab und zu mal geändert.
Gruß
Matthias

AW: nur bestimmte Spalten anzeigen per Makro
24.09.2007 23:17:30
Josef
Hallo Matthias,
sicher geht das, aber ob es einfacher ist weis ich nicht. Für mich ist es nicht schwer, aber wenn du die Tabelle weiter veränderst, dann könnte das ganze wieder nicht funktionieren.
Das Einzige was du nun anpassen musst ist die Konstante "strRange", sie gibt den Bereich mit den Baugrössen an.
Kopiere diesen Code komplett in das Modul des UF.
' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private Const strRange As String = "F3:BA3" 'Bereich mit den Baugrössen

Private Sub CommandButton1_Click()
Dim oCntrl As MSForms.Control
Dim rng As Range
Dim intC As Integer

On Error Resume Next
Application.ScreenUpdating = False
With Sheets("Gesamtliste")
    .Range(.Cells(1, .Range(strRange).Columns(1).Column + .Range(strRange).Columns.Count), _
        .Cells(1, .Cells(.Range(strRange).Row, Columns.Count).End(xlToLeft).Column)) _
        .EntireColumn.Hidden = True
    
    For Each oCntrl In Me.Controls
        If TypeOf oCntrl Is MSForms.CheckBox Then
            intC = Cint(Mid(oCntrl.Name, 3))
            .Columns(intC).Hidden = Not oCntrl.Value
            .Columns(intC + 1).Hidden = Not oCntrl.Value
            
            If oCntrl.Value Then
                'Gewichtsspalten suchen
                Set rng = .Rows(.Range(strRange).Row).Find(what:=oCntrl.Caption & "G", LookAt:=xlWhole)
                
                If Not rng Is Nothing Then rng.EntireColumn.Hidden = False
            End If
        End If
    Next
    
End With
ActiveWindow.ScrollColumn = 3
Application.ScreenUpdating = True
Set rng = Nothing
Unload Me
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub CommandButton3_Click()
Dim oCntrl As MSForms.Control
For Each oCntrl In Me.Controls
    If TypeOf oCntrl Is MSForms.CheckBox Then
        oCntrl.Value = True
    End If
Next
End Sub

Private Sub CommandButton4_Click()
Dim oCntrl As MSForms.Control
For Each oCntrl In Me.Controls
    If TypeOf oCntrl Is MSForms.CheckBox Then
        oCntrl.Value = False
    End If
Next
End Sub

Private Sub CommandButton5_Click()
Dim oCntrl As MSForms.Control
For Each oCntrl In Me.Controls
    If TypeOf oCntrl Is MSForms.CheckBox Then
        oCntrl.Value = Not oCntrl.Value
    End If
Next
End Sub
Private Sub UserForm_Activate()
Dim oCB As MSForms.CheckBox
Dim rng As Range
Dim intT As Integer, intL As Integer

intL = 18

For Each rng In Sheets("Gesamtliste").Range(strRange)
    If rng.Column Mod 2 = 0 Then
        Set oCB = Me.Controls.Add("Forms.CheckBox.1")
        
        intT = intT + 20
        
        If intT > 160 Then
            intT = 20
            intL = intL + 80
        End If
        
        With oCB
            .Caption = rng.Text
            .Top = intT
            .Left = intL
            .Height = 18
            .Width = 60
            .Value = Not rng.EntireColumn.Hidden
            .Name = "CB" & rng.Column
        End With
    End If
Next

Me.Width = intL + 85
End Sub

Gruß Sepp

Anzeige
AW: nur bestimmte Spalten anzeigen per Makro
25.09.2007 13:01:29
Matthias
Hi,
perfekt, jetzt funktioniert es einwandfrei!! Danke für Deine Geduld!
Gruß
Matthias

327 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige