PDA

Vollständige Version anzeigen : Registersteuerelement per VBA


Sofixultra
24.09.2003, 17:14
Hallo Access Gurus,

habe mal wieder eine Frage.

Wie kann ich in einem Formular ein Registersteuerelement erstellen und die Anzahl der Seiten bestimmen per VBA??

Mit der Create Control Methode klappt es, jedoch habe ich leider keinen Überblick über die Konstanten der acTabctl. Ich weiss leider nicht, wie ich hier die Seitenanzahl und die Namen bestimmen kann.
Wobei die Namen aus einer Tabelle ausgelesen werden sollen und die Seitenanzahl in abhängigkeit steht zu der Anzahl DS in einer Tabelle (das habe ich hinbekommen, nur beim genauen erstellen des Reg. hänge ich noch)

Besten Dank im voraus

strausto
24.09.2003, 17:35
Public Sub rgstCtl()
Dim rg As Control
DoCmd.OpenForm "formular", acDesign
Set rg = CreateControl(Forms(0).Name, acTabCtl, , , , 10, 10, 5000, 5000)
For i = 0 To 10
rg.Pages.Add
Next
End Sub

Sofixultra
24.09.2003, 17:53
Hallo Strausto,

supi, :biggrinl: wußte doch das es eigentlich ganz einfach ist.....

Gibt es eigentlich irgendwo eine komplette Auflistung solcher Konstanten?
Also ein Buch in dem so Sachen drinstehen, wo was hinter welchem Komma stehen muss und was es genau bedeutet? Also wie beim actabctl,,,,,10,10,5000,5000 (???)

strausto
24.09.2003, 17:55
Die Benennung der Seiten erfolgt über

rg.Pages(i).Caption = "Name"

strausto
24.09.2003, 17:56
Ich habe dazu einfach in der OnlineHilfe gesucht und entsprechendes gefunden...
Zudem kannst Du den Ausdruck CreateControl mit dem Cursor markieren und die Quickinfo über das Kontextmenü anzeigen lassen.

Sofixultra
24.09.2003, 18:01
Jo,

die OH ist wirklich gut bei Access Xp, aber wenn man mal 2 oder mehr Stunden in der OH gesucht hat, sieht man die Lösung vor lauter Beispielen nicht mehr und eine Auflistung der konstanten für das acTblCt habe ich noch nicht gefunden odere eine genaue bedeutung (die auch verständlich ist) über die Nachkommastellen, was hier was bedeutet.

Besten Dank noch einmal für das Nachreichen des Namens Codes.

Grüßle

strausto
24.09.2003, 18:05
CreateControl-, CreateReportControl-Methoden



Die CreateControl-Methode erstellt ein Steuerelement im angegebenen
geöffneten Formular.


Die CreateReportControl-Methode erstellt ein Steuerelement im
angegebenen geöffneten Bericht.

Angenommen, Sie möchten beispielsweise einen benutzerdefinierten
Assistenten erstellen, mit dessen Hilfe Benutzer ein bestimmtes Formular
auf einfache Weise erstellen können. Dann können Sie die CreateControl-
Methode in diesem Assistenten verwenden, um dem Formular die
entsprechenden Steuerelemente hinzuzufügen.

Syntax

CreateControl(Formularname, Steuerelementtyp[, Bereich[, übergeordnet[,
Spaltenname[, links[, oben[, Breite[, Höhe]]]]]]])

CreateReportControl(Berichtsname, Steuerelementtyp[, Bereich[,
übergeordnet[, Spaltenname[, links[, oben[, Breite[, Höhe]]]]]]])

Die CreateControl- und die CreateReportControl-Methode verwenden die
folgenden Argumente.

Argument Beschreibung
Formularname, Berichtsname Ein Zeichenfolgenausdruck, der den Namen
des geöffneten Formulars bzw. Berichts identifiziert, in dem das
Steuerelement erstellt werden soll.

