Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1696to1700
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
Userform combo und Textboxen abfragen
19.06.2019 19:57:14
Richard
Liebe Excelgemeinde,
anbei eine Musterdatei.Mochte gerne in meiner Userform mit 3 Comboboxen noch zusätzlich
eine Abfrage mit PLZ von...bis einbinden. Finde aber keine Lösung dazu.
Es wäre sehr nett wenn mich dabei jemand unterstützen könnte.
Vielen Dank schon einmal im Vorraus
Gruß Richard
https://www.herber.de/bbs/user/130496.xlsm

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform combo und Textboxen abfragen
19.06.2019 21:04:20
Rob
Hi Richard,
ich kann es mir morgen mal anschauen, wenn bis dahin noch keiner geantwortet hat.
Gruß, Rob
AW: Userform combo und Textboxen abfragen
19.06.2019 21:51:35
Richard
Hallo Rob,
Danke für die Antwort bin mal gespannt wie man sowas angeht
Gruß Richard
AW: Userform combo und Textboxen abfragen
20.06.2019 10:47:21
Sigi
Hallo Richard,
vorerst mal die versuch mal
Private Sub cmbplz_Click()
Dim Z1 As Long
Dim Z2 As Long
Dim PLZ1 As Long
Dim PLZ2 As Long
PLZ1 = Left(txtvon, 5)
PLZ2 = Left(txtbis, 5)
lst1.Clear
With ThisWorkbook.Sheets("Tabelle1")
If PLZ1 
Gruß
Sigi
AW: Userform combo und Textboxen abfragen
20.06.2019 11:15:58
Richard
Hallo Sigi,
vielen Dank für die Zusendung,ich habe nur das Problem wie binde ich es in die UF ein dass es
mit den restlichen abhängigen Comboboxen zusammenspielt.
Der Sinn ist ich wähle z.b. mit der Combobox einen ADM aus und danach soll ich innerhalb dieses
Ergebnisses auch noch die PLZ eingrenzen können.
Gruß Richard
Anzeige
AW: Userform combo und Textboxen abfragen
20.06.2019 13:38:04
Sigi
Hallo Richard,
ich weiss nicht genau was Du willst.
Wenn Dir bei Auswahl "ADM" die niedrigste und höchste PLz angezeigt werden soll, muß erstmals die Tabelle nach PLZ aufsteigend, sortiert werden. Danach kannst Du folgendes versuchen
ADM wurde ausgewählt
Dim loLst As Long
Dim listArr() As Double
If Me.cbb1.ListIndex = -1 Then Exit Sub
Call Listbox_fuellen
Call AuswahlListeOrt
Call AuswahlListeKlinik
With Me.lst1
ReDim listArr(0 To .ListCount - 1)
For loLst = 0 To .ListCount - 1
listArr(loLst) = .List(loLst, 4)
Next
End With
Me.txtvon = Application.max(listArr)
Me.txtbis = Application.min(listArr)
Gruß
Sigi
Anzeige
AW: Userform combo und Textboxen abfragen
20.06.2019 14:47:54
Richard
Hallo Sigi,
ich versuche es noch einmal zu erklären:
1,Ein ADM betreut z.B. das Gebiet Bayern mit den 8er Postleitzahlen.Der ADM wird mit der Combobox gesucht - Nun soll innerhalb seines Gebietes nur die Adressen im PLZ Gebiet Z.B. 80000 bis 81000 gesucht werden.
2, Wenn Möglich im der gesamten gelisteten Datei suche NUR nach PLZ von...bis (unabhängig vom ADM)
Die Nr.2 als Codeschnipsel habe ich funktioniert auch einwandfrei wenn ich es separat (eigene UF)laufen lasse. Aber ich möchte gerne diese zwei in einer UF laufen lassen.
Ich hoffe es war verständlich
Gruß Richard
Anzeige
AW: Userform combo und Textboxen abfragen
20.06.2019 16:18:22
Sigi
Hallo Richard,
für die Postleitzahl "8" gibt es 10842 Einträge in meiner Deutschlandliste von 83368!
Wenn ich in ADM "A" auswähle, dann soll was gesucht werden?
Unter "A" gibt es die PLZ 52057 sowie 73430
Unter "C" hast Du ebenfalls 73430
Wie soll die Zuordnung statt finden?
Gruß
Siig
AW: Userform combo und Textboxen abfragen
20.06.2019 16:46:35
Richard
Hallo Sigi,
das ist ja nur eine Musterdatei,der Außendienst weiß da Bescheid es gibt immer wieder Überschneidungen.
Bleiben wir bei Bayern, hier gibt es einen Teil von PLZ6 aber auch PLZ 7 und 9 das postalisch zu Bayern gehört aber mit solchen Unwägbarkeiten muss man leben können. Jedes Gebiet hat seine Besonderheiten.
Mir genügt nur von...bis in einem bestimmten Gebiet und keine Verschachtelung
Gruß Richard
Anzeige
AW: Userform combo und Textboxen abfragen
21.06.2019 09:07:43
Richard
Hallo Sigi,
habe mich wahrscheinlich etwas umständlich ausgedrückt. Also nochmal
ADM wird ausgewählt - Ergebnis ist in der Listbox dann soll vom Ergebnis ein PLZ Gebiet(von...bis) noch einmal gefiltert und angezeigt werden.
Ich hoffe es war verständlich
Gruß Richard
AW: Userform combo und Textboxen abfragen
21.06.2019 22:32:08
Rob
Hi Richard,
kennst Du SQL-Anweisungen? Du könntest Dir z.B. ein Hilfsworksheet erstellen, in das Du Deine nach ADM gefilterte Listbox kopierst, um anschl. über ADODB mittels SQL-Befehl die PLZ von bis einzugrenzen. Das Ergebnis packst Du in ein Recordset um es dann wieder in Deine Listbox auszugeben. Ich weiß allerdings nicht, ob das direkt geht oder ob Du wieder den Umweg über ein Worksheet gehen musst. Das sollte auf jeden Fall funktionieren.
Grüße, Rob
Anzeige
AW: Userform combo und Textboxen abfragen
22.06.2019 12:22:48
Richard
Hallo Rob,
vielen Dank für Deine Mühe und dass Du Dich nochmal gemeldest hast. Du hast mich auf eine Idee gebracht mit dem Auslagern von Daten. Ich habe einen Code um PLZ von bis alleine laufen zu lassen vielleicht kann ich über diesen Umweg was erreichen.
Danke und schönes WoEnde Richard
AW: Userform combo und Textboxen abfragen
22.06.2019 14:15:51
Rob
Wenn Du es doch noch mit SQL und ADODB versuchen möchtest, dann hier der passende Code dazu. Bis auf die Dynamik ist alles enthalten. Habe es getestet und es funktioniert sehr gut!

