PromiseYou Geschrieben 18. August 2010 Geschrieben 18. August 2010 Hallo Zusammen, Ich hab nen Problem mit VBA unter Access. In einem Formular, was ich in Excel erstellt, und dann im Access importiert habe gibt es viele Stuerelemente. Ich kann auch sämtliche Steuerlemente füllen (von hand), nur bei der Listbox habe ich auf die Hilfe vertraut, denn die sagt ja aus, eine Listbox kann auch mit Recordsets umgehen (wie in VB6 ja schließlich auch) Mein Recordset wie wie folgt gefüllt: Set rstAufschuettung = db.OpenRecordset("SELECT MatArt.Beschreibung, Materialaufschuettung.Herkunft, MatQualität.Qualität, Materialaufschuettung.Bemerkung FROM MatQualität INNER JOIN (MatArt INNER JOIN (Maßnahme INNER JOIN Materialaufschuettung ON Maßnahme.StandortID = Materialaufschuettung.StandortID) ON MatArt.MaterialID = Materialaufschuettung.MaterialID) ON MatQualität.MatQualität = Materialaufschuettung.QualitätID WHERE ((Materialaufschuettung.StandortID)= " & rstMaßnahme!StandortID & " )", dbOpenDynaset, dbReadOnly) sämtliche Datenfelder des Recordsets sind Text nur Bemerkung ist ein Memo-Feld hier stelle ich die Anzahl der Spalten ja ein: lstMaterial.ColumnCount = rstAufschuettung.Fields.Count und hier möchte ich eigentlich gerne meiner ListBox nun dieses Recordset übergeben: lstMaterial.RowSource = rstAufschuettung kommt verständlicherweise "Typen unverträglich" lstMaterial.RowSource = "rstAufschuettung" hier kommt Fehler 380: Eigenschaft RowSource konnte nicht gesetzt werden. Üngültiger Eigenschaftswert zitat Hilfe:Gibt die Quelle an, die eine Liste für ein Kombinationsfeld-Steuerelement (ComboBox) oder Listenfeld-Steuerelement (ListBox) zur Verfügung stellt. Syntax object.RowSource [= String] Die Syntax für die RowSource-Eigenschaft besteht aus folgenden Teilen: Teil Beschreibung object Erforderlich. Ein gültiges Objekt. String Optional. Die Quelle der Liste für das Kombinationsfeld-Steuerelement oder das Listenfeld-Steuerelement. nur frage ich mich nun, welcher Eigenschaftswert ungültig ist :/ Weiß jemand Rat ? Verwendet wird Access 2000, die Verweise sind als Anhang mit aufgeführt Zitieren
Klotzkopp Geschrieben 18. August 2010 Geschrieben 18. August 2010 nur bei der Listbox habe ich auf die Hilfe vertraut, denn die sagt ja aus, eine Listbox kann auch mit Recordsets umgehenHast du einen Link dafür? Ich finde nur das: RowSource Property [Access 2007 Developer Reference] Zitieren
PromiseYou Geschrieben 18. August 2010 Autor Geschrieben 18. August 2010 (bearbeitet) Ich hab in der Online-hilfe lokal gesucht, jedoch steht dort so ziemlich das gleiche wie auf der MSDN Seite. Jedoch muckt Access2000 schon auf, wenn ich: lstMaterial.RowSourceType = "Table/Query" mache. ich denke das liegt an den verschiedenen klassen :/ access hat ja etwas andere klassen als VB6 oder VBA für die controlls. Gleiche ist ja auch bei textfeldern ... in VB6 geb ich nen RecordSource, und hab die Dinger gebunden, jedoch unter Access muß ich das ja alles zu fuß machen ... Breche mir grad die Ohren, aber ich denke ich werde es auf die Klassische machen ... For ... additem/list() ... next muß nur mal sehen wie ich es dann mit dem Zeiger in der DB mache ... oder ich mach nen clone oder sowas ... und danke für die schnelle reaktion ps: wenn ich das Formular nach Excel packe, und dort die Daten in ein Tabellenblatt schreibe, dann kann ich dieses mit RowSource = "A1 : D5" deklarieren ... aber ich will doch nun garnicht eine Excelinstanz öffnen um dieses Feature nutzen zu können ^^ Bearbeitet 18. August 2010 von PromiseYou Zitieren
Klotzkopp Geschrieben 18. August 2010 Geschrieben 18. August 2010 Jedoch muckt Access2000 schon auf, wenn ich: lstMaterial.RowSourceType = "Table/Query" [/CODE] mache.Mit einer Fehlerbeschreibung wie "muckt auf" ist die Diagnose einigermaßen schwierig. Zitieren
PromiseYou Geschrieben 18. August 2010 Autor Geschrieben 18. August 2010 Mit einer Fehlerbeschreibung wie "muckt auf" ist die Diagnose einigermaßen schwierig. Fehler 13: Typen unverträglich ist das Ergebnis, nur das hilft auch absolut nicht weiter ... Er will an dieser Stelle nen String hier mal der lange auszug aus der Hilfe: RowSourceType-, RowSource-Eigenschaften (Herkunftstyp, Datensatzherkunft) Sie können die Eigenschaften RowSourceType und RowSource zusammen verwenden, um Microsoft Access mitzuteilen, wie Daten für ein Listenfeld, ein Kombinationsfeld oder ein ungebundenes OLE-Objekt (z.B. ein Diagramm) bereitgestellt werden sollen. Wenn Sie z.B. in einem Listenfeld Datenzeilen anzeigen möchten, die aus einer Abfrage namens Kundenliste stammen, stellen Sie die Eigenschaft RowSourceType des Listenfelds auf Tabelle/Abfrage und dessen Eigenschaft RowSource auf die Abfrage namens Kundenliste ein. Einstellung Die Eigenschaft RowSourceType hat die folgenden Einstellungen. Einstellung Beschreibung Tabelle/Abfrage (Standardeinstellung) Die Daten stammen aus einer Tabelle, Abfrage oder SQL-Anweisung, die von der Einstellung der Eigenschaft RowSource festgelegt wurde. Wertliste Die Daten entsprechen einer Liste von Einträgen, die von der Einstellung der Eigenschaft RowSource festgelegt wurden. Feldliste Die Daten entsprechen einer Liste von Feldnamen einer Tabelle, Abfrage oder SQL-Anweisung, die von der Einstellung der Eigenschaft RowSource festgelegt wurde. Anmerkung Sie können die Eigenschaft RowSource auch mit einer benutzerdefinierten Funktion einstellen. Der Funktionsname wird ohne vorstehendes Gleichheitszeichen (=) und ohne nachfolgendes Klammernpaar eingegeben. Geben Sie bestimmte Code-Argumente der Funktion an, um Microsoft Access mitzuteilen, wie das Steuerelement gefüllt werden soll. Die Einstellung der Eigenschaft RowSource ist abhängig von der Einstellung der Eigenschaft RowSourceType. Einstellung von RowSourceType Zugehörige Einstellung von RowSource Tabelle/Abfrage Der Name einer Tabelle bzw. einer Abfrage oder eine SQL-Anweisung. Wertliste Eine Liste von Einträgen mit Semikolons ( als Trennzeichen. Feldliste Der Name einer Tabelle bzw. einer Abfrage oder eine SQL-Anweisung. Anmerkung Wird die Eigenschaft RowSourceType auf eine benutzerdefinierte Funktion eingestellt, dann kann die Eigenschaft RowSource leer gelassen werden. Sie können die Eigenschaften RowSourceType und RowSource im Eigenschaftenfenster des Steuerelements, in einem Makro oder in Visual Basic einstellen. Für solche Felder, deren Eigenschaft DisplayControl auf Kombinationsfeld oder Listenfeld eingestellt ist, können Sie diese Eigenschaft für Tabellenfelder in der Tabellenentwurfsansicht auf der Registerkarte Nachschlagen im Bereich Feldeigenschaften einstellen. Anmerkung Microsoft Access stellt diese Eigenschaft automatisch ein, wenn Sie in der Tabellenentwurfsansicht Nachschlage-Assistent als Datentyp für ein Feld auswählen. Stellen Sie in Visual Basic die Eigenschaft RowSourceType unter Verwendung eines Zeichenfolgenausdrucks auf einen der folgenden Werte ein: "Table/Query", "Value List" oder "Field List". Sie können einen Zeichenfolgenausdruck auch verwenden, um den Wert der Eigenschaft RowSource einzustellen. Sie stellen die Eigenschaft RowSourceType auf eine benutzerdefinierte Funktion ein, indem Sie den Namen der Funktion eingeben. Anmerkung Verfügen Sie über eine begrenzte Anzahl an Werten, die sich nicht ändern, so können Sie die Eigenschaft RowSourceType auf Wertliste einstellen und dann die Werte eingeben, die in der Liste in der Eigenschaft RowSource enthalten sind. Wenn Sie eine benutzerdefinierte Funktion erstellen, um Elemente in ein Listenfeld oder Kombinationsfeld einzufügen, ruft Microsoft Access die Funktion mehrmals auf, um die benötigten Informationen zu erhalten. Benutzerdefinierte Funktionen für RowSourceType werden in einem ganz bestimmten Funktionsformat geschrieben. [/code] naja und dort steht halt, es soll auch mit nen SQL-Befehl gehen ich bin dann aber nun mal wech ... koffer packen und dann nach hause ... werde mich dort weiter dran setzen, vllt kommt mir ja dort die Eingebung :eek Zitieren
Reinhold Geschrieben 18. August 2010 Geschrieben 18. August 2010 Moin, es fällt mir schwer, dein Problem nachzuvollziehen. Ich habe mir das eben in A03 angeschaut, aber das war in A2k definitiv schon genauso: Erstelle eine Listbox mit dem Assistent und gib danach als Datensatzherkunft dein SQL-Statement ein. Fertig. Wenn das SQL dynamisch sein muss, sich also die Rowsource zur Laufzeit ändert (zB weil die Listbox abhängig von etwas anderem ist) kann es natürlich sein, das du ein requery oä machen musst. Reinhold Zitieren
PromiseYou Geschrieben 18. August 2010 Autor Geschrieben 18. August 2010 ja, aber .... ich nutze nicht das Form aus Access, sondern aus der VBA-Libary. Warum ? Ich habe ein Form mit Excel erstellt. Dieses Form habe ich dann unter Access importiert. Mit dem Trugschluß, dass die Steuerelemente sich identisch verhalten. Wie ich nun feststellen muß, ist dies nicht der Fall. Eine ListBox in einem importierem Excel-VBA-Form verhält sich anders, als das Access interne Steuerelement. Das Access-Steuerelement kann ich jedoch nicht auf dem importiertem Form editieren. Warum nutze ich nicht das Access eigene Form ? In meiner Ausbildung habe ich VB6 gelernt, und danach auch einige Anwendungen drin geschrieben, und mich daran gewöhnt. Da fiel mir der Umstieg nach VBA mit Office nicht schwer. Aber als ich dann die Forms von Access mir angeschaut habe, habe ich sehr viel vermisst, was ich unter VB/VBA so eigentlich mit meinen Daten machen kann ... Gerade in hinsicht auf Gestaltung der Oberfläche. Sicherlich kann mach auch mit den Access-Forms wunderebare Sachen machen, aber dafür muß ich mir es dann erstmal richtig anschauen, und kann das nicht mal adHook machen. Wenn es mir sonst alles zuviel wird, mach ich ne DDE mit Excel auf, und lass dort die Forms rennen (oder spricht etwas aus irgendeiner Erfahrung dagegen?) Zitieren
Saifai Geschrieben 19. August 2010 Geschrieben 19. August 2010 du kannst der listbox kein bereits geöffnetes recordset zuweisen probier mal folgende methoden aus und schreib, ob du deinem ziel etwas näher gekommen bist ;-) 1) Dim db As DAO.Database Dim rst As DAO.Recordset strQuery = "SELECT 0, '<Ausw>' AS Produkt " & _ "FROM tbProdukte " & _ "UNION " & _ "SELECT Produkt_ID, ProduktArt " & _ "FROM tbProdukte " & _ "WHERE ..." Me!cbErweiterProdukte.RowSourceType = "Table/Query" Set db = CurrentDb Set rst = db.OpenRecordset(strQuery, dbOpenDynaset) Set Me!cbErweiterProdukte.Recordset = rst ' bzw. bei Standard Listenfeld einfach ' Me!cbErweiterProdukte.RowSource = strQuery 2) Dim lstStrFill as String #Ein ADO.Recordset rs öffnen und dann: lstStrFill=rs.GetString(adClipString, ColumDelimeter:=";", _ RowDelimeter:=";") 'Es entsteht eine Liste mit Einträgen, getrennt durch ";" Form.Controls("DeineListBox").RowSourceType="Value List" Form.Controls("DeineListBox").DeineListBox.RowSource=lstStrFill rs.Close 3) rs.MoveFirst h = 1 With UserForm1 Do Until rs.EOF .NameDeinesListenfeldes.AddItem (rs.Fields(0)) .NameDeinesListenfeldes.Column(1, h) = rs.Fields(1) .NameDeinesListenfeldes.Column(2, h) = rs.Fields(2) .NameDeinesListenfeldes.Column(3, h) = rs.Fields(3) h=h+1 rs.MoveNext Loop Zitieren
PromiseYou Geschrieben 14. September 2010 Autor Geschrieben 14. September 2010 hallo Saifai, hat was gedauert bis ich mich wieder Zeit hatte mich weiter dran zu setzen. Ich mache es so ähnlich wie Du es geschrieben hast. (halt angepasst an meine Bedingungen), aber das Kreiseln zwischen den Controls innerhalb von Frames geht dann doch ganz gut. Viel zu schreiben und zu überwachen, aber es geht. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.