Autor Thema: VBA Listbox filtern mit mehreren Comboboxen  (Gelesen 17051 mal)

Whiterabbit

  • Newbie
  • *
  • Beiträge
    : 15
Zunächst vielen, vielen Dank!

ich werde es mir heute oder morgen Abend genauer anschauen und gucken, was ich noch so nettes einbauen kann.
Sieht auf jeden Fall Klasse aus!  8)

Ich melde mich schnellst möglich zurück!


Viele Grüße
Whiterabbit
 
IP gespeichert

Whiterabbit

  • Newbie
  • *
  • Beiträge
    : 15
Hallo maninweb,

Bitte entschuldige meine sehr späte Rückmeldung...!
Nach meiner hochzeit und meinen Flitterwochen konnte ich erst jetzt wieder online gehen.
Also noch einmal vielen, vielen Dank für Deine Hilfe!!!  8)

ich habe mir jetzt aus der Grunddatei eine sehr flexible und aufschlussreiche Datenbank gebastelt.
Aber, wie bereits erwähnt, habe ich noch kleine Features, die ich benötige.

Folgende Fragen zu weiteren Features meinerseits, die ich erst probieren möchte, wenn du mir sagst, dass es funktionieren würde:
- ist es möglich in der Userform unter dem Reiter "Payroll" ein Suchfeld zu integrieren, mit dem man zusätzlich nach einzelnen Namen oder Begriffen in der Grunddatei suchen und filtern kann?
(Also ein pendant zu den bereits integrierten ComboBoxen)
- ist es möglich eine weitere weitere ListBox mit entsprechenden Filterungen unter dem Reiter "Planning" einzubauen?
(analog zu dem Reiter "Payroll")

Je nachdem, wie Du meine Fragen beantwortest, würde ich mich selbst daran probieren und Dir meine, hoffentlich funktionierenden Ergebnisse, zum drüberschauen überreischen. :-)


Vielen Dank im Voraus & viele Grüße
WR
 
IP gespeichert

Werbung

Whiterabbit

  • Newbie
  • *
  • Beiträge
    : 15
Hallo maninweb, hallo User,

anbei findest Du meine aktuelle Datei.
Die erste Page der UserForm ist quasi fertig. Hier habe ich nur noch zwei Fragen:
- Sortierung der ComboBoxen funktioniert nicht mehr, woran könnte das liegen?
- ich habe herausgefunden, wie man über Comboboxen einen Druck erzeugt...jedoch ist meine derzeitige Einstellung etwas dürftig!
  hättest Du eine Idee, wie ich eine automatische Druckanpassung an ein A4-Blatt vornehmen kann (Querformat - Landscape)?

Die zweite Page soll ähnlich wie die erste aussehen.
Hier habe ich versucht die Daten (VBA) der ersten Page zu addaptieren...jedoch ohne Erfolg...ich habe sie wieder gelöscht, da eine Fehlermeldung nach der anderen kam.  ::)
- Muss ich hier eine strickte Trennung zu den bereits bestehenden VBA-Konfigurationen vornehmen und evtl. die zweite Page über ein Modul oder ähnliches konfigurieren?

Danke & Gruß
Whiterabbit
 
IP gespeichert

maninweb

  • Microsoft Excel MVP
  • Supermoderator
  • Guru
  • *****
  • Beiträge
    : 1.042
  • Microsoft Excel MVP
    • Excel Ticker
Hallo,

naja, Sortieren geht deshalb nicht mehr, weil Du die Prozedur rausgenommen hast. Zu der Druckanpassung müsste ich selbst recherchieren,
weshalb ich so erstmal nichts dazu sagen kann. Persönlich drucke ich nie UserFormen aus. Was die zweite Seite betrifft, nö, da gibt's eigentlich
nichts konfigurationsmäßiges zu beachten, ausser dass die Steuelemente dann anders als auf der ersten Seite heißen müssen und Du gegebenfalls
auch die Füllprozedur duplizieren müsstes, wenn beide Seiten völlig unabhängig voneinander sein müssen.

Kannst ja mal Deinen Versuch hier reinstellen, dann können wir mal gucken ...

Gruß

Mein Buch ist erschienen - Microsoft Excel VBA Programmierung - für Excel 2007 bis 2013 - auch als E-Book.
 
IP gespeichert

Whiterabbit

  • Newbie
  • *
  • Beiträge
    : 15
Hallo maninweb, hallo User,