Option Explicit
Sub FilterNachPLZ()
'Verweis zu Microsoft Data Object 6.1 Library oder Late Binding
Dim ADODBConnection As New ADODB.Connection
Dim ADODBRecordset As New ADODB.Recordset
Dim sqlQuery As String, ConnectionString As String, FilePath As String
'Nach ADM gefilterte Listbox in das Array Filtered ADM übertragen
Dim FilteredADM()
Dim SizeLst1 As Integer
SizeLst1 = UserForm1.lst1.ListCount - 1
ReDim FilteredADM(0 To SizeLst1)
FilteredADM() = UserForm1.lst1.List
'Das Hilfsarbeitsblatt für die Datenauslagerung erstellen -> Namen entsprechend ändern
Worksheets.Add(After:=ThisWorkbook.Sheets(Sheets.Count)).Name = "Test"
With ThisWorkbook.Sheets("Test")
'    .Visible = False
.Range("E1") = "PLZ"
.Range(Cells(2, 1), (Cells(UBound(FilteredADM, 1) + 2, UBound(FilteredADM, 2)))) =  _
FilteredADM()
End With
FilePath = ThisWorkbook.FullName
ConnectionString = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & FilePath & ";HDR=Yes';"
sqlQuery = "Select * from [Test$] WHERE PLZ BETWEEN 52000 and 59999"
ADODBConnection.Open ConnectionString
With ADODBRecordset
.Source = sqlQuery
.ActiveConnection = ADODBConnection
.Open
End With
'Die Suchergebnisse aus dem SQL-Befehl werden hier in Tabelle3 kopiert. Kannst Du  _
entsprechend anpassen!
Sheets("Tabelle3").Range("A1").CopyFromRecordset ADODBRecordset
'Anschl. die Werte aus Tabelle 3 in die Listbox übertragen
UserForm1.lst1.List = Sheets("Tabelle3").Range("A1").CurrentRegion.Value
End Sub

Anzeige
AW: Userform combo und Textboxen abfragen
22.06.2019 14:17:24
Rob
Es gibt hierzu auch ein gutes Video von Bernd Held (VBA-Kracher) auf Youtube: 0044. Excel-VBA: Bestimmte Zeilen einer Tabelle via SQL abfragen (blitzschnell), https://www.youtube.com/watch?v=g8jDBo0CFG8
AW: Userform combo und Textboxen abfragen
22.06.2019 21:12:21
Richard
Hallo Rob,
vielen Dank für Deine Mühe.Lach mich bitte nicht aus - wo muss ich den Code einbauen? habe es auf den ButtonPLZ gelegt passiert nichts
Gruß Richard
AW: Userform combo und Textboxen abfragen
22.06.2019 23:44:02
Rob
Hi Richard,
Du kannst ein zweites Modul aufmachen und anschließend in cmbplz_Click() die Sub wie folgt aufrufen:

