Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: georg5 am September 20, 2012, 16:47:45

Titel: felder automatisch ausfüllen
Beitrag von: georg5 am September 20, 2012, 16:47:45
liebe Accessprofis!

Ich habe ein Formular mit den Feldern 0113 bis 0319 also 73Felder je Datenzeile
Diese felder müssen zb von 0113 bis 0314 bzw  0213 bis 0119 mit Faktoren ausgefüllt werden. Meistens sind diese Faktoren für die felder zb 0113 bis 0314 gleich.

Datenzeilen;     "0113"  "0213"  "0313"  "0413" ......usw
Faktor                 0,02    0,02                 0,02
   

Frage:
gibt es eine Möglichkeit am Formular die betroffenen Felder mit einem Faktor automatisch ausfüllen zu lassen. Eingabe "faktor" "von" "bis" oder so?
Titel: Re: felder automatisch ausfüllen
Beitrag von: Wurliwurm am September 20, 2012, 16:54:45
Hi, probier mal was in der Richtung aus:


Dim i As integer
For i = 113 To 314 
Me("txt0" & (i)).Value = 0.02
Next i
Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 20, 2012, 17:03:49
Danke für die schnelle Antwort

im Formular soll ein Feld für "von"
ein Feld für "bis"
ein Feld für "faktor"

bitte sei so nett un erkläre mir deinen code nochmals anhand meines vorschlages

georg
Titel: Re: felder automatisch ausfüllen
Beitrag von: DF6GL am September 20, 2012, 17:17:06
Hallo,

falls die Textfelder wie beschrieben benannt sind, dann etwa so beim Klick auf die Schaltfläche "btnAusfüllen" als Ereignisprozedur "Beim Klicken" der Schaltfläche:


Sub btnAusfüllen_Click()
Dim i As Long
For i = nz(Me!von,0)  To nz(Me!bis,0)
Me("0" & i ) = Str(nz(Me!faktor,0))
Next i
End Sub
Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 20, 2012, 17:39:19
Danke irgendwas geht nu ned


Private Sub Befehl173_Click()
Sub btnAusfüllen_Click()
Dim i As Long
For i = Nz(Me!von, 0) To Nz(Me!bis, 0)
Me("0" & i) = Str(Nz(Me!faktor, 0))
Next i
End Sub


Fehler: Endsub erwartet ?
Titel: Re: felder automatisch ausfüllen
Beitrag von: DF6GL am September 20, 2012, 17:43:04
Hallo,

Scherzkeks...   8)



Sub btnAusfüllen_Click()     weglassen, wenn Du schon Deine eigenen Namen benutzen willst....
Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 20, 2012, 17:47:23
sorry, schwer ists mit den anfängern!

Private Sub Befehl173_Click()

Dim i As Long
For i = Nz(Me!von, 0) To Nz(Me!bis, 0)
Me("0" & i) = Str(Nz(Me!faktor, 0))
Next i
End Sub

Fehler: Typen unverträglich?
Titel: Re: felder automatisch ausfüllen
Beitrag von: DF6GL am September 20, 2012, 17:55:34
Hallo,

ok, was steht in den Textfeldern "von" und "bis"?


schreib zudem mal so:

For i = val(Nz(Me!von, 0)) To val(Nz(Me!bis, 0))
Titel: Re: felder automatisch ausfüllen
Beitrag von: Wurliwurm am September 20, 2012, 18:05:33
Schreib das doch etwas etwas sauberer:

Private Sub Befehl173_Click()

Dim intVon as integer
Dim intBis as integer
Dim dblFaktor as double

if isnumeric(Me!von) then
   intVon = me!von
else
   msgbox "Wert Von ist nicht numerisch!   ", vbcritical
   exit sub
end if

if isnumeric(Me!bis) then
   intBis = me!bis
else
   msgbox "Wert Bis ist nicht numerisch!   ", vbcritical
   exit sub
