Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1420to1424
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
Inhaltsverzeichnis

combobox mit recordset befüllen die 800ste

combobox mit recordset befüllen die 800ste
10.04.2015 01:27:09
Wusel
Hallo zusammen!
Es tut mir Leid, ich geh am Stock. Nach mehreren Stunden Recherche (hier und auch in anderen Foren) und x-fachem Rumprobieren bin ich immer noch nicht in der Lage diesen %&(/$§-Code zum Laufen zu bringen. Obwohl es wahrscheinlich alles sehr einfach ist. Ich glaube es fehlt nicht mehr viel :) Eigentlich ist alles was ich möchte eine Funktion(hier "testfunktion"), der ich einen SQL-Select als String füttere und die mir ein Recordset zurück gibt, mit dem ich dann nach Belieben verfahren kann.
Die Hauptfrage ist: Warum läuft das hier nicht?
    'Set rtest = ThisWorkbook.Worksheets("Ziel").Range("b2")
selectstr = "Select [STADT] from [Stadtinformationen_allgemein$] where PLZ =4626"
Set rs = testfunktion(selectstr)
'Call rscopy(rs, rtest)
Do While Not rs.EOF
Objektanzeige.STADT.AddItem rs.Fields("STADT")
rs.MoveNext
Loop
Das Recordset rs habe ich mit rscopy mal in ein Tabellenblatt geschrieben. Der Inhalt ist wie gewünscht eine Liste mit um die 10 Städtenamen. Diese hätte ich gerne im Dropdown meiner Combobox STADT auf dem Userform Objektanzeige, aber Excel möchte nicht wie ich will. Kann mich vielleicht hier jemand entwirren und mir sagen, warum das so ist? :)
Bonusfrage: Ich habe mir von Peter Haserodt von online-excel.de die folgende Funktion geborgt und etwas verändert. Im unteren Teil habe ich die close und = Nothing Zeilen auskommentiert, damit die Funktion auch tatsächlich mit dem Recordset des SQL-Querys rausrückt - ich muss gestehen ohne zu wissen warum. Ich bin über diverse Artikel gestolpert. Mal soll das Recordset nicht geschlossen werden, mal die Connection. Wenn man alles weglässt funktioniert's besonders gut :) NUr clever ist das wohl nicht... Kann mir das vielleicht jemand erläutern? Muss das evtl. zwingend an anderer Stelle nachgeholt werden?
Function testfunktion(strsqlselect As String) As ADODB.Recordset
Dim oAdoConnection As New ADODB.Connection
Dim oAdoRecordset As New ADODB.Recordset
Dim sAdoConnectString As String, sPfad As String
On Error GoTo Fehler
sPfad = ThisWorkbook.FullName
sAdoConnectString = "Provider=Microsoft.ACE.OLEDB.12.0; Extended      Properties='Excel 12. _
0 Xml;HDR=YES';Data Source=" & sPfad
Set oZielStartRange = ThisWorkbook.Worksheets("Ziel").Range("b2")
oAdoConnection.Open sAdoConnectString
With oAdoRecordset
.Source = strsqlselect
.ActiveConnection = oAdoConnection
.Open
End With
Set testfunktion = oAdoRecordset
Aufraeumen:
On Error Resume Next
'oAdoRecordset.Close
'oAdoConnection.Close
'Set oAdoRecordset = Nothing
'Set oAdoConnection = Nothing
Exit Function
Fehler:
MsgBox "Fehler: " & Err.Description
Resume Aufraeumen
End Function
Ich bin für jede Hilfe überaus dankbar und sage schon einmal "Danke" für jede Antwort, die Ihren Weg hierher findet :) Durch das viele Rumprobieren hab ich gerade echt den Faden verloren und "schwimme" nur noch *blubblub* Vielleicht wird es auch einfach Zeit für's Bett...
Euer Wusel

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: combobox mit recordset befüllen die 800ste
10.04.2015 08:43:19
Luschi
Hallo Wusel,
habe gerade ein Projekt in Abeit, bei der Daten aus einer Excel-Tabelle per ADOBO dynamisch in eine Combobox (ActiveX) eingelesen werden. Ich würde Dir helfen, wenn Du eine kleine Demodatei bereitstellst.
Leider verrätst Du nicht woher die Daten (Excel, Access, csv-Datei) kommen und ob die Combobox sich in einem Formular oder auf einem Tabellenblatt befindet.
Gruß von Luschi
aus klein-Paris