Steuerelementtyp Eine der folgenden eingebauten Konstanten, die den
Typ des zu erstellenden Steuerelements identifiziert. Um diese Konstanten
im Objektkatalog anzuzeigen und in Ihren Code einzufügen, klicken Sie in
der Symbolleiste Visual Basic auf Objektkatalog , dann im Feld
Projekt/Bibliothek auf Access und schließlich im Feld Klassen auf
AcControlType.

Konstante Steuerelement
acLabel Bezeichnung
acRectangle Rechteck
acLine Linie
acImage Bild
acCommandButton Befehlsschaltfläche
acOptionButton Optionsfeld
acCheckBox Kontrollkästchen
acOptionGroup Optionsgruppe
acBoundObjectFrame Gebundenes Objektfeld
acTextBox Textfeld
acListBox Listenfeld
acComboBox Kombinationsfeld
acSubform Unterformular
acObjectFrame Objektfeld
acPage Seite
acPageBreak Seitenwechsel
acCustomControl ActiveX-Steuerelement
acToggleButton Umschaltfläche
acTabCtl Registersteuerelement

Bereich Eine der folgenden eingebauten Konstanten zur Identifizierung des
Bereichs, der das neue Steuerelement enthält. Um diese Konstanten im
Objektkatalog anzuzeigen und in Ihren Code einzufügen, klicken Sie in der
Symbolleiste Visual Basic auf Objektkatalog , dann im Feld
Projekt/Bibliothek auf Access und schließlich im Feld Klassen auf AcSection.

Konstante Bereich

acDetail (Standardeinstellung) Detailbereich
acHeader Formular- oder Berichtskopf
acFooter Formular- oder Berichtsfuß
acPageHeader Seitenkopf
acPageFooter Seitenfuß
acGroupLevel1Header Gruppierungsebene 1 Kopf (nur Berichte)
acGroupLevel1Footer Gruppierungsebene 1 Fuß (nur Berichte)
acGroupLevel2Header Gruppierungsebene 2 Kopf (nur Berichte)
acGroupLevel2Footer Gruppierungsebene 2 Fuß (nur Berichte)

Wenn ein Bericht zusätzliche Gruppierungsebenen hat, werden die
Kopf/Fuß-Paare, beginnend mit 9, fortlaufend nummeriert.

übergeordnet Ein Zeichenfolgenausdruck, der den Namen des
übergeordneten Steuerelements eines zugeordneten Steuerelements
identifiziert. Bei Steuerelementen ohne übergeordnetes Steuerelement
verwenden Sie eine leere Zeichenfolge für dieses Argument, oder lassen
Sie es weg.

Spaltenname Der Name des Feldes, an das das Steuerelement gebunden
wird, wenn es sich um ein datengebundenes Steuerelement handeln soll.

Wenn Sie ein Steuerelement erstellen, das nicht an ein Feld gebunden
werden soll, verwenden Sie eine leere Zeichenfolge für dieses Argument.

links, oben Numerische Ausdrücke, die die Koordinaten für die obere linke
Ecke des Steuerelements in Twips angeben.

Breite, Höhe Numerische Ausdrücke, die die Breite und Höhe des
Steuerelements in Twips angeben.


Anmerkungen

Sie können die CreateControl- und die CreateReportControl-Methode in
einem benutzerdefinierten Assistenten verwenden, um Steuerelemente in
einem Formular oder Bericht zu erstellen. Beide Methoden geben ein
Control-Objekt zurück.

Sie können die CreateControl- und die CreateReportControl-Methode nur
in der Entwurfsansicht für Formulare bzw. der Entwurfsansicht für Berichte
verwenden.

Mit dem Argument übergeordnet identifizieren Sie die Beziehung zwischen
einem Hauptsteuerelement und einem untergeordneten Steuerelement.
Hat z. B. ein Textfeld ein zugeordnetes Bezeichnungsfeld, so ist das
Textfeld das (übergeordnete) Hauptsteuerelement, und das
Bezeichnungsfeld ist das untergeordnete Steuerelement. Wenn Sie das
Bezeichnungsfeld-Steuerelement erstellen, setzen Sie dessen Argument
übergeordnet auf eine Zeichenfolge, die den Namen des übergeordneten
Steuerelements identifiziert. Wenn Sie das Textfeld erstellen, setzen Sie
dessen Argument übergeordnet auf eine leere Zeichenfolge.