end if

if intvon > intbis then
   msgbox "Von größer bis!   ", vbcritical
   exit sub
end if

if isnumeric(Me!faktor) then
   dblFaktor = me!faktor
else
   msgbox "Wert Faktor nicht numerisch!   ", vbcritical
   exit sub
end if

call FelderVorbelegen(intVon, intBis, dblFaktor)

End sub


Private Sub FelderVorbelegen(byval intVon as integer, byval intBis as integer, byval dblFaktor as double)
  For i = intvon To intbis
    Me("0" & i) = dblfaktor
  Next i
end sub
Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 21, 2012, 08:41:07
@wurliwurm

Private Sub Befehl173_Click()
Dim intVon As Integer
Dim intBis As Integer
Dim dblFaktor As Double
If IsNumeric(Me!von) Then
intVon = Me!von
Else
MsgBox "Wert Von ist nicht numerisch!   ", vbCritical
Exit Sub
End If
If IsNumeric(Me!bis) Then
intBis = Me!bis
Else
MsgBox "Wert Bis ist nicht numerisch!   ", vbCritical
Exit Sub
End If
If intVon > intBis Then
MsgBox "Von größer bis!   ", vbCritical
Exit Sub
End If
If IsNumeric(Me!faktor) Then
dblFaktor = Me!faktor
Else
MsgBox "Wert Faktor nicht numerisch!"", vbcritical"
Exit Sub
End If
Call FelderVorbelegen(intVon, intBis, dblFaktor)
End Sub

Fehler: sub oder function nicht Definiert? Erklär mir doch einmal was du da genau schreibst und warum. Dann lern ich was, und das problem ist sicher schneller gelöst.DANKE

@DF6GL:
in den felder [von] bis [bis] steht zb:[von]= 0113 bis [0213] im feld [faktor] zb 0,02 dann click und die Felder 0113 und 0213 enthalten den faktor 0,02
Titel: Re: felder automatisch ausfüllen
Beitrag von: 69bruno am September 21, 2012, 09:09:25
Ich erlaube mir, da mir wurliwurm schon mal sehr geholfen hat:
Private Sub Befehl173_Click()

Dim intVon as integer        'Deklaration einer Variablen als Integer (ganzzahlige Werte)
Dim intBis as integer         'Deklaration einer Variablen as Integer (ganzzahlige Werte)
Dim dblFaktor as double   'Deklaration einer Variablen als double (Kommazahl)

if isnumeric(Me!von) then  'Abfrage, ob Me!von (Formularfeld für den Wert "von") eine numerische Zahl ist
   intVon = me!von             'Me!von ist numerisch, also wird die Variable intvon mit dem Wert des Formularfeldes "von" gefüllt
else                                   'anderenfalls
   msgbox "Wert Von ist nicht numerisch!   ", vbcritical  'Darstellung einer Messagebox, die darauf hinweist, dass der
                                                                                      'Formularfeldwert "von" keine numerische Zahl ist
   exit sub                                                                       'Funktion verlassen, damit User korrigieren kann
end if                                  'Ende der Abfrage

if isnumeric(Me!bis) then    'Abfrage, ob der Formularfeldwert "bis" numerisch ist
   intBis = me!bis                '"bis" ist numerisch, also wird der Formularfeldwert in die Variable gespeichert
else                                    'anderenfalls
   msgbox "Wert Bis ist nicht numerisch!   ", vbcritical   'Darstellung einer Messagebox, die darauf hinweist, dass der
                                                                                      'Formularfeldwert "bis" keine numerische Zahl ist
   exit sub                                                                       'Funktion verlassen, damit User korrigieren kann
end if                                  'Ende der Abfrage                                                                   

if intvon > intbis then         'Plausibilitätsabfrage, ob "von" größer ist als "bis"
   msgbox "Von größer bis!   ", vbcritical                        'Darstellung einer Messagebox, die darauf hinweist, dass der
                                                                                      'Formularfeldwert "von" größer ist als "bis"
   exit sub                           'Verlassen der Funktion, damit User die Zahlen korrigieren kann
