ich möchte gerne die Datenfelder im Unterformular bzw. Unterbericht
nebeneinander und nicht untereinander darstellen.
der konkrete fall für den ich es brauche ist eine weindatenbank.
die weine befinden sich auf lagerplätzen. jeder lagerplatz hat eine
nummer.
im hauptformular wird die weinsorte und im unterformular die nummern
angezeigt an denen sich die sorte befindet.
ich möchte nun, dass in einer reihe 6 plätze angezeigt werden und DANN
ERST die nächste reihe begonnen wird.
sollte ca. so aussehen
-------------
lambrusco rot 1992
lagerplatz nr.
4 17 23 48 49 51
63 127 128 129 256 301
302 303 414
-------------
ich glaube jeder kann sich vorstellen, dass wenn die nummern nur
untereinander angezeigt werden, dies a) platz verschwendet und b)
außerdem noch beschissen aussieht.
da ich kein profi bin, bitte einfache schritt für schritt anleitung,
da das problem sicherlich nicht mit ein paar mausklicks zu lösen ist.
danke für jeden ernstgemeinten vorschlag
Tom Schoenherr wrote:
da hätte ich einen Vorschlag:
1. Füge Deinem Unterformular ein ungebundenes Listenfeld mit dem Namen
Liste1 hinzu, und zwar im Formularkopf.
2. Stelle folgende Eigenschaften für dieses Listenfeld ein:
Herkunftstyp = Wertliste
Spaltenanzahl = 6
Spaltenbreiten = 1cm;1cm;1cm;1cm;1cm;1cm (als Beispiel - änderbar)
Steuerelementinhalt = (nichts eintragen)
Datensatzherkunft = (nichts eintragen)
3. Kopiere folgende Funktion in das VBA-Modul Deines Unterformulars:
Private Function LagerAuflistung() As String
Dim s As String
Me.Recordset.MoveFirst
s = ""
While Not Me.Recordset.EOF
s = s & Me.Recordset!NameDesFeldesDeinerLagerPlatzNr
Me.Recordset.MoveNext
If Not Me.Recordset.EOF Then s = s & ";"
Wend
LagerAuflistung = s
Exit Function
End Function
4. Kopiere die folgende Codezeile in das Form_Load-Ereignis Deines Unterformulars:
Me!Liste1.RowSource = LagerAuflistung
5. Speichere alles, und starte Dein Formular. (Hoffentlich klappt's -
bei mir funktioniert's jedenfalls ;-)
HTH,
Gruß - Uwe.
hier noch eine Ergänzung:
Falls Du die Lagerplatznummern im Unterformular auch eintragen / löschen
willst (was ja sehr wahrscheinlich ist ;-) füge bitte die Codezeile
Me!Liste1.RowSource = LagerAuflistung
auch noch in folgende VBA-Ereignisse Deines Unterformulars ein:
Form_AfterDelConfirm
Form_AfterInsert
_AfterUpdate-Ereignis des Feldes, in welchem Du die Lagerplatznummer
einträgst
HTH,
Gruß - Uwe.
Es stellt sich nun für mich folgendes Problem:
Wenn ich im Hauptformular auf den nächsten Datensatz gehe, bleiben die
Nummern im Listenfeld gleich, dh. sie werden nicht aktualisiert.
Ich bekam von Uwe Hübner folgende Anweisung:
Aktualisiere das Listenfeld auch im Form_Current-Ereignis des
Hauptformulars.
Ich habe leider von VBA nicht die geringste Ahnung.
Was muss ich hier ins Ereignis genau reinschreiben, damit es
funktioniert.
Ich habe herumgetüftelt aber egal was ich wo reinschreibe entweder
kommt eine Fehlermeldung oder nichts ändert sich.
Danke Tom
Tom Schoenherr wrote:
> Vorweg: Die Anleitung von Uwe funktioniert wunderbar.
prima.
Schreibe in das Form_Current-Ereignis (bzw. "beim Aktualisieren")
folgende Codezeile hinein:
Me!NameDeinesUnterformControls.Form!Liste1.RowSource = LagerAuflistung
Anstelle von NameDeinesUnterformControls müßtest Du natürlich den Namen
verwenden, den Du Deinem Unterformular im Hauptformular gegeben hast
(bzw. der beim Einbetten des Unterformulars in das Hauptformular von
Access vorgegeben wurde - Access verwendet hier meines Wissens
automatisch den Namen des Unterformulars).
HTH,
Gruß - Uwe.
> Anstelle von NameDeinesUnterformControls müßtest Du
natürlich den Namen
> verwenden, den Du Deinem Unterformular im Hauptformular
gegeben hast
> (bzw. der beim Einbetten des Unterformulars in das
Hauptformular von
> Access vorgegeben wurde - Access verwendet hier meines
Wissens
> automatisch den Namen des Unterformulars).
>
bei 97: Eingebettetxx
Gruß Jürgen
Jürgen Volke wrote:
<Ironieschalter ein>
<Erbsenzählermodus ein>
der Vollständigkeit halber: meine Auskunft bezieht sich auf A2k -
eigenen Beobachtungen zufolge verwendet A2k ebenfalls "Eingebettetxx"
temporär für ein neues Unterformular, solange der
UFO-Einbettungsassistent aktiv ist, erst danach verwendet A2k den Namen
des Unterformulars (wenn man dem UFO-Einbettungsassistenten keinen
anderen Namen mitgegeben hat)
<\Erbsenzählermodus aus>
<\Ironieschalter aus>
;-)
Gruß - Uwe.
Ich habe die Codezeile in das Form_Current-Ereignis hineingeschrieben.
Private Sub Form_Current()
Me!Lager_UF.Form!Liste1.RowSource = LagerAuflistung
End Sub
Dies wird in den Eigenschaften des Formulars als "Beim Anzeigen"
anzeigt. Ein "Beim Akualisieren" finde ich nicht. Ich habe was
aktualisieren betrifft nur "Vor Aktualisierung" und "Nach
Aktualisierung" noch zur Auswahl.
Nach dem Einfügen des Codes werden bei mir jedoch im Listenfeld
überhaupt keine Werte mehr angezeigt. Dh. das Listenfeld bleibt leer.
Öffne ich das Unterformular alleine sehe ich die Werte wieder. Lösche
ich die Codezeile wieder, werden zwar die Werte wieder angezeigt, aber
natürlich nicht wie geplant aktualisiert.
Was mache ich noch falsch?
BTW
Ist es sinnvoll, daß ich VBA lerne? Oder soll ich zuerst was anderes
lernen, bevor ich mich auf VBA stürze?
Wenn ja, welches Buch ist empfehlenswert?
BTW
Was bedeutet "Eingebettetxx"?
Danke für die Mühe
Tom
Tom Schoenherr wrote:
> [schnippel]
> Ich habe die Codezeile in das Form_Current-Ereignis hineingeschrieben.
>
> Private Sub Form_Current()
> Me!Lager_UF.Form!Liste1.RowSource = LagerAuflistung
> End Sub
>
> Dies wird in den Eigenschaften des Formulars als "Beim Anzeigen"
> anzeigt. Ein "Beim Akualisieren" finde ich nicht. Ich habe was
> aktualisieren betrifft nur "Vor Aktualisierung" und "Nach
> Aktualisierung" noch zur Auswahl.
Sorry, da hatte ich mich verschrieben - es sollte natürlich "Beim
Anzeigen" heißen (im Zweifelsfall sollte man hier besser die englischen
Bezeichnungen verwenden, also in diesem Fall Form_Current).
> Nach dem Einfügen des Codes werden bei mir jedoch im Listenfeld
> überhaupt keine Werte mehr angezeigt. Dh. das Listenfeld bleibt leer.
> Öffne ich das Unterformular alleine sehe ich die Werte wieder. Lösche
> ich die Codezeile wieder, werden zwar die Werte wieder angezeigt, aber
> natürlich nicht wie geplant aktualisiert.
>
> Was mache ich noch falsch?
Aha. Das Problem liegt darin, daß die Funktion "LagerAuflistung"
speziell für den Aufruf aus dem Unterformular heraus geschrieben wurde.
Da diese Funktion jetzt aber direkt vom Hauptformular aus aufgerufen
wird, muß sie natürlich noch etwas verbessert werden, und zwar ungefähr so:
Private Function LagerAuflistung() As String
Dim s As String
Me!Lager_UF.Form.Recordset.MoveFirst
s = ""
While Not Me!Lager_UF.Form.Recordset.EOF
s = s & Me!Lager_UF.Form.Recordset!NameDesFeldesDeinerLagerPlatzNr
Me!Lager_UF.Form.Recordset.MoveNext
If Not Me!Lager_UF.Form.Recordset.EOF Then s = s & ";"
Wend
LagerAuflistung = s
Exit Function
End Function
> BTW
> Ist es sinnvoll, daß ich VBA lerne? Oder soll ich zuerst was anderes
> lernen, bevor ich mich auf VBA stürze?
verkehrt ist es mit Sicherheit nicht. :-)
Bezüglich Access mußt Du selbst entscheiden, welchen Weg Du bei der
Programmierung einschlagen möchtest. Du kannst mit Access mit Hilfe von
SQL usw. ganz ohne VBA beachtliche Ergebnisse erzielen. Du kannst aber
genauso gute Ergebnisse mit VBA (oder gleich ganz mit Visual Basic)
erzielen.
Meine Empfehlung zum Erlernen von Access und VBA lautet: schau' Dir ein
paar der vielen Beispieldatenbanken an, die frei verfügbar sind, z.B. hier:
http://www.donkarl.com
http://www.mvps.org/access
http://www.access-guru.de
http://www.access-hilfe.de
http://www.accessprofipool.de
http://www.accessarchive.com
http://www.topsolutions.de
Arbeite diese Beispiele (natürlich nicht alle ;-) Stück für Stück durch
und versuche zu verstehen, was dort programmiert wurde, indem Du den
Code veränderst und siehst, was danach passiert.
> Wenn ja, welches Buch ist empfehlenswert?
Da gibt es viele - einige Tips findest Du hier:
http://groups.google.de/groups?q=Access+Buchempfehlung&ie=UTF8&oe=UTF8&hl=de&btnG=Google-Suche
> BTW
> Was bedeutet "Eingebettetxx"?
Damit ist der Name gemeint, den Access automatisch einem in ein
Hauptformular eingebetteten Unterformular-Steuerelement zuordnet (bei
Access 97) - das xx steht dabei für eine Zahl, also z.B. "Eingebettet34".
> Danke für die Mühe
Gern geschehen. ;-)
HTH,
Gruß - Uwe.
Danke für deine Hilfe und Geduld.
Grüße
Tom
Wenn ja, wie muss ich den Bericht anpassen?
Danke Tom
Tom Schoenherr wrote:
> Funktioniert das mit der Feldliste auch mit dem Bericht?
>
> Wenn ja, wie muss ich den Bericht anpassen?
theoretisch schon ;-)
Probiert habe ich es aber noch nicht. Ich sehe da grundsätzlich folgende
Möglichkeit:
Du müßtest dazu in Deinem Bericht (oder Unterbericht) ein Listenfeld
(wie im Formular) einfügen, mit den gleichen Eigenschaften wie im
Formular. Im entsprechenden Format-Ereignis (beim Formatieren) Deines
Berichtes (oder Unterberichtes) solltest Du auch wieder eine Codezeile
ähnlich
Me!Lager_UF.Form!Liste1.RowSource = LagerAuflistung
einfügen, wobei anstelle von "Lager_UF.Form!Liste1" ein Verweis auf das
Listenfeld im Bericht stehen müßte - den Ausdruck ".Form" müßtest Du
dabei durch ".Report" ersetzen oder auch weglassen - probier's halt'
aus, bis Du die richtige Syntax gefunden hast.
HTH,
Gruß - Uwe.
Ich habe in alten Postings der Newsgroup eine einfache Lösung dafür
gefunden.
Sie ist von Eric Haase (28 Jun 2000)- Betrifft:Re: Datenfelder
nebeneinander im Bericht
> schau mal im Berichtsentwurf unter Datei->Seite einrichten im
> Registerblatt Spalten. Dort kannst Du einstellen, daß Datensätze erst
> quer und dann nach unten ausgegeben werden.
Gruß Tom
Tom Schoenherr wrote:
>>Funktioniert das mit der Feldliste auch mit dem Bericht?
>>Wenn ja, wie muss ich den Bericht anpassen?
>
> Ich habe in alten Postings der Newsgroup eine einfache Lösung dafür
> gefunden.
>
> Sie ist von Eric Haase (28 Jun 2000)- Betrifft:Re: Datenfelder
> nebeneinander im Bericht
>
>
>>schau mal im Berichtsentwurf unter Datei->Seite einrichten im
>>Registerblatt Spalten. Dort kannst Du einstellen, daß Datensätze erst
>>quer und dann nach unten ausgegeben werden.
manchmal ist die Lösung einfacher, als man denkt. ;-)
Viel Erfolg weiterhin,
Gruß - Uwe.