Das Argument übergeordnet stellen Sie auch beim Erstellen von
Kontrollkästchen, Optionsschaltflächen oder Umschaltflächen ein. Eine
Optionsgruppe ist das übergeordnete Steuerelement der darin
enthaltenen Kontrollkästchen, Optionsfelder oder Umschaltflächen. Die
einzigen Steuerelemente, für die es ein übergeordnetes Steuerelement
geben kann, sind Bezeichnungsfeld, Kontrollkästchen, Optionsfeld und
Umschaltfläche. Alle diese Steuerelemente können auch unabhängig, also
ohne ein übergeordnetes Steuerelement erstellt werden.


Stellen Sie das Argument Spaltenname entsprechend dem Typ des zu
erstellenden Steuerelements und in Abhängigkeit davon ein, ob es an ein
Feld in einer Tabelle gebunden wird oder nicht. Die Steuerelemente, die an
ein Feld gebunden werden können, umfassen Textfeld, Listenfeld,
Kombinationsfeld, Optionsgruppe und gebundenes Objektfeld. Darüber
hinaus können die Umschaltfläche-, Optionsfeld- und die Kontrollkästchen-
Steuerelemente an ein Feld gebunden werden, wenn sie nicht in einer
Optionsgruppe enthalten sind.


Wenn Sie bei dem Argument Spaltenname den Namen eines Feldes
angeben, erstellen Sie ein an dieses Feld gebundenes Steuerelement.
Sämtliche Eigenschaften des Steuerelements werden dann automatisch
auf die Einstellungen aller entsprechenden Feldeigenschaften eingestellt.
So ist beispielsweise der Wert der Eigenschaft des ValidationRule-
Steuerelements identisch mit dem Wert dieser Eigenschaft für das Feld.


Anmerkung Wenn der Assistent Steuerelemente in einem neuen oder
vorhandenen Formular oder Bericht erstellt, müssen Sie zuerst das
Formular bzw. den Bericht in der Entwurfsansicht öffnen.


Zum Entfernen eines Steuerelements aus einem Formular oder Bericht
verwenden Sie die Anweisungen DeleteControl und DeleteReportControl.

Sofixultra
24.09.2003, 18:08
Ok, gewonnen.

Ist genau der exakte Ausdruck der OH beim CreateControl....
Nur irgendwie verstehe ich das nach deinem Posting besser.

Bist ne Wolke


Daaaaaaaaaaaankeeeeeeeeeeeeee

sttmkran
15.08.2014, 13:25
Hallo Leute,
ist zwar schon etwas älter dieser Post, aber er entspricht ungefähr meinem Problem für das ich bisher noch keine Lösung finden konnte.

Ich nutze ein Navigationsformular (Access 2010) mit aktuell 2 Tabs, also zwei Navigationsbuttons. Beide Buttons öffnen das gleiche Formular, allerdings nach Jahren gefiltert. (Tag 1 filtert nach 2013, Tab 2 nach 2014)

Da im Laufe der Nutzung auch nach 2015 etc. gefiltert werden soll, würde ich gerne per Befehl einen neuen Tab anlegen der dann mit 2015 beschriftet ist. Bin ich dann ab 2015 nicht mehr im Unternehmen, soll es für den Admin (eigentlich nur User) trotzdem einfach möglich sein wieder einen Tab für 2016 anzulegen usw.

Könnt ihr mir helfen?
CreateControl liefert mir immer nur die Fehlermeldung dass ich diesem Formular keinen Navigationsbutton anlegen kann.

Danke euch!

