Inhaltsabfrage über Speziallayout

Dieses Thema Inhaltsabfrage über Speziallayout im Forum "Microsoft Office Suite" wurde erstellt von Hudson, 20. Aug. 2006.

Thema: Inhaltsabfrage über Speziallayout Hallo Layout Excel Experten, wie wäre es machbar dem Benutzer eines Excel-Files vorher eine Auswahl der...

  1. Hallo Layout Excel Experten,

    wie wäre es machbar dem Benutzer eines Excel-Files vorher eine Auswahl der wünschenswerten Spalten zu ermöglichen????

    Ich habe eine sehr umfangreiche Datei erstellt (aber ohne Rechnungen!) und diese wird jetzt von unterschiedlichen Personen, mit unterschiedlichen Ansprüchen (andere Wichtigkeiten!) geöffnet. Deshalb soll sie benutzerfreundlich werden!

    Ich möchte, dass der Benutzer eine der 3 Hauptkategorien unten als Reiter wählt und in dem Reiter vor der Inhaltsanzeige die Frage gestellt bekommt: Bitte wählen sie Ihre Werte!
    (bei Schaltflächen hinzufügen oder entfernen, mach ich ja auch nur ein Hacken und da dann eben auch: Wählt er X, Y und Z? dann werden Ihm nur die entsprechenden Spalten gezeigt also Q, AC und AL).

    Achja:
    Wenn ich einen Filter einstelle, wie mach ich, dass der nur für bestimmte Spalten gilt?
    ZB ein Filter für Spalte A, C, D und P?  Möglich?

    Ich arbeite mit einer Fixierung auf Höhe der 4 Zeile, aber wieso habe ich bei 2 von den 3 Reiterfenstern eine zusätzliche Fixierung in der B Spalte??? (d.h. egal wie weit weg ich scroll, bsw bis BB sehe ich immer noch Spalte A&B)


    Ich nutze Office 2003 und verstehe die Grundfunktionen von VisualB (wegen Makros)
    Ich habe neben mir auch das Buch ?Excel 2003? von Michael& Eva Kolberg aus dem Franzis Verlag liegen, aber wenn es um Makros geht weiß ich nicht wo ich anfangen soll.

    Wenn Ihr mir BITTE einen Tipp, eine Gliederung oder Vorgehensschritte nennen könnt, wäre mir sehr geholfen?
    Ich möchte keine (vollständige ;)) Lösung, sondern wissen ob es überhaupt machbar ist und wie ich das ganze angehen sollte!
    Schau nämlich zurzeit wies Schwein ins Uhrwerk!

    Vielen Dank!!!!

    PS mir fällt grad was ein:
    Kann ich einen 4ten Reiter erstellen, Name: Content und dort mir die gewünschten Daten anzeigen lassen? So dass meine anderen 3 Tabellen lediglich als Datenbank dienen?
    D.h. ich will eine Abfrage die erstmal generell klärt welche der 3 Reiter der Benutzer möchte, und dann ihm 3-4 wichtige Filter bieten die ihm dann die gewünschten Zeilen anzeigen?
    Und das ganze alles in dem Reiter: Content?
    (mit Spezial Filtern? Aber wie mache ich das, dass die Werte im Reiter Content angezeigt werden?)
     
  2. Hallo Hudson,

    also deine Hauptfunktion ist in->DieseArbeitsmappe' Workbook_Open.

    Darin könntest Du eine Userform->Blattauswahl' aufrufen.
    Diese Userform müßte 2x (3 Option-Button in eine Frame) und ein OK-Button enthalten.
    (Option-Button in einem Frame, weil dann automatisch nur einer ausgewählt werden kann)
    Die ersten 3 Option-Button benutzt du zur Blattauswahl.
    Die zweiten 3 Option-Button benutzt du zur Auswahl X, Y und Z
    Für den ersten der jeweils 3 Button, setzt du den Value auf True. Damit ist auf jeden Fall eine Defaultauswahl gesetzt.

    Im Click-Ereignis des OK-Buttons gibst Du Me.Hide ein. Dann geht der Dialog zu und die Routine Workbook_Open wird fortgesetzt. Dort kannst Du dann die angeklickten Werte Blatt und X,Y,Z noch erreichen.

    Danach muß Unload UserFormxyz erfolgen. damit wird die Userform aus dem Speicher geworfen. Ab dann kannst Du nicht mehr auf die Option-Button zugreifen.

    Bis hierhin stehen Blatt und Auswahl XYZ fest.

    Das solltest Du erstmal zum laufen bringen - Datei öffnen, Userform geht auf, Auswahl erfolgt, OK und dann die Werte auslesen und mit einer Msgbox ausgeben.


    Im 2 Schritt kommt noch eine Nachbearbeitungsroutine dazu.
    Diese muß
    - das entsprechende Blatt aktivieren,
    - alle Spalten und Zeilen einblenden
    - ggf. eine Fixierung aufheben
    - entsprechend der Auswahl XYZ nicht benötigte Spalten ausblenden
    - ggf. wieder eine Fixierung setzen
    - Autofilter setzen, wenn nicht vorhanden
    (Achtung es dürfen dann keine vollständig leere Zeilen im benutzten Bereich sein,
    sonst sieht der Autofilter diese nicht)
    Alternative: Wenn mehr als 2 Bedingungen für den Autofilter notwendig sind kannst Du das über->Zeile ausblenden' realisieren
    - dem Anwender viel Spaß wünschen ( Msgbox :) )

    Gruß Matjes :)
     
  3. Hier noch ein prinzipieller Test deiner Userform.

    Gruß Matjes :)
    Code:
    Sub TestUF()
      Dim sBlatt As String, sXYZ As String
      
      Call BlattUndXYZAuswahl(sBlatt, sXYZ)
      MsgBox sBlatt & vbLf & sXYZ
    End Sub
    
    
    
    Function BlattUndXYZAuswahl(sBlatt As String, sXYZ As String)
    
      Dim bWert1 As Boolean, bWert2 As Boolean, bWert3 As Boolean
    
      Load UserForm1
      UserForm1.Frame1.OptionButton1.Value = True->Defaultwerte setzen
      UserForm1.Frame2.OptionButton4.Value = True
      UserForm1.Show
      
     ->Option-Button Blattauswahl abfragen
      If UserForm1.Frame1.OptionButton1.Value Then
        sBlatt = Tabelle1                       ->ggf. Tabellennamen anpassen
      ElseIf UserForm1.Frame1.OptionButton2.Value Then
        sBlatt = Tabelle2                       ->ggf. Tabellennamen anpassen
      ElseIf UserForm1.Frame1.OptionButton3.Value Then
        sBlatt = Tabelle3                       ->ggf. Tabellennamen anpassen
      Else
        sBlatt =                                ->keine Auswahl
      End If
      
     ->Option-Button XYZ abfragen
      If UserForm1.Frame2.OptionButton4.Value Then
        sXYZ = X
      ElseIf UserForm1.Frame2.OptionButton5.Value Then
        sXYZ = Y
      ElseIf UserForm1.Frame2.OptionButton6.Value Then
        sXYZ = Z
      Else
        sXYZ = 
      End If
      
      Unload UserForm1
    
    End Function
     
  4. Wow, danke. :1

    Wenn ichs hab ODER nimmer weiter weiß meld ich mich nochmal...

    Klinkt verdammt nachdem wonach ich suche... :D

    MFg
     
  5. ich hab das Beispiel noch etwas forgeführt  ;D

    Userform so anlegen wie oben beschrieben:
    Name Userform1
    1.Frame mit Namen Frame1
    in Frame1 3 OptionButton (OptionButton1,OptionButton2,OptionButton3) für die Auswahl Blatt
    2.Frame mit Namen Frame2
    in Frame2 3 OptionButton (OptionButton4,OptionButton5,OptionButton6) für die Auswahl XYZ
    CommandButton1 für OK (code für das Click-Ereignis: Me.Hide)

    Dann ein Modul mit folgenden Functions:
    Code:
    Option Explicit
    Option Private Module
    Function AuswahlBlattundXYZ()
      Dim sBlattname As String, sXYZ As String
      Dim ws As Worksheet
      
      Call BlattUndXYZAuswahl(sBlattname, sXYZ)
      
     ->Blatt aktivieren und setzen
      Set ws = BlattAktivieren(ThisWorkbook, sBlattname)
      If ws Is Nothing Then GoTo AUFRAEUMEN
      
     ->Fixierung aufheben
      ActiveWindow.FreezePanes = False
      
     ->Alle Zeilen und Spalten einblenden
      ws.Rows.Hidden = False
      ws.Columns.Hidden = False
      
     ->Fixierung der ersten Zeile und ersten Spalte
      ws.Range(B2).Select
      ActiveWindow.FreezePanes = True
      
     ->Autofilter löschen
      If ws.AutoFilterMode Then ws.Range(A3).AutoFilter
    
     ->Autofilter neu setzen (Zeile 3)                ggf anpassen A3
      ws.Range(A3).AutoFilter
      Select Case sXYZ
        Case X
         ->Autofilter für ABDP mit Bedingungen setzen  ->   anpassen A3 und Criteria1s
         ->A enthält s2 oder enthält s4
          ws.Range(A3).AutoFilter Field:=1, Criteria1:==*s2*, Operator:=xlOr, Criteria2:==*s4*
         ->B alle leeren
          ws.Range(A3).AutoFilter Field:=2, Criteria1:==
         ->D alle nicht leeren
          ws.Range(A3).AutoFilter Field:=4, Criteria1:=<>
         ->P alle nicht leeren
          ws.Range(A3).AutoFilter Field:=16, Criteria1:=<>
        Case Y
         ->anpassen
        Case Z
         ->anpassen
      End Select
      
      
     ->entsprechend der Auswahl XYZ nicht benötigte Spalten ausblenden
     ->Ausblenden mit der letzten Spalte beginnen
      Select Case sXYZ
        Case X
          ws.Columns(J:N).Hidden = True
          ws.Columns(H).Hidden = True
          ws.Columns(F).Hidden = True
        Case Y
          ws.Columns(H).Hidden = True
          ws.Columns(F).Hidden = True
        Case Z
          ws.Columns(F).Hidden = True
      End Select
        
    AUFRAEUMEN:
      Set ws = Nothing
    End Function
    Function BlattAktivieren(wb As Workbook, sBlattname As String) As Worksheet
      On Error Resume Next
      Set BlattAktivieren = wb.Worksheets(sBlattname)
      If Err.Number <> 0 Then Err.Clear
      If BlattAktivieren Is Nothing Then
        MsgBox Blatt  & sBlattname &  nicht vorhanden.
      Else
        BlattAktivieren.Activate
      End If
      On Error GoTo 0
    End Function
    
    
    Function BlattUndXYZAuswahl(sBlattname As String, sXYZ As String)
    
      Dim bWert1 As Boolean, bWert2 As Boolean, bWert3 As Boolean
    
      Load UserForm1
      UserForm1.Frame1.OptionButton1.Value = True->Defaultwerte setzen
      UserForm1.Frame2.OptionButton4.Value = True
      
      Do
        UserForm1.Show
        
       ->Option-Button Blattauswahl abfragen
        If UserForm1.Frame1.OptionButton1.Value Then
          sBlattname = Tabelle1                   ->ggf. Tabellennamen anpassen
        ElseIf UserForm1.Frame1.OptionButton2.Value Then
          sBlattname = Tabelle2                   ->ggf. Tabellennamen anpassen
        ElseIf UserForm1.Frame1.OptionButton3.Value Then
          sBlattname = Tabelle3                   ->ggf. Tabellennamen anpassen
        Else
          sBlattname =                            ->keine Auswahl
        End If
        
       ->Option-Button XYZ abfragen
        If UserForm1.Frame2.OptionButton4.Value Then
          sXYZ = X
        ElseIf UserForm1.Frame2.OptionButton5.Value Then
          sXYZ = Y
        ElseIf UserForm1.Frame2.OptionButton6.Value Then
          sXYZ = Z
        Else
          sXYZ = 
        End If
        
        If sBlattname =  Then MsgBox Bitte Blattauswahl durchführen
        If sXYZ =  Then MsgBox Bitte Auswahl XYZ durchführen
      Loop While (sBlattname = ) Or (sXYZ = )
      Unload UserForm1
    
    End Function
    und zu guter letzt in->dieseArbeitsmappe':
    Code:
    Private Sub Workbook_Open()
      Call AuswahlBlattundXYZ
    End Sub
    Wo->anpassen' steht mußt deinen Gegebenheiten entsprechend ändern.

    Gruß Matjes  ;)
     
  6. Hochachtung :D

    Wow, Du bist wirklich eine Koriphäe...
    1000 Dank

    Häng gerade beim 2ten Frame!
    Ich habe bei Formulare Userform1 erstellt mit den 1ten 3 Buttons (optionsfelder)
    und in Eigenschaften von Userform bissl rumgespielt (Farbe etc) und in Caption den Name in Frame1 umbenannt.
    Doch wie erzeuge ich Frame2? ich will doch nicht alle 7 (2x3option + 1xok) Buttons in einem Frame?
    ich kann nur Userforms einfügen(Module/Klassenmodule)? Brauch mein Frame ein Textfeld?
    Hab als Modul dein UserformTest kopiert, doch
    -> Fehler beim Kompilieren:
    Methode oder Datenobjekt nicht gefunden.
    UserForm1.Frame1.OptionButton1.Value ist markiert und meine Methode Function BlattUnd...ist gelb unterlegt...
    ?
    (ich habe die OptionButtons im Frame1 nicht umbenannt; alle aufrufe in den Frame2 vorkommt habe ich mit-> weggelassen, weil ich ja kein Frame2 hinbekomme :( )
    Ich kann Deinen Code sogar einigermaßen lesen mml (hab in der Vorlesung Informatik für Ingenieure I+II u.a Java (das nötigste) gelernt, deshalb kann ich parallelen ziehen... :coolsmiley:).
    Wobei die Filter Idee schon echt heftig ist...

    Me.Hide für den CommandButton1 kann ich doch nirgends in den Eigenschaften erstellen, sondern dass steht im Code...
    Wofür is: subWorkbook_open()?

    PS: ich habe heute einen Reiter mit Content ergänzt und mit nem kleinen Inhaltsverzeichnis und entsprechenden Hyperlinks. Kann ich Deine geniale Planung irgendwie auf den Hyperlink beziehen lassen?
    also bei klick, öffnet der ja den entsprechenden Reiter und dann wählt der Benutzer XYZ?
    Brauch also nur 1 Frame mit XYZ und Ok!
    Gibts ein Makro dass immer ein eingestelltes Tabellenblatt (=Reiter) öffnet! Für mich: Content!
    (So dass halt jeder Benutzer sofort erstmal zu Content kommt, bevor er sich verirrt ... )

    Danke erstmal... :1

    Teste jetzt nochn bissl rum...
    Ich bin erstaunt was in Excel drin steckt...und da nutze ich ja noch nichmal Formeln...

    PPS: woher bist Du so unglaublich gut?
     
  7. Schick mir deine mail-Adresse dann bekommst du das Beispiel komplett mit Userform.

    Also nochmal zur Userform. Am besten die alte vorher löschen.

    a) Userform dem Projekt hinzufügen (müßte dann Userform1 heissen)
    b) auf der Werkzeugsammlung->Rahmen' suchen und anklicken
    Dann mit der Maus auf der Userform ein Rechteck aufziehen und loslassen.
    Jetzt ist auf der Userform ein Rahmen zu sehen und oben links steht frame1  ;)
    c) Optionsfeld auf der Werzeugsammlung anklicken
    Optionsfeld im frame1 3x einfügen

    d) Frame2 und 3 optionsbutton wie oben

    e) Command-Button

    Noch die Überschrift der userform1, der optionsfelder und des Cmd-Button anpassen - fertig.

    noch nicht ganz ;D
    einfach den Cmd_Button doppelt klicken, dann steht der Cursor schon in der _Click-Routine.

    zu
    Das ist das Ereignis, welches beim Öffnen der mappe ausgeführt wird.
    Wenn also die Mappe geöffnet wird, wird gleich die Function AuswahlBlattundXYZ aufgerufen.
    Gruß Matjes :)
     
  8. Du bist unheimlich ... GUT

    Danke...

    s.t.a.r.s.@gmx.de

    (wenn die net funktionieren sollte, wegen der Punkte, dann die hier: fuchs_matthias@hotmail.de)

    wow *kopfschüttel*

    MFg
     
Die Seite wird geladen...

Inhaltsabfrage über Speziallayout - Ähnliche Themen

Forum Datum
Windowsanmeldung über Aufgabenplanung Windows Server-Systeme 21. Okt. 2016
Java Downloader lässt sich nicht sauber installieren Software: Empfehlungen, Gesuche & Problemlösungen 5. Okt. 2016
Excel: Bereiche auf 'leer' Überprüfen Microsoft Office Suite 15. Sep. 2016
Update auf Windows 10 über Creation Tool Windows 7 Forum 13. Sep. 2016
Screenshots über mail konto Einstellungen Windows 10 Forum 20. Aug. 2016