Private Sub cmbplz_Click()
Call Modul2.FilterNachPLZ
End Sub
Ich habe Dir noch die Dynamik eingebaut und nen Bug behoben. Hier der vollständige Code für Copy/Paste. Ur welcome!

Option Explicit
Sub FilterNachPLZ()
Application.ScreenUpdating = False
'Verweis zu Microsoft Data Object 6.1 Library oder Late Binding
Dim ADODBConnection As New ADODB.Connection
Dim ADODBRecordset As New ADODB.Recordset
Dim sqlQuery As String, ConnectionString As String, FilePath As String
'Nach ADM gefilterte Listbox in das Array Filtered ADM übertragen
Dim FilteredADM()
Dim SizeLst1 As Integer
SizeLst1 = UserForm1.lst1.ListCount - 1
ReDim FilteredADM(0 To SizeLst1, 0 To 5)
FilteredADM() = UserForm1.lst1.List
'Das Hilfsarbeitsblatt für die Datenauslagerung erstellen -> Namen entsprechend ändern
Worksheets.Add(After:=ThisWorkbook.Sheets(Sheets.Count)).Name = "AuslagerungDaten"
With ThisWorkbook.Sheets("AuslagerungDaten")
'        .Visible = False
.Range("E1") = "PLZ"
.Range(Cells(2, 1), (Cells(UBound(FilteredADM, 1) + 2, UBound(FilteredADM, 2) + 1))) =  _
FilteredADM()
End With
FilePath = ThisWorkbook.FullName
ConnectionString = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & FilePath & ";HDR=Yes';"
sqlQuery = "Select * from [AuslagerungDaten$] WHERE PLZ BETWEEN " & UserForm1.txtvon.Text &  _
" and " & UserForm1.txtbis.Text & ""
ADODBConnection.Open ConnectionString
With ADODBRecordset
.Source = sqlQuery
.ActiveConnection = ADODBConnection
.Open
End With
'Die Suchergebnisse aus dem SQL-Befehl werden hier in Tabelle3 kopiert. Kannst Du  _
entsprechend anpassen!
With Sheets("Tabelle3")
.UsedRange.Delete
.Range("A1").CopyFromRecordset ADODBRecordset
'Anschl. die Werte aus Tabelle 3 in die Listbox übertragen
If Not IsEmpty(.Range("A1")) Then
UserForm1.lst1.List = .Range("A1").CurrentRegion.Value
.UsedRange.Delete
Else
MsgBox "Bitte geben Sie einen gültigen PLZ-Bereich von->bis ein!", vbInformation
End If
End With
'Abschließend Auslagerungs-Arbeitsblatt wieder löschen
Sheets("AuslagerungDaten").Delete
End Sub

Anzeige
AW: Userform combo und Textboxen abfragen
22.06.2019 23:49:08
Rob
PS: Denk daran noch den Verweis zu Microsoft Data Object 6.1 Library für Early Binding zu setzen. Ansonsten müsste man den Code für Late Binding umschreiben. Wenn Du das Makro auf verschiedenen Rechner ausführen möchtest, macht Late Binding aber auf jeden Fall Sinn.
AW: Userform combo und Textboxen abfragen
23.06.2019 15:17:46
Richard
Hallo Rob,
vielen Dank für deine große Unterstützung funktioniert einwandfrei. Das setzen der Early Binding hab ich nicht gefunden.Wo kann man es einstellen.
Gruss Richard
AW: Userform combo und Textboxen abfragen
23.06.2019 20:27:11
Rob
Hallo Richard,
siehe nachfolgender Code für Late Binding:

'Verweis zu Microsoft Data Object 6.1 Library oder Late Binding
'    Dim ADODBConnection As New ADODB.Connection
Dim ADODBConnection As Object
'    Dim ADODBRecordset As New ADODB.Recordset
Dim ADODBRecordset As Object
Dim sqlQuery As String, ConnectionString As String, FilePath As String
Set ADODBConnection = CreateObject("ADODB.Connection")
Set ADODBRecordset = CreateObject("ADODB.Recordset")
PS: Habe Dir noch einen Errorhandler eingebaut, für den Fall der Fälle. Am besten die ganze Sub mit Copy/Paste in das Modul einfügen:

Option Explicit
Sub FilterNachPLZ()
Application.ScreenUpdating = False
On Error GoTo Errhandler
'Verweis zu Microsoft Data Object 6.1 Library oder Late Binding
'    Dim ADODBConnection As New ADODB.Connection
Dim ADODBConnection As Object
'    Dim ADODBRecordset As New ADODB.Recordset
Dim ADODBRecordset As Object
Dim sqlQuery As String, ConnectionString As String, FilePath As String
Set ADODBConnection = CreateObject("ADODB.Connection")
Set ADODBRecordset = CreateObject("ADODB.Recordset")
'Nach ADM gefilterte Listbox in das Array Filtered ADM übertragen
Dim FilteredADM()
Dim SizeLst1 As Integer
SizeLst1 = UserForm1.lst1.ListCount - 1
ReDim FilteredADM(0 To SizeLst1, 0 To 5)
FilteredADM() = UserForm1.lst1.List
'Das Hilfsarbeitsblatt für die Datenauslagerung erstellen -> Namen entsprechend ändern
Worksheets.Add(After:=ThisWorkbook.Sheets(Sheets.Count)).Name = "AuslagerungDaten"
With ThisWorkbook.Sheets("AuslagerungDaten")
'        .Visible = False
.Range("E1") = "PLZ"
.Range(Cells(2, 1), (Cells(UBound(FilteredADM, 1) + 2, UBound(FilteredADM, 2) + 1))) =  _
FilteredADM()
End With
FilePath = ThisWorkbook.FullName
ConnectionString = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & FilePath & ";HDR=Yes';"
sqlQuery = "Select * from [AuslagerungDaten$] WHERE PLZ BETWEEN " & UserForm1.txtvon.Text &  _
" and " & UserForm1.txtbis.Text & ""
ADODBConnection.Open ConnectionString
With ADODBRecordset
.Source = sqlQuery
.ActiveConnection = ADODBConnection
.Open
End With
'Die Suchergebnisse aus dem SQL-Befehl werden hier in Tabelle3 kopiert. Kannst Du  _
entsprechend anpassen!
With Sheets("Tabelle3")
.UsedRange.Delete
.Range("A1").CopyFromRecordset ADODBRecordset
'Anschl. die Werte aus Tabelle 3 in die Listbox übertragen
If Not IsEmpty(.Range("A1")) Then
UserForm1.lst1.List = .Range("A1").CurrentRegion.Value
'Anschließend Auslagerungs-Arbeitsblatt wieder löschen
.UsedRange.Delete
Else
MsgBox "Bitte geben Sie einen gültigen PLZ-Bereich von->bis ein!", vbInformation
End If
End With
Sheets("AuslagerungDaten").Delete
Exit Sub
Errhandler:
MsgBox "Fehlerbeschreibung:" & Err.Description, vbExclamation
Sheets("AuslagerungDaten").Delete
End Sub

Anzeige
AW: Userform combo und Textboxen abfragen
23.06.2019 20:59:13
Rob
Noch ggf. eine Ergänzung, damit im Falle eines Eingabefehlers (Buchstabe anstelle Zahl) die Sub nicht ausgeführt wird und es somit auch zu keiner Fehlermeldung kommt, kannst Du Dein Button-Event mit einer IsNumeric Abfrage ergänzen:

Private Sub cmbplz_Click()
If IsNumeric(Me.txtvon) And IsNumeric(Me.txtbis) Then
Call Modul2.FilterNachPLZ
Else
MsgBox "Bitte geben Sie eine gültige PLZ ein!", vbExclamation
End If
End Sub
Außerdem würde ich im Errhandler noch das Löschen des Auslagerungs-Arbeitsblattes davon abhängig machen, ob es überhaupt existiert. Ansonsten hast Du den nächsten vorprogrammierten Crash ohne Meldung:

Errhandler:
MsgBox "Fehlerbeschreibung:" & Err.Description, vbExclamation
If Sheets(Sheets.Count).Name = "AuslagerungDaten" Then
Sheets("AuslagerungDaten").Delete
 End If

Anzeige
AW: Userform combo und Textboxen abfragen
24.06.2019 11:09:37
Richard
Hallo Rob,
vielen vielen Dank für Deine Mühe war echt toll.Den Code muss ich mir in ruhiger Stunde durchleuchten.
Gruß Richard
AW: Userform combo und Textboxen abfragen
24.06.2019 11:44:54
Rob
Der Vorteil von ADODB und SQL-Anweisungen liegt in der Performance - das geht blitzschnell. Schau Dir das ruhig nochmal näher an.
Grüße und viel Erfolg,
Rob

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige