Tuo edellinen jo ratkennut ongelma saa jatkoa (kyseessä on siis eräisiin testauksiin liittyvät tietojen talletukset ja niiden raportoinnit):
Kutakin testaustyyppiä varten on lomake on tietojen syöttämisiin, ja siinä sitten tehdään syötettyjen tietojen perusteella tarvittavia laskutoimituksia. Lomakkeella lasketaan monia asioita. Sen kolmea laskettua tietoa tarvitaan sitten myöhemmin testausraportilla.
Saanko jotenkin koodatuksi (tai muulla tavoin toteutetuksi) sen, että nämä lasketut tiedot talletetaan ko. tietueen niitä varten tehtyihin kenttiin?
Tulostettavalla raportilla tarvitaan kustakin testauksesta paljon vähemmän tietoa kuin taulussa ja lomakkeella on, ja tuntuu turhauttavalta laskea jälleen raportilla samoja asioita, jotka on jo kertaalleen laskettu. Lisäksi yksi näistä luvuista on se, joka on käyty excelissä laskemassa.
(On turhan vähän tullut tämän Accessin ja sen VBA:n kanssa touhutuksi.)
Moi avevu!
Yksinkertainen ratkaisu suoraan raporttiin...
Private Sub RaportinYlätunniste_Paint()
Static laskettu As Boolean
If Not laskettu Then
laskettu = True
Summaruutu1.Text = CStr(Val(arvoruutu1.Text) + Val(arvoruutu2.Text)) 'esim.
'Summaruutu on raporttiin jälkikäteen lisätty sitomaton tekstiruutu
'ja arvoruudut taas voit pukata halutessasi vaikkapa piiloon...
'jne...
End If
End Subtoinen mahdollisuus on tehdä kysely johon lisäät rakennenäkymässä uuden kentän (esim. Summa) ja lisäät kenttään lauseenmuodostimella kaavan (esim. Summa: [Kenttä1]+[Kenttä2]) ja teet sitten raportin luomastasi kyselystä.
Hei neau33 ja muutkin!
Alla on esimerkki raportista. Siinä siis voi olla - ja yleensä myös on - useita tutkimustuloksia. Kaikki alkupään tiedot (joihin en otsikkoa ole laittanut) tulevat tietueen kentistä niihin syötettyinä lukuina. Tuo sarakkeen "K150" luku on se Excelin avulla kullekin tutkimukselle laskettu. Samoin "Tiheys" lasketaan dimensioiden (tapauksesta riippuen 9 tai 12 kpl) keskiarvojen ja punnitun massan perusteella. Juuri nuo luvut pitäisi saada lomakkeelta talteen sen täyttöhetkellä käsittelyssä olevan tietueen arvoiksi. Tästä siis on kyse. Lomake käsittelee yhtä tutkimusta. Raportti koostaa asiakkaalle useita tutkimuksia.
K150 Tiheys
2 25.10.12 K45 7 01.11.12 104,0 385,0 OK Ei täyty 47,6 2436
4 25.10.12 K45 7 01.11.12 104,1 374,3 OK ok 46,1 2415
6 25.10.12 K45 7 01.11.12 104,1 358,3 OK Ei täyty 44,2 2409
8 25.10.12 K45 7 01.11.12 104,2 389,6 OK Ei täyty 48,0 2419
10 25.10.12 K45 7 01.11.12 104,1 367,8 OK Ei täyty 45,4 2401
12 25.10.12 K45 7 01.11.12 104,1 381,6 OK ok 47,1 2402
14 25.10.12 K45 7 01.11.12 104,1 388,2 OK Ei täyty 47,9 2423
16 25.10.12 K45 7 01.11.12 104,1 402,6 OK Ei täyty 49,6 2423
18 25.10.12 K45 7 01.11.12 104,1 392,0 OK Ei täyty 48,3 2416
Toivottavasti nyt tulin ymmärretyksi!
Mikä tuon excelin käyttötarkoitus tässä tapauksessa on, eli voisiko koko excelin ohittaa laskemalla arvot suoraan lomakkeella vba:lla?
ylipäätään, en oikein ymmärrä mitä haluat? Arvon tietokannasta lomakkeen kenttään vai arvon excelistä lomakkeen kenttään?
Oho. En esikatsellut ja aineisto meni "nippuun". Kyse on kuitenkin kahdesta viimeisestä luvusta kussakin tietueessa, esim. eka rivin 47,6 ja 2436
Lisäys: Ei voi. Arvot tulevat normien määrittelemien arvojen perusteella. Tässä on kyseessä akkreditoitu tarkastuslaitos ja normeja on pakko noudattaa (vaikka aika lähelle päästäisinkiin etsimällä lauseke muodostamaan tuo luku). Kyseessä on ns. ekvivalentti, jolloin eri kokoisten tutkittavien kappaleiden tulos muunnetaan normikokoisen kappaleen lujuudeksi.
Aika jännää kyllä toi "Excel-taikuus". Oon kuvitellut, että jos samat kaavat ja tiedot mitä Excelissä on laitetaan jonnekin muualle, niin saadaan sama tulos. Ehkä Excel sitten kuitenkin laskee jotenkin maagisesti väärin ja tämä virhe halutaan mukaan tuloksiin että ne on "normin mukaisia" tms..
Se kun on niin, että interpolointi olemassa olevista taulokoista on excelillä helppoa. Ja tässähän ei tuo excel ole se ydinkysymys, vaan laskettujen arvojen talletus - oli ne sitten miten vain laskettuja - tietyn tietueen kentiksi myöhempää raportointia varten.
Moi taas avevu!
'näin saat ne kolme laskettua arvoa lomakkeelta tietokantaan
Dim values(0 To 2) As String
Private Sub Form_Load()
Muokkaus0.Locked = True 'sitomattomia tekstiruutuja
Muokkaus2.Locked = True
Muokkaus4.Locked = True
End Sub
Private Sub Komento5_Click()
'Testi
Muokkaus0.Locked = False
Muokkaus2.Locked = False
Muokkaus4.Locked = False
Muokkaus0.SetFocus
Muokkaus0.Text = "100"
Muokkaus2.SetFocus
Muokkaus2.Text = "200"
Muokkaus4.SetFocus
Muokkaus4.Text = "300"
Muokkaus0.Locked = True
Muokkaus2.Locked = True
Muokkaus4.Locked = True
End Sub
Private Sub Muokkaus0_Change()
values(0) = Muokkaus0.Text
CheckValues
End Sub
Private Sub Muokkaus2_Change()
values(1) = Muokkaus2.Text
CheckValues
End Sub
Private Sub Muokkaus4_Change()
values(2) = Muokkaus4.Text
CheckValues
End Sub
Private Sub CheckValues()
For i = 0 To 2
If values(i) = "" Then Exit Sub
Next
Dim rs As Recordset
Set rs = CurrentDb.TableDefs("Taulu1").OpenRecordset(dbOpenTable) 'esim.
rs.MoveLast
rs.AddNew
rs.Fields("Kenttä1").Value = values(0) 'tai jos on luku: Val(values(0))
rs.Fields("Kenttä2").Value = values(1)
rs.Fields("Kenttä3").Value = values(2)
rs.Update: rs.Close: Set rs = Nothing
For i = 0 To 2
values(i) = ""
Next
End Submikäli käytät tietokantaan sidottua lomaketta ja haluat päivitellä jo olemassa olevia tietueita niin täältä löytyy VBA:lle sovitettavissa oleva, VB6:lla toteutettu malli siitä miten rakennella update systeemi recordset kloonin avulla.
Kiitos oikein paljon neau33. Homma etenee!
Aihe on jo aika vanha, joten et voi enää vastata siihen.