PDA

Vollständige Version anzeigen : Formular mittels VBA erzeugen


Timo81
18.02.2003, 09:44
Wie kann ich bei Access 97 ein Makro oder eine Funktion schreiben, die ein Formular mittels des FormularAsisstenten erzeugt?

Oder kann mir jemand sagen ob und wie es möglich ist eine Liste des Objektkatalogs mit angabe zu den einzelnen Funktionen zu bekommen?

Schon im vorraus Danke!

Aquarii
18.02.2003, 09:58
Hallo Timo,

das ist ein sehr ungewöhnliches Anliegen und ich kann dir nicht sagen, ob das möglich ist. Vielleicht beschreibst du einfach mal die dahinterliegende Idee. Vielleicht gibt es ja eine andere Lösungsmöglichkeit für Dein Vorhaben.

Arne Dieckmann
18.02.2003, 10:03
S. meine Antworten im spotlight-Forum.

jmc
18.02.2003, 10:03
Hallo Timo

ein etwas merkwürdiges Anliegen:
der Formularassistent verlangt gewisse Eingaben.
Wenn man das mit einem Makro steuern würde, dann müsste man die Eingaben ja im Makro definieren.
Und wenn du dann das Makro ein zweites mal laufen lässt, dann bekommst du ja dasselbe Formular - bestenfalls mit einem anderen Namen ...

Was ist dein Anliegen? Erklär einfach mal ohne die Worte Funktion, Makro, Objektkatalog etc. zu gebrauchen, was du machen willst!

Timo81
18.02.2003, 10:06
Ich habe eine Excel Tabelle die ich in Access inportieren muss und dann als unterformular in einem Hauptformular anzeige. jetzt ist es aber so, das sich sowohl die Werte der Excel Tabelle, als auch die Bezeichnungen ändern. Soll heißen ich habe einmal in der Spalte B Umsats2002 stehen und ein anderes mal steht dor z.b. Umsats2003 und in Spalte C Steht dann Umsats2002. Da diese Veränderung nur alle Jahre vorhanden ist würde ich das ja von hand machen. aber leider ist Das ganze nicht für mich. Und am besten sollte das alles voll Automatisch ablaufen.

jmc
18.02.2003, 10:16
Hi Timo

Abgesehen vom Problem des Imorts und was dann mit der Tabelle sonst noch geschieht (wenn die Spalten und deren Bezeichnungen immer wieder ändern):

Du kannst doch die importierte Tabelle im Unterformular als Datenblatt anzeigen, dann übernimmt es die Spaltennamen ...

Timo81
18.02.2003, 10:25
Das habe ich sowieso schon gemacht nur wenn ich jetzt z.b. eine Spalte aus der Tabelle Umsats Lösche wird dies im Formular nicht aktualisiert. Dort steht dann noch immer der alte Spalten Name und für die Werte steht: #Name? wenn du mir jetzt sagen könntest, wie ich diese änderung im Formula aktualisiere, dann wäre das für mich schon die halbe miete??

Uwe Sendatzki
18.02.2003, 10:26
Hallo jmc,

wenn ich nicht irre müssen auch bei der Ansicht Datenblatt auf dem Formular die entsprechenden Controls vorhanden sein. Diese haben eine Datenherkunft die sich ja wohl jährlich ändern kann.
Ich habe das Problem mal gelöst, indem ich einen Controlvorrat auf enem Formular angelegt habe. Im Formload gehe ich durch die Fields der Datensatzherkunft (Recordsetclone) und besetzte die Datenherkunft der Formularcontrols mit den gefundenen aktuellen Namen.

Gruss Uwe

Timo81
18.02.2003, 10:34
Hört sich so an als könnte ich mein problem damit lösen! Nur ihr solltet wissen ich habe bis vor einer Woche noch nie mit Access gearbeitet geschweigedenn Programmiert!... Letzte Woche noch ahbe ich Excel Makros geschriben. Dank Makro Reader kein problem. Aber so etwas schönes gibt es ja bei Access nicht. Wäre net wenn du mir die Datei mal als beispiel zukommen lassen kannst, oder ähnliches.