derArb
15.08.2014, 14:38
Hallo,
das mit dem Control ist Krampf für Deinen Fall.
Was machst du ab 2040 ? Willst Du dann schon 39 Register haben?
Du solltest Dir ein Kombinationsfeld mit Jahreszahlen bauen (Entweder als Wertefeld oder als Tabellenfeld).
Dann baust du Dir eine Abfrage auf Deine auszuwertende Tabelle und hast nun
diverse Möglichkeiten, durch Auswahl der Jahreszahl im Kombinationsfeld die
Abfrage berechnen zu lassen.
1. Über direkten Bezug auf das Kombifeld im Kritererium
2. Über eine Funktion, welche mit globalen Variablen arbeitet, an welche der Kombilfeldwert übergeben wurde.
3. Über einen SQL-String in VBA
4. Über einen Formularfilter, welcher auf den Wert im Kombifeld reagiert.

Das funktioniert dann mit einem Formular bis ins Jahr 50000 oder höher, wenn notwendig.

Kyron9000
17.08.2014, 12:06
Hallo sttmkran,

das du immer Seiten anfügen möchtest finde ich, wie auch derArb, nicht so prickelnd.
Den Name der Seite zu verändern ist auch nicht das Wahre, die Überschrift, würde ich sagen genügt auch :)
Besser ist es, wenn du die Seitennamen temporär erstellst und diese auswertest,
denn dann hast mit anfügen und dergleichen gar kein Problem mehr!

Die BDB ist natürlich nur eine Idee, die kann man durchaus umgestalten,
in dem du z.B. eine Abfrage damit bemühst, die dir die Daten liefern usw.!
Füge eine Jahreszahl an, dann siehst was passiert.

Alles ist möglich, denn nix is fix :)

...dann ab 2015 nicht mehr im Unternehmen, soll es für den Admin (eigentlich nur User) trotzdem einfach möglich sein wieder einen Tab für 2016 anzulegen usw.... eine sehr edle Einstellung :D

Weitere Erklärungen, sind mM iM nicht mehr sinnvoll, deshalb,
schau dir die BeispielDB an, dann weißt was ich meine.

PS: übrigens, ich verwende kein Navigationssteuerelement, sonder ein Registersteuerelement!!
Würde auch das Navigationssteuerelement nur als Startmenü verwenden, finde sonst iM keine Verwendung dafür.
Ideen für anderweitige Verwendungen des NStE werden von mir gerne gelesen!

sttmkran
18.08.2014, 12:39
Hallo ihr beiden und vielen Dank für eure Antworten.

Auch wenn ich natürlich vor hatte die vorangegangenen Jahreszahlen ab dem 5. Jahr zu löschen um nicht 100 Tabs zu haben, hab ich es jetzt dennoch mit einem Kombinationsfeld gelöst.
Find ich halt weniger schöner, aber danke für den Denkanstoß :-)

Finde es aber auch nicht wirklich vollständig, dass es in Access nicht die Möglichkeit gibt einfache Steuerlemente dem Formular während der Laufzeit über VBA hinzuzufügen. Naja...

Den Name der Seite zu verändern ist auch nicht das Wahre, die Überschrift, würde ich sagen genügt auch
Besser ist es, wenn du die Seitennamen temporär erstellst und diese auswertest,
denn dann hast mit anfügen und dergleichen gar kein Problem mehr!

Auf welche meiner Fragen bezieht sich das? :-)

Die BDB schau ich mir heute Abend einmal an, aber nochmals danke für eure Mühen!

gpswanderer
18.08.2014, 12:47
Hallo,
Finde es aber auch nicht wirklich vollständig, dass es in Access nicht die Möglichkeit gibt einfache Steuerlemente dem Formular während der Laufzeit über VBA hinzuzufügen. Naja...da könnte man jetzt sagen, na ja, wer braucht das schon. In einer fertigen DB sollte es nicht notwendig sein Steuerelemente während der Laufzeit anzulegen.

Im übrigen könntest Du auch 5 Buttons anlegen und die immer mit den nächsten 5 Jahren zu beschriften und den Beschriftungstext zum Filtern nutzen.

Kyron9000
18.08.2014, 12:52
Hallo,