end if                            'Ende der Abfrage


if isnumeric(Me!faktor) then     'Abfrage, ob der Formularfeldwert "Faktor" eine numerische Zahl ist
   dblFaktor = me!faktor           'ist numerisch, Variable dblfaktor wird damit gefüllt
else                                          'anderenfalls
   msgbox "Wert Faktor nicht numerisch!   ", vbcritical   'Darstellung einer Messagebox, das der Faktor keine numerische Zahl ist
   exit sub                                 'Verlassen der Funktion, damit User den Faktor korrigieren kann
end if                                       'ende der Abfrage

call FelderVorbelegen(intVon, intBis, dblFaktor)    'Aufruf der Prozedur "FelderVorbelegen" mit Übergabe der gefüllten Variablen

End sub   ' Verlassen dieser Prozedur
[/font]
Titel: Re: felder automatisch ausfüllen
Beitrag von: 69bruno am September 21, 2012, 09:15:38
Und jetzt zur zweiten Prozedur:

Private Sub FelderVorbelegen(byval intVon as integer, byval intBis as integer, byval dblFaktor as double)
 For i = intvon To intbis       'Schleife, die so oft läuft, wie die Anzahl zwischen von und bis
   Me("0" & i) = dblfaktor     'Me verweist auf das Formular, dann kommt ein zusammengesetzter Feldname 0 in Anführungszeichen bleibt  
                                            'so bestehen das kaufmännische "und" verbindet nun die folgende Angabe mit der 0. Es folgt i, das pro
                                            'Schleife einen Wert zwischen von und bis annimmt. Sagen wir 113, dann wird auf das Formularfeld 0113
                                            'verwiesen." = dblfaktor" weist also dem Feld Me!0113 den aktuellen Wert de Faktors zu
 Next i                                  'nächster Schleifendurchlauf
end sub      'Ende dieser Prozedur
       

Ich befürchte, Du arbeitest mit 2 Formularen, eines, in dem die Daten eingegeben werden sollen und eines, welches die Werte von bis und Faktor abfragt.

In dem Fall ist der Verweis zum Füllen der Felder von bis und Faktor mit Me denke ich nicht konkret genug, da müsste dann sowas wie "FormularnamemeinesFormularsmitden73Feldern"("0" & i) = dblfaktor stehen. Solltest Du tatsächlich im gleichen Formular die Werte abfragen, in dem auch die Felder gefüllt werden sollen, dann wäre Me richtig.       
Titel: Re: felder automatisch ausfüllen
Beitrag von: 69bruno am September 21, 2012, 09:29:40
 :-\
Leider konnte ich keine Schriftart einstellen, die meine Erläuterungen vernünftig darstellen kann. Kopier das in die Zwischenablage, füge es z.B. in Word ein und änder die Schriftart auf Arial, dann steht es bedeutend besser zum lesen da !

Sorry
Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 21, 2012, 12:13:25
@69bruno  vielen Dank so kann ich das ganze leichter behirnen, und daraus lernen.

Hab [von] bis [bis] leider nicht numerisch gemacht daher funktioniert das ganze warscheindlich noch nicht. Bin am überlegen das umzubauen,.....oder gehts als text auch.....wohl eher nicht woher weis die routine welche felder auszufüllen sind.......
alles in einem formular....hab kein zweites formular zum ausfüllen
lg
Titel: Re: felder automatisch ausfüllen
Beitrag von: Wurliwurm am September 21, 2012, 12:31:04
Zitat von: georg5 am September 21, 2012, 12:13:25
Hab [von] bis [bis] leider nicht numerisch gemacht daher funktioniert das ganze warscheindlich noch nicht.

Textfelder zur Eingabe haben grundsätzlich kein bestimmtes Format. Wenn Du nicht die Tastenkommandos filterst, kannst Du da alle Zeichen eingeben. Von daher ist es m.E. der beste Weg, von Typ String in Integer zu übergeben. Access ist da geduldig und braucht nicht unbedingt eine explizite Angabe einer Konvertierfunktion, solange Du vorher mit ISNUMERIC abfragst, ob der Wert in eine Zahl konvertierbar wäre.

Es geht also

Dim myString as string
Dim myInt as integer

myString = "35"
myInt = meinString

myString = "35.5"
myInt = meinString

myString = "35,523"
myInt = meinString

Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 21, 2012, 13:36:28
@wurliwurm
@69bruno

vielen dank für eure Unterstützung
hab mein Formularkonzept als Anlage beigefügt.
Irgendwas funkt noch nicht. ???
vielleich könnt ihr mir den gesammt notwendigen code nochmals posten...vieleich hab ich was übersehen

[Anhang gelöscht durch Administrator]
Titel: Re: felder automatisch ausfüllen
Beitrag von: Wurliwurm am September 21, 2012, 13:41:42
Zitat von: georg5 am September 21, 2012, 13:36:28
hab mein Formularkonzept als Anlage beigefügt.

Der Code ist ausführlichst kommentiert gepostet worden. Wie können hier gerne best practices und Tricks verraten und einem weiterhelfen, der gerade hängt, aber mit Ereignissen und Sub-Routinen mußt Du dich schon eigeninitiativ vertraut machen.

Anhand dem Bild kann man nicht sehen, wie die Felder technisch heißen und welcher Fehler auftritt. Dazu mußt Du die Access-Datei posten.
Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 21, 2012, 14:19:49
@wurliwurm

hab ja nur gefragt......
es ist halt kaum möglich die ganze angelegenheit zu lernen wennst keinen lehrer hast.
Es liegt halt oft an den einfachsten fragen, die für dich selbstverständlich sind und für mich als "beginner" nicht.

schreibts du beide codes in die selbe ereignisprozedur zum ausfüllen?

derzeitiger fehler: end if ohne if-block   

danke
Titel: Re: felder automatisch ausfüllen
Beitrag von: DF6GL am September 21, 2012, 18:36:38
Hallo,

ich denke, hier wird mit Kanonen auf Spatzen geschossen und doch nicht getroffen...


@georg5:  Lad die Db mal hier hoch und beschreibe anhand der Formular- und Textfeldnamen, wo was genau passieren soll...
Titel: Re: felder automatisch ausfüllen
Beitrag von: 69bruno am September 24, 2012, 07:24:00
 :D

Mag sein, aber ein Spatz hat auch nur einen Flügel.

Wie der Fehler schon sagt, steht im Code irgendwo end if, aber vorher kein If ....then
Also zähle die If's und die End if's.
Wenn Du das nach der Reihenfolge machst, wie sie im Code auftauchen, wirst Du wohl 2 mal ein end if finden, aber vorher keine 2 If's gehabt haben...........
Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 24, 2012, 13:19:31
so....ich glaub ich muss mein problem nochmals beschreiben anhand der hochgeladenen datenbank (relevanten Teile, bei 200kb bleibt nicht mehr viel übrig).

Formular >Prognose FMA<

jetzt sind wir bei besagtem Formular:
In diesem Formular hätte ich gerne eine Ausfüllhilfe programmiert. Jede Datenzeile = >LG< (117stk) hat eine bestimmte Restsumme zugeordnet bekommen. Diese Restsumme wird anhand der Faktoren der Felder AZ25_01_13 usw. auf die jeweiligen Spalten  aufgeteilt. Das Ganze wird 117mal durchgeführt. Als Ergebniss erhate ich einen Plan (noch nicht gertig) von AZ25_01_13 = Jänner 2013 bis AZ99_03_19 = März 2019 mit den Prognosesummen.

Nochmals vielen Dank für eure Hilfe...und ich weis meine DB ist nicht profimäßig  :'(

[Anhang gelöscht durch Administrator]
Titel: Re: felder automatisch ausfüllen
Beitrag von: DF6GL am September 24, 2012, 13:45:48
Hallo,



unabhängig vom Aufbau der Db...

welcher Teil der Textfeldnamen soll jetzt für die Angabe "von"  und "bis" hergenommen werden?


Die Namen sind ja nun nicht in der Form wie anfänglich beschrieben...

Am Besten benennst Du zunächst die einzelnen Textfelder in einer berechenbaren Form, z. B.:

AZ25 , AZ26 , AZ27 , ....

[Anhang gelöscht durch Administrator]
Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 24, 2012, 14:05:49
welcher Teil der Textfeldnamen soll jetzt für die Angabe "von"  und "bis" hergenommen werden?: versteh deine Frage nicht. Den im feld "Faktor" eingesetzte Wert soll in die Felder von: zb AZ25 bis zb AZ33 im geweiligem "LG" ausgefüllt werden.


Die Namen sind ja nun nicht in der Form wie anfänglich beschrieben...: sorry mein Fehler.

Am Besten benennst Du zunächst die einzelnen Textfelder in einer berechenbaren Form, z. B.:: siehe aktualisierte Anlage

DANKE

[Anhang gelöscht durch Administrator]
Titel: Re: felder automatisch ausfüllen
Beitrag von: DF6GL am September 24, 2012, 14:13:23
Hallo,

aber so nicht     ;)


Mit Textfelder habe ich die Textfelder gemeint, nicht die Tabellenfeldnamen (bzw. Steuerelementinhalt-Angaben) oder Bezeichnungsfelder-Beschriftung...


Siehe auch die nachträglich angehängte Anlage in meinem letzten Posting. Dort habe ich die Originalnamen benutzt.


Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 24, 2012, 14:31:51
hi,

ich steh auf der Leitung ???
welche Textfelder meinst du.....
Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 24, 2012, 14:51:48
sorry hab die leitung schon wieder verlassen und die Textfelder berechenbar gemacht........jedoch erscheint als Fehler Wert"von" ist nicht numerisch ?????
was fehlt noch .... wo ist der Denkfehler?

@ DF6GL: bei deiner positigDB hats doch schon funktioniert? oder

[Anhang gelöscht durch Administrator]
Titel: Re: felder automatisch ausfüllen
Beitrag von: DF6GL am September 24, 2012, 16:27:50
Hallo,

damit die Felder AZ25_xxxx   bis  AZ30_xxxx  mit dem eingebenen Faktor multipliziert werden, sollte bei "Von"  25 und bei  "bis" 30 eingetragen werden.

Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 24, 2012, 16:58:42
ja Danke, das funktioniert aber nur fallweise und das nur beim ersten Datensatz (LG)
der bereits eingetragenen Wert wird auch nicht überschrieben sondern zum autom. Faktor addiert?
Die Hilfe bringt mich zur Verzweiflung ???
Titel: Re: felder automatisch ausfüllen
Beitrag von: DF6GL am September 24, 2012, 17:54:45
Hallo,


was heißt denn "fallweise"?

Es funktioniert beim angezeigten Datensatz.....

"bereits eingetragenen Wert wird auch nicht überschrieben sondern zum autom. Faktor addiert?"

Nein, siehe Bilder...



oder Du meinst etwas anderes, als Du sagst....




Private Sub Befehl173_Click()

