Inhaltsabfrage über Speziallayout

  • #1
H

Hudson

Bekanntes Mitglied
Themenersteller
Dabei seit
14.04.2005
Beiträge
146
Reaktionspunkte
0
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
Me.Hide für den CommandButton1 kann ich doch nirgends in den Eigenschaften erstellen, sondern dass steht im Code...
einfach den Cmd_Button doppelt klicken, dann steht der Cursor schon in der _Click-Routine.

zu
Wofür is: subWorkbook_open()?
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...

[email protected]

(wenn die net funktionieren sollte, wegen der Punkte, dann die hier: [email protected])

wow *kopfschüttel*

MFg
 
Thema:

Inhaltsabfrage über Speziallayout

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben