05. juli 2004 - 17:15Der er
12 kommentarer og 1 løsning
selektere i felt fra en form over til felt i en underform
En form med feltet [SAP-EntreprNr] er tilknyttet en underform, hvor [SAP-KontraktNr] er nøglen. I underformen skal kunne oprettes dataposter hvor feltet [KontraktNr] indgår. [SAP-EntrepriseNr] indeholder f.eks. værdien N-0451062091. Når jeg opretter en post i underformularen skal den indsætte en standardværdi i [KontraktNr]. Standardværdien dannes på følgende måde: Fra [SAP-EntreprNr] hentes talkarakteren 4510 og indsættes i feltet KontraktNr, dvs. tal nr. 4 -7 fra venstre samtidig med talkarakteren 20, dvs. tal nr. 9 - 10. De to delværdier skal altså indsættes som en standardværdi med den sammensatte værdi 4510.20. Der *skal* være et punktum imellem! (dvs. det er et tekstfelt). Har prøvet med Mid([SAP-EntrepriseNr],4,4) osv. men det gir ikke den rigtige indsætning. Brugte koden fra spm. 515534 men det er pt. ikke gået godt. Hjælp ...
jeg prøver flg. men den fejler med at den ikke kan SetFocus. (Er i tvivl om det skal ind på BeforeUpdate):
Private Sub EntrepriseKontraktNr_BeforeUpdate(Cancel As Integer) Dim a As String, b Me.Parent![SAP-EntreprNr].SetFocus a = Mid([SAP-EntreprNr], 4, 4) b = Mid([SAP-EntreprNr], 9, 2) Me.[KontraktNr] = a & "." & b
Nu virker det med AfterUpdate - problemet er bare at koden skal indsætte værdien som en standardværdi, som jeg kan ændre. Hvis jeg gør det så ændrer den bare værdien tilbage til den værdi som koden indsatte, når jeg forlader feltet [KontraktNr]. Det må være en anden hændelse jeg skal bruge ?
Du indsætter en standardværdi således: Me.KontraktNr.DefaultValue = "Hej"
Så prøv med: Dim a As String, b Me.Parent![SAP-EntreprNr].SetFocus a = Mid([SAP-EntreprNr], 4, 4) b = Mid([SAP-EntreprNr], 9, 2) Me.[KontraktNr].Defaultvalue = a & "." & b
jeg er måske lidt besværlig... men koden viser ikke den indsatte værdi i feltet [KontraktNr]. Dvs. når jeg vil oprette en post i underformularen viser den ikke på forhånd den sammensatte værdi fra [SAPEntreprNr] som standardværdi, hvilket er meningen (i feltets egenskaber har jeg ikke sat noget under Standardværdi, da jeg regner med at koden skal sætte værdien ind). Hvis jeg nu opretter posten og selv skriver en værdi i [KontraktNr] f.eks. 4510.20, så indsætter den værdien 4510,2 som standard i næste nye post. Det er ikke så smart.
Det du gør fejl er, at du ikke indsætter koden det rigtige sted. BeforeUpdate er som udtrykket siger en hændelse der indtræffer FØr tabellen bliver opdateret. AfterUpdate EFTER tabellen opdateres.
Nu vil du have en hændelse der indtræffer, når du opretter en ny post. Når du opretter en ny post trykker du på ikonet for opret og formularen skifter til den nye tomme post. D.v.s. at koden skal gennemløbes, når formularen skifter post eller opnår en status der hedder Current (VedAktuel). Prøv at indsætte koden i formularens Current.
Nu vil standardværdien blive indsat HVER GANG formularen skifter post. Og det var ikke meningen. Kun ved nye poster. Så kan du udvide koden med en betingelse, der fastslår om posten er en ny post, er den et gennemløbes koden:
If Me.NewRecord Then Dim a As String, b Me.Parent![SAP-EntreprNr].SetFocus a = Mid([SAP-EntreprNr], 4, 4) b = Mid([SAP-EntreprNr], 9, 2) Me.[KontraktNr].Defaultvalue = a & "." & b end if
Nu har jeg ændret koden til følgende: Private Sub EntrepriseKontraktNr_Click() Dim a As String, b, c c = Me.Parent![SAP-EntreprNr] a = Mid(c, 4, 4) b = Mid(c, 9, 2) Me.[EntrepriseKontraktNr] = a & "." & b End Sub ---------------------------------------------------------- Dvs, hvis jeg nu opretter ny post i underformen og markerer feltet [EntrepriseKontraktNr] så vises den sammensatte værdi som den skal. Men med denne hændelse viser den så ikke værdien i feltet på forhånd, og det ville jo være det smarteste for brugeren. Kunne jeg opnå det så er løsningen helt OK.
til mugs... håber du fik dine point? tak for hjælpen - du fik mig ledt på rette vej. Her er den kode jeg tror jeg vil bruge (og som virker): Private Sub Form_BeforeInsert(Cancel As Integer) Dim a As String, b, c c = Me.Parent![SAP-EntrepriseNr] a = Mid(c, 4, 4) b = Mid(c, 9, 2) Me.[EntrepriseKontraktNr] = a & "." & b End Sub
Jeg har fået point, tak. Hvis skidtet fungerer efter din hensigt, så er alle vel glade.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.