AW: combobox mit recordset befüllen die 800ste
10.04.2015 10:50:45
Wusel
Hallo Luschi und vielen Dank für das Angebot!
Ich habe mal meine eigentliche Datei etwas entmüllt und diese "Demo" hochgeladen: https://www.herber.de/bbs/user/96994.zip
Du findest meinen "Spielcode", indem Du im TB-Startmenü auf den Button "Neues Objekt hinzufügen" klickst. Das so aufgerufene UF besitzt unten links eine Combobox "PLZ" im Change-Event steckt der Code(Die Funktionen rscopy und testfunktion findest Du im Modul SQLquery). Die Idee war ursprünglich nach der User-Eingabe der PLZ die Stadt automatisch zu füllen (die Daten dafür liefert TB-Stadtinformationen_allgemein). Jetzt habe ich aber dummerweise nicht bedacht, dass eine PLZ mehrere Städte zurückgeben kann. Die neue Idee ist nach der PLZ-Eingabe einen Vorschlag in STADT zu schreiben. Dazu eine Liste aller Städte mit der eingegebenen PLZ, damit der User im Zweifelsfall komfortabel auswählen kann. Im Moment verwende ich zum Testen die fixe PLZ 4626 - später baue ich mir den SQL-String natürlich mit der Usereingabe zusammen :)
Ja, soviel zur Ausgangssituation. Jetzt bekomme ich nur mein Recordset nicht in meine Combobox geschrieben :( Hoffe Du hast eine Idee woran es liegt, ich weiß nicht mehr weiter :(
Sonnige Morgenkaffeegrüße
Wusel

Anzeige
AW: combobox mit recordset befüllen die 800ste
10.04.2015 22:08:40
Luschi
Hallo Wusel,
ich habe mal Folgendes gemacht.
- bei der Userformular-Initialisierung werden alle PLZ per ADO-SQL eingelesen
  (keine Doppelten)
- nach Plz-Auswahl werden die dazugehörigen Gemeinden in STADT per ADO-SQL eingelesen
  siehe Plz: 3229 & 3238
https://www.herber.de/bbs/user/97015.zip
Gruß von Luschi
aus klein-Paris

AW: combobox mit recordset befüllen die 800ste
13.04.2015 12:11:11
Wusel
Hallo Luschi,
vielen Dank für Deine Hilfe und Zeit! Ich bin am Wochenende leider nicht dazu gekommen mir das hier anzuschauen - aber jetzt :)
Deine Funktion macht im Prinzip schon alles was ich möchte, nur kommt sie mit einem "kleinen" Problem, das ich nicht zu lösen vermag :( Nämlich die Tastatureingabe einer PLZ durch den Anwender.
In Deinem Code habe ich das hier gefunden und ich vermute Du versuchst das damit abzufangen:
Application.SendKeys "~", False
Diese Lösung funktioniert bei mir leider nicht. Ich erhalte immer Fehler 3021, sobald ich eine Zahl in PLZ eintippe :( Hast Du vielleicht eine Idee woran das liegen könnte?
Grüße
Wusel

Anzeige
AW: combobox mit recordset befüllen die 800ste
13.04.2015 17:26:43
Luschi
Hallo Wusel,
habe jetzt noch Folgendes eingebaut:
- bei der Eingabe der PLZ per Tastatur, wird bei neu eingegebenen Ziffer geprüft,
  ob es eine PLZ mit der beginnenden Ziffernfolge überhaupt gibt
- wenn nein - dann kommt eine Fehler-/Hinweismeldung
- wenn ja - dann wird die Liste der PLZ neu eingelesen mit der beginnenden Ziffernfolge
und in der PLZ-Liste stehen dann nur noch diese Werte (diese wird auch aufgeklappt)
- ist die PLZ dann 4-stellig (warum nicht 5-stellig - wir Ossis müssen uns doch
für die führende '0' nicht ärgern!)
dann werden die dazugehörigen Orte rausgesucht
https://www.herber.de/bbs/user/97058.zip
Gruß von Luschi
aus klein-Paris

Anzeige
AW: combobox mit recordset befüllen die 800ste
13.04.2015 17:54:30
Luschi
Hallo Wusel,
habe noch eine Kleinigkeit verändert;
- gibt es zu 1er PLZ mehrere Orte, dann wird die Stadliste automatisch aufgeklappt
- wird eine falsche Ziffer in PLZ eingegeben, wird nach der Warnmeldung die letzte
  Ziffer automatisch gelöscht.
https://www.herber.de/bbs/user/97059.zip
Gruß von Luschi
aus klein-Paris

AW: combobox mit recordset befüllen die 800ste
13.04.2015 19:07:13
Wusel
Awww Luschi Du bist ein Genie!
Vielen, vielen Dank! Ich glaube bis ich auf das alles gekommen wäre, hätte ich noch einige graue Haare angesetzt! :) Ich habe nur noch eine letzte Frage, weil ich ja - wie Du sicher gemerkt hast - bei Weitem kein Vorzeigeprogrammierer bin :) Deine Umstellung von early auf late binding ist das eine reine Vorliebe oder Gewohnheit oder was veranlasst Dich dazu?
Danke schonmal für Deine Antwort!
Grüße!
Wusel

Anzeige
AW: combobox mit recordset befüllen die 800ste
13.04.2015 19:24:24
Luschi
Hallo Wusel,
'Late Binding' hat diese Nachteile:
- es gibt keine IntelliSense-Unterstützung beim Programmieren.
- beim Kompilieren kann keine Syntax-Prüfung vorgenommen werden.
- es können keine eingebauten Konstanten verwendet werden.
  diese müssen durch eigene Variablen und deren Werte ersetzt werden
- etwas langsamer, da erst die Bibliothek (Com-Schnittstelle) zur Laufzeit initialisiert werden muß
hat aber 1en entscheidenden Vorteil:
Wenn die Anwendung auf einem anderen Rechner ausgeführt wird, auf dem nicht die gleiche Version der Bibliothek installiert ist, sind keine Probleme zu erwarten uns der Vba-Code läuft trotzdem; d.h., dieses Programm läuft auch auf einem Rechner mit WindowsXP & ExcelXP.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: combobox mit recordset befüllen die 800ste
14.04.2015 20:37:02
Wusel
Super! Das verstehe sogar ich! Danke nochmals :)

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige