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 Sub
toinen 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 Sub
mikä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.