anbei der "Versuch" die Sortierung, wie zuvor in Deiner Datei, wieder einzubinden.
...Fehlermeldung bei "SortArrayFromRange" = "Fehler beim Kompilieren: Sub oder Function nicht definiert"...
Ich kann nicht finden, was ich vergessen- oder falsch gemacht habe. Ich habe meine und Deine Datei nebeneinander gelegt und sehe keine abweichung.

Morgen mache ich mich an die zweite MultiPage und stelle Dir das Ergebnis rein...ist echt hart...eine eigene Welt dieses VBA!  :-\


Danke & Gruß
Whiterabbit
 
IP gespeichert

maninweb

  • Microsoft Excel MVP
  • Supermoderator
  • Guru
  • *****
  • Beiträge
    : 1.042
  • Microsoft Excel MVP
    • Excel Ticker
Hallo,

Du hast vergessen, die Prozedur als solches wieder einzubinden. Siehe meine letzte Datei hier aus dem Thread.
Folgendes (gekürzt) muss in das Modul wieder rein...

Code: Visual Basic
  1. Private Function SortArrayFromRange(ByRef Data, Column As Long, Lower, Upper) As Long
  2. :
  3. :

Ausserdem hast Du den Code für's Einlesen in die Comboboxen so verändert, dass es dann egal wird,
ob die Arrays sortiert werden oder nicht. Denn nun verwendest Du gar nicht mehr die sortieren Arrays.
D.h. das musst Du wiederherstellen.

Dann noch als Tipp: wenn die Daten in der Ausgangstabelle #NV's beinhalten, kann das Array nicht
korrekt eingelesen werden und die Sortering schlägt fehl. Hier musst Du dann Deine Formeln z.B.
mit WENNFEHLER kapseln. Beispiel:

Code: Excel
  1. =WENNFEHLER(SVERWEIS([@CostC];Hilfstabelle!$A$2:$C$200;3;FALSCH);"")

Gruß
Mein Buch ist erschienen - Microsoft Excel VBA Programmierung - für Excel 2007 bis 2013 - auch als E-Book.
 
IP gespeichert

Whiterabbit

  • Newbie
  • *
  • Beiträge
    : 15
Hallo zusammen,

anbei mein Versuch die zweite Listbox zu befüllen...Hat natürlich nicht so geklappt, wie gewünscht.
Ich habe die zweite Listbox in der Userform befüllen können, jedoch sind die Daten der ersten ListBox mit den Daten der zweiten Listbox vermischt. die zweite ListBox stimmt komischerweise...ich sehe langsam in dem VBA nicht mehr durch...
Des Weiteren ist in den ComboBoxen teilweise keine Auswahl außer "Alle" möglich.

Ich tippe, dass ich Verweise vergesen oder falsch gesetzt habe.

So soll die Verknüpfung eigentlich aussehen:
Listbox 1 = ListBoxLOGA (Daten aus Reiter "TiRo_Gehaltsreport_Part1")
- 1. CB = Cluster(s)
- 2. CB = Department(s)
- 3. CB = CostC(s)
- 4. CB = Employee(s)
- 5. CB = Job(s)
Listbox 2 = ListBoxPlanning (Daten aus Reiter "Planning")
- 1. CB = BP(s)
- 2. CB = CostCenter(s)
- 3. CB = Nam1(s)
- 4. CB = Role(s)

Wäre klasse, wenn mir hier wieder jemand helfen könnte...maninweb :-)

Noch eine Sache:
--> Erhöhung der Breite der ListBox-Spalten
--> wo / wie kann ich das einbauen?
-->(die Anzahl der Spalten wird sich nämlich noch reduzieren)


Vielen Dank im Voraus & viele Grüße
Whiterabbit
 
IP gespeichert

maninweb

  • Microsoft Excel MVP
  • Supermoderator
  • Guru
  • *****
  • Beiträge
    : 1.042
  • Microsoft Excel MVP
    • Excel Ticker
Hallo,

das Projekt nimmt langsam eine Dimension an, wo es (für mich jedenfalls) zu aufwändig wird, dies im Rahmen eines
Forumsbeitrags zu betreuen.

Deshalb nur kurz, was mir aufgefallen ist. Generell ist es so, dass beide Listboxen unabhängig voneinander agieren
sollten und somit selbstständige Einheiten bilden. Deshalb ist der Code auch so zu behandeln. Aktuell hast Du z.B.
den Code gemischt, Beispiel:

