Hallo liebe Forums-Mitglieder,
ich habe mich frisch hier angemeldet und schon ein paar Zeilen in den Vorstellungs-Thread geschrieben. Nun gehts an die Arbeit, ich brauche eure Hilfe.
[Hintergrund]
Ich soll für meinen Arbeitgeber eine Filter- und Suchfunktion mit Hilfe einer Excel-Userform (in Excel 2007 unter Win7) programmieren. Es existiert ein Excel-Tabellenblatt mit ca. 1600 Personen, denen jeweils diverse Daten zugeordnet sind (Name, Geburtsdatum, Teilnahme an verschiedenen Seminaren etc.). Insgesamt sind es rund 60 Daten-Items pro Person. Da die Filterung über die hauseigene Excel-Filterfunktion recht aufwendig ist, muss ich nun eine Userform programmieren, die alle benötigten Filter kompakt darstellt und ausführt. Die Suchergebnisse werden dann in ein zweites Tabellenblatt kopiert. Momentan klappt das alles schon sehr gut, aber im nachfolgend beschriebenen Fall komme ich nicht weiter.
[Problem/Frage]
Ich möchte in der Userform mit Hilfe zweier Textboxen ein Intervall festlegen, innerhalb dessen das Geburtsjahr der gesuchten Personen liegen muss (in die erste Textbox kommt z.B. "1960" und in die zweite Textbox kommt "1980", ich will dann eine Suche nach Personen mit Geburtsjahr 1960-1980 starten). Mein bisheriger Gedanke: Eine Schleife, die das Intervall durchläuft und im Tabellenblatt bei jeder Person eine Übereinstimmung des Geburtsjahres mit dem Intervall sucht. Wenn eine Übereinstimmung gefunden wurde, soll True zurückgegeben werden und dann gehts weiter zur nächsten Person.
Mein bisheriger Code (siehe unten) produziert keine Fehlermeldung, aber er findet nie etwas, obwohl passende Daten vorhanden sind.
Erläuterung:
"TB_vonJahr" ist die Textbox mit dem Anfang des Suchintervalls, "TB_bisJahr" analog dazu das Ende des Intervalls.
Wenn die Funktion fGeburtsjahr als True an die eigentliche Suchmaschinenfunktion zurückgegeben wird, kopiert die Suchmaschinenfunktion die Daten des Probanden in ein neues Tabellenblatt. Die Suchmaschinenfunktion läuft mit diversen anderen Filtern wie am Schnürchen, daran sollte es nicht liegen. Wo (in welcher Spalte) nach den Daten gesucht werden soll, ist in der Suchmaschinenfuntkion hinterlegt, das muss also nicht in die hier beschriebene Funktion.
Ich hoffe, bis hierhin sind sowohl Problem als auch gewünschter Zielzustand verständlich geworden und der ein oder andere hat einen Tipp parat. Alles, was ich bisher mit VBA programmiert habe, ist learning by doing; versucht euch deshalb bitte so einfach wie möglich auszudrücken
Vielen Dank!
Alex
ich habe mich frisch hier angemeldet und schon ein paar Zeilen in den Vorstellungs-Thread geschrieben. Nun gehts an die Arbeit, ich brauche eure Hilfe.
[Hintergrund]
Ich soll für meinen Arbeitgeber eine Filter- und Suchfunktion mit Hilfe einer Excel-Userform (in Excel 2007 unter Win7) programmieren. Es existiert ein Excel-Tabellenblatt mit ca. 1600 Personen, denen jeweils diverse Daten zugeordnet sind (Name, Geburtsdatum, Teilnahme an verschiedenen Seminaren etc.). Insgesamt sind es rund 60 Daten-Items pro Person. Da die Filterung über die hauseigene Excel-Filterfunktion recht aufwendig ist, muss ich nun eine Userform programmieren, die alle benötigten Filter kompakt darstellt und ausführt. Die Suchergebnisse werden dann in ein zweites Tabellenblatt kopiert. Momentan klappt das alles schon sehr gut, aber im nachfolgend beschriebenen Fall komme ich nicht weiter.
[Problem/Frage]
Ich möchte in der Userform mit Hilfe zweier Textboxen ein Intervall festlegen, innerhalb dessen das Geburtsjahr der gesuchten Personen liegen muss (in die erste Textbox kommt z.B. "1960" und in die zweite Textbox kommt "1980", ich will dann eine Suche nach Personen mit Geburtsjahr 1960-1980 starten). Mein bisheriger Gedanke: Eine Schleife, die das Intervall durchläuft und im Tabellenblatt bei jeder Person eine Übereinstimmung des Geburtsjahres mit dem Intervall sucht. Wenn eine Übereinstimmung gefunden wurde, soll True zurückgegeben werden und dann gehts weiter zur nächsten Person.
Mein bisheriger Code (siehe unten) produziert keine Fehlermeldung, aber er findet nie etwas, obwohl passende Daten vorhanden sind.
Erläuterung:
"TB_vonJahr" ist die Textbox mit dem Anfang des Suchintervalls, "TB_bisJahr" analog dazu das Ende des Intervalls.
Wenn die Funktion fGeburtsjahr als True an die eigentliche Suchmaschinenfunktion zurückgegeben wird, kopiert die Suchmaschinenfunktion die Daten des Probanden in ein neues Tabellenblatt. Die Suchmaschinenfunktion läuft mit diversen anderen Filtern wie am Schnürchen, daran sollte es nicht liegen. Wo (in welcher Spalte) nach den Daten gesucht werden soll, ist in der Suchmaschinenfuntkion hinterlegt, das muss also nicht in die hier beschriebene Funktion.
VB.NET-Quellcode
- Function fGeburtsjahr(Cell As Range) As Boolean
- Dim i As Long 'Variable für Anfang des Intervalls
- Dim j As Long 'Variable für Ende des Intervalls
- Dim c As Long 'Zählvariable
- Dim TestComp1 As Integer
- TestComp1 = StrComp(Cell, c, vbTextCompare)
- Me.TB_vonJahr = i
- Me.TB_bisJahr = j
- For c = i To j
- If TestComp1 = 0 Then
- fGeburtsjahr = True
- End If
- c = c + 1
- Next c
- If Cell = c And TestComp1 = 0 Then
- fGeburtsjahr = True
- End If
- End Function
Ich hoffe, bis hierhin sind sowohl Problem als auch gewünschter Zielzustand verständlich geworden und der ein oder andere hat einen Tipp parat. Alles, was ich bisher mit VBA programmiert habe, ist learning by doing; versucht euch deshalb bitte so einfach wie möglich auszudrücken
Vielen Dank!
Alex