Dim intVon As Integer
Dim intBis As Integer
Dim dblFaktor As Double
If IsNumeric(Me!von) Then
intVon = Me!von
Else
MsgBox "Wert Von ist nicht numerisch!   ", vbCritical
Exit Sub
End If
If IsNumeric(Me!bis) Then
intBis = Me!bis
Else
MsgBox "Wert Bis ist nicht numerisch!   ", vbCritical
Exit Sub
End If
If intVon > intBis Then
MsgBox "Von größer bis!   ", vbCritical
Exit Sub
End If
If IsNumeric(Me!faktor) Then
dblFaktor = Me!faktor
Else
MsgBox "Wert Faktor nicht numerisch!   ", vbCritical
Exit Sub
End If
Call FelderVorbelegen(intVon, intBis, dblFaktor)
End Sub
     
Private Sub FelderVorbelegen(ByVal intVon As Integer, ByVal intBis As Integer, ByVal dblFaktor As Double)
Dim ctl As Control

For Each ctl In Me.Controls
On Error Resume Next
If Mid(ctl.Name, 3, 2) >= Me!von And Mid(ctl.Name, 3, 2) <= Me!bis Then
ctl.Value = ctl.Value * Me!faktor
End If
Next
End Sub


[Anhang gelöscht durch Administrator]
Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 25, 2012, 13:38:49
hi,

wenn in den Textfelder (AZ25 bis AZ99) kein Faktor eingetragen ist funktioniert die Routine leider nicht. Erst wenn ein Wert eingetragen (händisch) ist kann man über die Routine einen Wert automatisch eintragen jedoch wird der ergibt der Wert in den Feldern (AZ25-AZ99) plötzlich "vorher händisch eingetragener Wert x Wert aus dem Feld "Faktor" ????

Leider kann ich im Code keinen Fehler finden???

Hast du einen Tipp @DF6GL
Titel: Re: felder automatisch ausfüllen
Beitrag von: DF6GL am September 25, 2012, 14:48:21
Hallo,


naja, so hab ich die Bedeutung des Feldes "Faktor" verstanden, dass es ein Multiplikationsfaktor (was "Faktor" normalerweise bedeutet) für die in den einzelnen Textfeldern stehenden Werte sein soll.  Wenn der Wert in "Faktor" lediglich in die einzelnen Felder übergeben werden soll, dann muss es halt so heißen:

Private Sub FelderVorbelegen(ByVal intVon As Integer, ByVal intBis As Integer, ByVal dblFaktor As Double)
Dim ctl As Control  
For Each ctl In Me.Controls
On Error Resume Next
If Mid(ctl.Name, 3, 2) >= intvon And Mid(ctl.Name, 3, 2) <= intbis Then
ctl.Value =  dblfaktor  
End If
Next
End Sub


PS: soll auch ein "leeres" Faktor-Feld übernommen werden (NULL), dann so (Voraussetzung dabei ist, dass die Tabellenfelder NULL-"Werte" zulassen):


Private Sub Befehl173_Click()

Dim intVon As Integer
Dim intBis As Integer
Dim dblFaktor As Double
If IsNumeric(Me!von) Then
intVon = Me!von
Else
MsgBox "Wert Von ist nicht numerisch!   ", vbCritical
Exit Sub
End If
If IsNumeric(Me!bis) Then
intBis = Me!bis
Else
MsgBox "Wert Bis ist nicht numerisch!   ", vbCritical
Exit Sub
End If
If intVon > intBis Then
MsgBox "Von größer bis!   ", vbCritical
Exit Sub
End If
Call FelderVorbelegen(intVon, intBis, Me!faktor)
End Sub
   
Private Sub FelderVorbelegen(ByVal intVon As Integer, ByVal intBis As Integer, ByVal faktor)
Dim ctl As Control

For Each ctl In Me.Controls
On Error Resume Next
If Mid(ctl.Name, 3, 2) >= Me!von And Mid(ctl.Name, 3, 2) <= Me!bis Then
ctl.Value = faktor
End If
Next



End Sub
Titel: Re: felder automatisch ausfüllen
Beitrag von: georg5 am September 25, 2012, 15:41:30
@DF6GL vielen Dank du bist der BESTE es funktioniert wie geplant
sorry wegen meiner Unerfahrenheit