Code: Visual Basic
  1. '   Anlagen...
  2.    
  3.     With ThisWorkbook.Worksheets("TiRo_Gehaltsreport_Part1")
  4.     With ThisWorkbook.Worksheets("Planning")
  5.     :
  6.  

Der Code innerhalb des With-Block berücksichtigt also nur die Tabelle "Planning". Die Struktur müsste wie folgt
aussehen:

Code: Visual Basic
  1. '   Anlagen...
  2.    
  3.     With ThisWorkbook.Worksheets("TiRo_Gehaltsreport_Part1")
  4.    
  5. '   Hier der Code für TiRo_Gehaltsreport_Part1
  6.    
  7.     End With
  8.  
  9.     With ThisWorkbook.Worksheets("Planning")
  10.    
  11. '   Hier der Code für Planning
  12.    
  13.     End With
  14.  

Das Separieren gilt auch für das Füllen der Collections usw. Du könntest z.B. zwei Prozeduren machen und
diese dann in UserForm_Initialize() aufrufen. Beispiel:

Code: Visual Basic
  1.   Private Sub InitializePayroll()
  2.  
  3. '   Enthält den Code von vorheriger Version für UserForm_Initialize
  4. '   und zwar nur für die erste Seite im Multipage.
  5.  
  6.   End Sub
  7.  
  8.   Private Sub InitializePlanning()
  9.  
  10. '   Enthält einen für Planning angepassten Code von Payroll
  11. '   und zwar auch mit eigenen Variablen
  12.  
  13.   End Sub
  14.  
  15.   Private Sub UserForm_Initialize()
  16.    
  17.     InitializePayroll
  18.     InitializePlanning
  19.    
  20.   End Sub
  21.  
Der Code hier oben ist nur ein Beispiel. Insgesamt: trenne Deinen Code in kleinere Einheiten, sodass
Du besser den Überblick behalten kannst.

Gruß
Mein Buch ist erschienen - Microsoft Excel VBA Programmierung - für Excel 2007 bis 2013 - auch als E-Book.
 
IP gespeichert

Whiterabbit

  • Newbie
  • *
  • Beiträge
    : 15
Hallo maninweb,

eine letzte Frage habe ich noch...danach bin ich so gut wie fertig und Du hast Ruhe vor mir.  ;D
Ich habe alles so umgesetzt, wie Du es mir geschildert hast.
ListBoxen sind jetzt beide korrekt befüllt und die Filterung in Page 1 (Payroll) funktioniert wunderbar!
Page 2 (Planning) steht auch, jedoch funktioniert die Filterung nicht. Er zeigt nur als Auswahl "ALLE".
Arrays und objects sind alle hinterlegt.
Kann der Fehler evtl. hier liegen:
_____
Private Sub InitializePayroll() / Private Sub InitializePlanning()
...
'   Seite...   
    MultiPage1.Value = 0 (ist bei beiden identisch)
...
End Sub
_____

Wenn das funktioniert benötige ich keine weitere Hilfe für die Finalisierung!  8) ;D


Vielen Dank im Voraus & viele Grüße
Whiterabbit
 
IP gespeichert

maninweb

  • Microsoft Excel MVP
  • Supermoderator
  • Guru
  • *****
  • Beiträge
    : 1.042
  • Microsoft Excel MVP
    • Excel Ticker
Hallo,

also wenn Du Dich nicht mit der letzten Datei beim Hochladen vertan hast, ist immer noch folgender Code drin...

Code: Visual Basic
  1. '   Anlagen...
  2.    
  3.     With ThisWorkbook.Worksheets("TiRo_Gehaltsreport_Part1")
  4.     With ThisWorkbook.Worksheets("Planning")
  5.     :
  6.  

Das kann nicht klappen, denn .Cells(...) bezieht sich auf den With-Block. Deshalb, etwas aufgebohrter ...

Code: Visual Basic
  1. '   Alles was Payroll ist in diesen With-Block...
  2.    
  3.     With ThisWorkbook.Worksheets("TiRo_Gehaltsreport_Part1")
  4.          
  5. '     Filter zurücksetzen...
  6.      
  7.       ThisWorkbook.Worksheets("TiRo_Gehaltsreport_Part1") _
  8.      .ListObjects("Payroll").AutoFilter.ShowAllData
  9.    
  10. '     Anzahl...
  11.      
  12.       lngAnzahl = .Cells(Rows.Count, 1).End(xlUp).Row
  13.      
  14. '     Payroll...
  15.      
  16.       arrPayroll = .Range(.Cells(1, 1), .Cells(lngAnzahl, 18)).Value
  17.       arrPayrollHeads = .Range(.Cells(1, 1), .Cells(1, 18)).Value
  18.  
  19. '     Einzelspalten...
  20.      
  21.       arrClusters = .Range(.Cells(2, 17), .Cells(lngAnzahl, 17)).Value
  22.       arrCostCs = .Range(.Cells(2, 3), .Cells(lngAnzahl, 3)).Value
  23. '     :
  24. '     :
  25.      
  26. '     Sortieren...
  27.      
  28.       SortArrayFromRange arrClusters, 1, LBound(arrClusters, 1), UBound(arrClusters, 1)
  29.       SortArrayFromRange arrCostCs, 1, LBound(arrCostCs, 1), UBound(arrCostCs, 1)
  30. '     :
  31. '     :
  32.  
  33.     End With
  34.    
  35. '   Alles was Planning ist in diesen With-Block...
  36.    
  37.     With ThisWorkbook.Worksheets("Planning")
  38.      
  39. '     Filter zurücksetzen...
  40.      
  41.       ThisWorkbook.Worksheets("Planning") _
  42.      .ListObjects("Planning").AutoFilter.ShowAllData
  43.    
  44. '     Anzahl...
  45.      
  46.       lngAnzahl = .Cells(Rows.Count, 1).End(xlUp).Row
  47.  
  48. '     Planning...
  49.      
  50.       arrPlanning = .Range(.Cells(1, 1), .Cells(lngAnzahl, 16)).Value
  51.       arrPlanningHeads = .Range(.Cells(1, 1), .Cells(1, 16)).Value
  52.      
  53. '     Einzelspalten...
  54.      
  55. '     arr__PLanning_1 = .Range(.Cells(2, 17), .Cells(lngAnzahl, 17)).Value
  56. '     arr__PLanning_2 = .Range(.Cells(2, 3), .Cells(lngAnzahl, 3)).Value
  57. '     :
  58. '     :
  59.      
  60. '     Sortieren...
  61.      
  62. '     SortArrayFromRange arr__PLanning_1, 1, LBound(arr__PLanning_1, 1), UBound(arr__PLanning_1, 1)
  63. '     SortArrayFromRange arr__PLanning_2, 1, LBound(arr__PLanning_2, 1), UBound(arr__PLanning_2, 1)
  64. '     :
  65. '     :
  66.      
  67.     End With
  68.  

Der Code, der den With-Blocks folgt, musst Du entsprechend überprüfen. Wie gesagt, betrachte die zwei Seiten
im Multipage als unabhängige Einheiten. So, als würdest Du zwei UserForms programmieren, einmal für Payroll
und einmal für Planning. Nur dass eben halt jetzt nun beides in zwei Seiten einer Multipage ist.

Gruß
 
Mein Buch ist erschienen - Microsoft Excel VBA Programmierung - für Excel 2007 bis 2013 - auch als E-Book.
 
IP gespeichert

Werbung

Whiterabbit

  • Newbie
  • *
  • Beiträge
    : 15
Hallo,

anbei zwei Versionen.

Version 1 (....neu1.xlsm):
Private Sub UserForm_Initialize()
...
With...Gehaltsreport... (nur Payroll)
End With
With...Planning... (nur Planning)
...
End Sub

Version 2 (....neu.xlsm):
Private Sub InitializePayroll()
Private Sub InitializePlanning()
(beide Initialisierungen komplett voneinander getrennt)

Beide Versionen funktionieren nicht --> keine Auswahlmöglichkeit bei Page 2 "Planning".

in beiden Versionen habe ich penibel darauf geachtet, dass alles identisch ist.
irgendetwas übersehe ich jedoch...und ich weiß nicht was.  :-\

erster Anhang = ...neu.xlsm
zweiter Anhang folgt gleich im Anschluss (beide Dateien zu groß für einen Upload)!


Vielen Dank & viele Grüße
Whiterabbit
 
IP gespeichert

Whiterabbit

  • Newbie
  • *
  • Beiträge
    : 15
hier der zweite Anhang - ...neu1.xlsm.
 
IP gespeichert

Werbung

 

An- und Abmeldung

 
 

Tools

Werbung