Schon jetzt Danke für eure Mühen!

Uwe Sendatzki
18.02.2003, 10:44
Hallo,

hier der Code (da ich Einiges rausgekürzt habe keine Funktionsgarantie):
[CODE]

Private Sub Form_Load()

Dim qdf As QueryDef
Dim rs As Recordset
Dim fld As Field
Dim ctl As Control
Dim lbl As Control
Dim i As Integer
Dim sql As String
Dim anz As Integer
Dim x As Single, y As Single
Dim t As String
Dim nurlesen As Boolean

'eigenes Formularproperty besetzen (Menü Einfügen)
Me.Abfrage = Me.OpenArgs

'Unterformular "Datenblatt" initialisieren
Set frmDB = frmDatenblatt.Form
frmDB.RecordSource = Me.Abfrage
Set qdf = CurrentDb.QueryDefs(Me.Abfrage)

i = 1
sql = ""
anz = 0
x = frmDB!Spalte1.Left
y = 100

On Error Resume Next
'Felder des Unterformulars initialisieren
'Die Controls heissen Spalte1 - Spalte100, die Label lblSpalte1 - ...
'ich zeige das Unterformular als Endlosformular an
'wenn du ein Datenblatt nutzt kannst du die Positioniererei sparen
For Each fld In qdf.Fields
Set ctl = frmDB.Controls("Spalte" & i)
Set lbl = frmDB.Controls("lblSpalte" & i)
ctl.ControlSource = fld.Name
lbl.Caption = fld.Name
ctl.ColumnHidden = False
'wenn erforderlich Felder gegen Eingaben schützen
If fld.Properties("nurAnsicht") = True Then
ctl.Locked = True
'On Error Resume Next
frmDB.Controls("Spalte50").SetFocus
ctl.Enabled = False
'On Error GoTo 0
End If
i = i + 1
Next
On Error GoTo 0

'überflüssige Felder verbergen
For i = i To 50
frmDatenblatt.Form.Controls("Spalte" & i).ColumnHidden = True
Next

DoCmd.Maximize

End Sub

Gruss Uwe

jmc
18.02.2003, 10:44
OK Leute - irren ist menschlich, hab da was verdreht im Kopf ...

Aber mal ein ganz anderer Ansatz:
wenn ich das richtig sehe, dann geht es um den Umsatz des laufenden und des Vorjahres, also hat man heute
..B. / ..C.
2003 / 2002
(oder eben umgekehrt) und dann nächstes Jahr
..B. / ..C.
2004 / 2003

Zu welchem Zeitpunkt willst du denn die Anpassungen machen ?
wäre es nicht sinnvoller, in der Tabelle die Spalten z.b. so zu benennen:
Umsatz_LfdJahr
Umsatz_VorJahr

Beim Import des Excel in die Tabelle ist es dann egal wie die Spalten in Excel heissen. Die Reihenfolge muss natürlich stimmen ...

Uwe Sendatzki
18.02.2003, 10:48
Hallo,

kleiner Nachtrag.

Da ich die Initialisierung nicht im Form_Load des Ufo sondern des Hauptformulars vornehme und auch noch die Datenherkunft des Ufo festlege kann man damit so ziemlich alles darstellen.

Wat ich noch nicht begriffen habe: Wie bekommt man den Code hier vernünftig rein?

Gruss Uwe

Timo81
18.02.2003, 10:57
Danke für den Code Uwe. werd mal schauen was ich daraus machen kann.

Auch keine Schlechte Idee Jmc aber leider Schwebt meinem chef vor, das vom Jahr 2000 bis zum aktuellen jahr alle Umsätse zu sehen sind. Aber wenn ich vollkemmen Verzweifle werde ich einfach deine Lösung nehmen und das ganze als Übersichtlicher Verkaufen.

Danke an euch beide wenn euch noch was gutes einfällt... Ich sag nie nein.