auf diese Frage...
würde ich gerne per Befehl einen neuen Tab anlegen der dann mit 2015 beschriftet ist.
Bei meiner Version, braucht niemand etwas anfügen, das kann man per Abfrage oder einfach per Year(Date) so einstellen,
dass ein neues Jahr automatisch angezeigt wird.
Man kann auch mit 2 Buttons die Jahre vor und zurück schalten, wenn gewünscht.

Finde es aber auch nicht wirklich vollständig, dass es in Access nicht die Möglichkeit gibt einfache Steuerlemente dem Formular während der Laufzeit über VBA hinzuzufügen. Naja...
Muss auch nicht sein!

PS: habe noch eine BDB in 2003 eingefügt, die ist auch eine etwas erweiterte Version!

Kyron9000
18.08.2014, 16:23
....wenn du dich noch ein wenig gedulden kannst, kann ich dir das NaviForm ev. deinen Wünschen anpassen!
Habe mich erst vor kurzem (also, vor einer Std.) damit so richtig befasst. Aber, funktioniert schon viel versprechend.
Finde diese Variation auch für eine adäquate Lösung, wenn sie mal richtig funktioniert :grins:

So... bin fertig und eigentlich erstaunt, was dieses Formular so kann und auch so einfach in der Handhabung ist...
wenn man weis, wie :)
Na ja... das soll jetzt mal nicht heißen ich weiß alles darüber :grins:
Aber, zumindest habe ich einiges in Erfahrung gebracht, dass ich bis jetzt noch nicht wusste.

Abschließend muss ich sagen, ein sehr schönes Formular und auch durchwegs brauchbar.

PS: es sind 25 Jahre iM die du anfügen kannst, dann hast...("Jubiläum :D !!", wenn du mehr benötigst...
einfach die Button NaviButton(?) vor eingeben (inkl. kl. Codeänderung)
und das Programm erstellt dir alles, was du dir so wünscht.

sttmkran
18.08.2014, 22:56
da könnte man jetzt sagen, na ja, wer braucht das schon. In einer fertigen DB sollte es nicht notwendig sein Steuerelemente während der Laufzeit anzulegen.

Seh ich aufgrund einer möglichen Dynamik etwas anders, aber das

Im übrigen könntest Du auch 5 Buttons anlegen und die immer mit den nächsten 5 Jahren zu beschriften und den Beschriftungstext zum Filtern nutzen.

ist natürlich DER Hinweis, danke! Dass ich da nicht selbst drauf gekommen bin... :) Danke!
Allerdings hab ich ja jetzt noch keine 5 Jahre, sondern erst 2013 und 2014. Naja, dafür fällt mir schon was ein...

Und Kyron, vieeelen Dank! Das ist auf jeden Fall etwas mit dem ich mich beschäftigen werden. Danke für die Arbeit!

Anne Berg
18.08.2014, 23:37
Hallo,

es ist ja nicht damit getan, die Beschriftung irgendwelcher Buttons zu ändern, das muss ja auch Auswirkungen auf das Unterformular haben. Das allerdings kann ich bei Alfreds Beispiel nicht erkennen.

Vielleicht sollte man hierzu einfach ein selbst erzeugtes Formular einsetzen und dieses nach Auswahl des Jahres entsprechend filtern - also ganz "old school"-mäßig. Dann weiß man wenigstens was man tut und wie und warum es funktioniert. ;)

Nachtrag:
Das Navi-Formular von Alfred funktioniert nur, wenn es direkt geöffnet wird, nicht aus dem Entwurf heraus.
Ist das immer so? :confused:

ebs17
18.08.2014, 23:49
Noch einmal grundsätzlich:
Ich nutze ein Navigationsformular (Access 2010) mit aktuell 2 Tabs, also zwei Navigationsbuttons. Beide Buttons öffnen das gleiche Formular, allerdings nach Jahren gefiltert. (Tag 1 filtert nach 2013, Tab 2 nach 2014)

Da im Laufe der Nutzung auch nach 2015 etc. gefiltert werden soll, würde ich gerne per Befehl einen neuen Tab anlegen der dann mit 2015 beschriftet ist. Bin ich dann ab 2015 nicht mehr im Unternehmen, soll es für den Admin (eigentlich nur User) trotzdem einfach möglich sein wieder einen Tab für 2016 anzulegen usw.
Wenn auf Grund ein paar neuer Daten oder etwas vergangener Zeit (Zeithoriziont für eine richtige DB sollte deutlich größer als zwei drei Jahre sein) Designänderungen notwendig werden, liegen grundsätzliche Fehler vor.

Man sollte auch daran denken, dass eine Filterung nach nur Jahren sehr enggleisig ist. Im allgemeinen und besonders, wenn dann die DB richtig genutzt wird, werden die Anforderungen deutlich steigen, auch an auszuwertende Zeiträume. Mit festinstallierten Buttons wird man da dramatisch unter den berechtigten Erwartungen bleiben ...

Kyron9000
19.08.2014, 07:06
Guten Morgen @,

Registersteuerelement:
diesen Satz, kann ich jetzt mal überhaupt nicht verstehen und würde raten, sich die DB genauer anzusehen...
Das allerdings kann ich bei Alfreds Beispiel nicht erkennen.
...sollte doch einfach nur beim schauen schon gesehen werden, dass sich das Unterformular
der Beschriftung anpasst und dadurch man erkennen kann, dass es gefiltert wird!
Es wird ja alles mit einem Ufo erstellt!
Wenn das nicht gegeben wäre, hätte ich die BDB's gar nicht eingestellt!!!
zu...
Das Navi-Formular von Alfred funktioniert nur, wenn es direkt geöffnet wird, nicht aus dem Entwurf heraus.
Ist das immer so?1. ist bei mir so, dass es nicht Filtert!
2. welcher User öffnet ein Formular zuerst im Entwurf und wechselt dann in die Formularansicht?
Allerdings hab ich ja jetzt noch keine 5 Jahre, sondern erst 2013 und 2014. Naja, dafür fällt mir schon was ein...
...das braucht dir nicht mehr einfallen, dass habe ich in meiner 2. BeispielDB #14 bereits so erstellt.
Navigationselement:
Das ist iM für 25 Jahre ausgelegt, werden aber nur die angezeigt, die bereits vorhanden sind!
Die Where Bedingung ist ebenfalls mit an Bord und filtert jedes eingefügte Ufo!
Wenn ein Jahr dazukommt, wird sich das Formular selbstständig anpassen,
genau wie die Registersteuerelemente in den beiden anderen BDB's!
Falls du mit 25 Jahren nicht auskommst, kann man das auch so, wie ich es in der 2. BDB #14 erstellt habe abändern!
Dann werden auch Unendlich-Buttons daraus.

Also, die Beispiel-DB genauer ansehen und besser testen!

gpswanderer
19.08.2014, 07:30
Hallo,
Seh ich aufgrund einer möglichen Dynamik etwas anderswenn es um Datendynamik geht so ist das Datenmodell zu überprüfen, denn bei neuen Daten oder einer anderen Darstellung/Sichtweise/Auswahl dürfen keine Steuerelemente hinzu kommen.
Wenn es um Dynamik der Weiterentwicklung der DB geht, dann ja, aber dann wird das zu Fuß gemacht und nicht per VBA.

Anne Berg
19.08.2014, 21:42
@Alfred:...sollte doch einfach nur beim schauen schon gesehen werden, dass sich das Unterformular
der Beschriftung anpasst und dadurch man erkennen kann, dass es gefiltert wird!da hast du wohl meinen Nachtrag übersehen.

Kyron9000
20.08.2014, 06:54
Guten Morgen,
@Anne
sorry :entsetzt: , diese beiden Sachen habe ich nicht in Verbindung gebracht.
Dachte eigentlich, das zuerst geschriebene war für die Regist...elemente
und der Nachtrag für das Navigations...t.

Das hätte mich aber wirklich sehr gewundert, wenn du das nicht erkannt hättest ;)
Finde das Navi-Form ist eine ganz gute Sache und auch optisch schön.
Dachte zuerst, "wieder etwas, das niemand braucht!"

Wünsche noch einen schönen Tag!