Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA monivalintalaatikko?

Sivun loppuun

Jukkelus [25.02.2008 23:37:03]

#

Tervehdys

Olen vielä aloittelija ohjelmoinnissa... Teen pienelle yhdistykselle Access-pohjaista jäsenrekisteriä ja siihen koodia, joka kyselee uusien jäsenten tiedot. Tekstit saan kyseltyä inputbox:eilla, kyllä-ei-kysymykset messagebox:eilla, mutta miten saan vba:lla aikaan laatikon, jossa voi valita yhden vaihtoehdon kolmesta ja painaa ok?

Avusta kiitollinen
Jukkelus

neau33 [26.02.2008 01:27:52]

#

Heippa Jukkelus!

Raahaa lomakkeelle 3 radionappia + komentopainike, kirjoita sitten komentonapin Click_tapahtuman koodiksi ehtolause-rakennelma...

If OptionButton1.Value = True Then
  'tee jotain... (esim. viittaus makroon)
ElseIf OptionButton2.Value = True Then
  'tee jotain toista...
ElseIf OptionButton3.Value = True Then
  'tee jotain kolmatta...
End If

Jukkelus [26.02.2008 10:22:24]

#

Kiitos Nea nopeasta vastauksesta ja esimerkkikoodista :)

Valitettavasti tyhmälle jäi vielä jatkokysymys :) Eli miten saan VBA:lla aikaan tuon lomakkeen, johon nuo radionapit laitetaan?

Eli tällä hetkellä homma toimii niin, että Accessissa on lomake, jolla voi tarkastella jäsentietoja. Lomakkeella on nappi "Lisää jäsen", johon on liitetty "private sub", joka kysyy nimet, osoitteet yms. ja laskee juoksevasta siemenluvusta viitenumerokelpoisen jäsennumeron. Ainoa ongelma on, että lomakkeella yksi tieto valitaan pudotusvalikosta. Tarvitsisin siis inputboxin tapaisen dialogi-ikkunan(?), johon nuo edellämainitut radionapit voisi laittaa.

Edelleen tumpelo :)
Jukkelus

neau33 [26.02.2008 12:18:00]

#

Heippa taas Jukkelus!

Tee Accesilla lomakekysely, nimeä lomake ja tallenna... Nyt voit sitten valita poistatko kyselyn pohjalta luodun taulukon formilta (lomake) vai et. Voit tehdä kyselyn esim. siten, että kysely löytää vain yhden tietueen...ja sitten piilottaa ko. taulukon (objekti.visible = false). Raahaa nyt tälle luomallesi lomakkeelle radionapit + muut haluamasi kontrollit.
Nyt voit samassa projektissa viitata luomaasi lomakkeeseen esim. projektin avaamisen yhteydessä käynnistettävästä makrosta käsin kirjoitamalla globaaliin moduuliin (ei lomakemoduuli)...

Sub auto_open()
 'luomasi lomakkeen nimi
 LomakeenNimi.Show
End Sub

...jolloin lomake ilmestyy automaattisesti näkyville aina kun projekti avataan.

Jos tahdot välittää tietoa toisille lomakkeille, sisällytä näiden tietojen varastointiin/välittämiseen tarvittavat muuttujat globaaliin moduuliin (niitä joihin VBA-makrot kirjoitellaan) ja aseta muuttujat julkisiksi käyttämällä joko Global tai Public avainsanaa.

Jukkelus [26.02.2008 22:03:12]

#

Kiitos Nea jälleen nopeasta vastauksestasi. Ohjeet olivat hyviä, mutta minussa taitaa olla vikaa, sillä tajusin ohjeistasi ehkä puolet :( Taidan kaivata todella selkeää rautakangesta vääntämistä :)

Yritän tässä vielä selittää mitä kaipaan. Minulla on siis tietokanta, jossa on taulu, jonka tiedot näytetään lomakkeella. Suurin osa lomakkeen kentistä on tekstikenttiä, mutta yksi kenttä on pudotusvalikko (combo box? eli taulussa se on tyyppiä number ja sisältö katsotaan toisesta taulusta tuon numeron perusteella). Lomakkeella on myös yksi nappi, jonka nappi_on_click() koodi luo uuden tietueen, kyselee (tietokone illiteraatilta käyttäjältä) siihen tiedot tämän tyyppisesti:

vSyöte = InputBox("Kirjoita tieto", "Tiedon syöttö")
Me.Tieto = vSyöte
vSyöte = Inputbox("Kirjoita toinen tieto", "Tiedon syöttö")
Me.Toinen tieto = vSyöte

Ongelmakodan voisin kiertää näin

vSyöte = InputBox("Kirjoita oikea tieto (tieto1, tieto2, tieto3)", "Tiedon syöttö")
If vSyöte = "tieto1" Then
Me.Ongelmatieto = "1"
Else If vSyöte = "tieto2" Then
Me.Ongelmatieto = "2"
Else
Me.Ongelmatieto = "3"
End If

Mutta yritän siis löytää fiksumman tavan saada käyttäjä valitsemaan yhden kolmesta vaihtoehdosta ja kirjoittaa vaihtoehtoa vastaavan numeron lomakkeelle.

Umpitumpelo? ja avusta edelleen kiitollinen
Jukkelus

neau33 [27.02.2008 01:54:43]

#

Heippa taas Jukkelus!

Siis näinkö vaiko eikö..?

Jukkelus kirjoitti:

Minulla on siis tietokanta, jossa on taulu, jonka tiedot näytetään lomakkeella...

johon voi raahata myös radionappeja...

Private Sub nappi_on_click()

  If Me.OptionButton1.Value = True Then
    Me.Ongelmatieto = "1"
  ElseIf Me.OptionButton2.Value = True Then
    Me.Ongelmatieto = "2"
  ElseIf Me.OptionButton3.Value = True Then
    Me.Ongelmatieto = "3"
  Else
    MsgBox "Fatal Error", vbCritical, App.Title
    Exit Sub
  End If
'...
'[lainaus "Jukkelus"]Lomakkeella on myös yksi nappi, jonka nappi_on_click() koodi luo uuden tietueen...[/lainaus]

Jukkelus [27.02.2008 11:05:31]

#

Heippa taas Nea

Kiitoksia kärsivällisyydestäsi :)

lainaus:

lainaus:

Minulla on siis tietokanta, jossa on taulu, jonka tiedot näytetään lomakkeella...

johon voi raahata myös radionappeja...

Anteeksi! En näemmä osannut selittää mikä ongelmani on :)

Eli tietojen syöttö jäsenrekisteriin onnistuu manuaalisesti vallan mainiosti. Ongelma on se, että se menee käyttöön täysin tietokone-illiteraateille ihmisille. Siksi olen pyrkinyt tekemään siitä mahdollisimman helppokäyttöisen (tietokantaikkuna piilossa, kaikki toiminnot löytyvät valikkonäytön takaa jne).

Uusien tietojen syöttämisen helpottamiseksi lomakkeella on nappi, joka käynnistää tietojen kysely -rutiinin, joka luo uuden tietueen, kysyy käyttäjältä Inputboxeilla ja MessageBox(YesNoCancel):eilla kaikki tiedot yksi kerrallaan, kirjoittaa ne oikeille paikoilleen ja lopuksi generoi viitenumerokelpoisen jäsennumeron.

Ongelmakohta on siinä, että yhtä tietoa ei kirjoiteta, vaan se valitaan pudotusvalikosta. Tämä kenttä on lomakkeen rakenteessa tyyppiä Number (Mun Office on englanninkielinen) ja lookup-välilehdellä se sanoo olevansa combobox, jonka näytettävä sisältö katsotaan toisesta taulusta tuon numeron perusteella.

Tauluun kirjoitettassa ja lomakkeella tuo kenttä on pudotusvalikko, josta voi valita yhden kolmesta valmiista vaihtoehdosta. Tietoja käsin kirjoitettaessa kaikki toimii, mutta en osaa tehdä syöttörutiiniin sellaista dialogi-ikkunaa (tarkoitan siis samantyyppistä ikkunaa kuin nuo messageboxit ja inputboxit), jossa olisi jokin tapa valita yksi kolmesta vaihtoehdosta ja ok nappi.

Kommunikaatiovammainen
Jukkelus

Jukkelus [27.02.2008 13:57:49]

#

lainaus:

Tämä kenttä on lomakkeen rakenteessa tyyppiä Number

korjaus: tietenkin taulun...

Jukkelus

neau33 [27.02.2008 14:55:53]

#

Heippa taas Jukkelus!

ekaks: unohda ne radionapit... elikä raahaa sille formille comboboxi (säädä DropDownStyle arvoksi: 2), jonka sitten sidot siihen taulun comboboxi-kenttään, jolloin et tarvitse mitään ylimääräistä nappia...combossa näkyy täysin samat valinnat kuin taulun combossa ja valinta hoituu suoraan sillä...huolehdi vain siitä, että tässä vaiheessa ollaan jo luotu uusi tietue, koska muutoin käyttäjä voi päästä vahingossa säätelemään olemassa olevan tietueen comboon sidottua kenttää, elikä luot uuden tietueen jo lomakkeen latausvaiheessa...Käyttäjä voi sitten joko täytellä kentät combolla ja inputboxeilla tai... -> jos et ole vielä miettinyt peruutustoimintoa niin nyt olisi ehkä aika kiinnittää myös siihen asiaan huomiota...
lisäksi: niitä VBA-ohjeita on hyvä välillä tutkia mikäli ovat asennettuina...jos ei ole niin asenna ja elämäsi alkaa helpottua...

Jukkelus [27.02.2008 15:43:44]

#

Heippa taasen

Saanko siis comboboxin auki VBA:sta käsin?

lainaus:

jos et ole vielä miettinyt peruutustoimintoa niin nyt olisi ehkä aika kiinnittää myös siihen huomiota...

Kiitoksia vinkistä. Mulla cancelia klikkaamalla pääsee ulos tietojensyöttörutiinista. Viimeinen asia ennen exit sub:ia on poista nykyinen tietue.

lainaus:

Lisäksi niitä VBA-ohjeita on hyvä välillä tutkia mikäli ovat asennettuina...jos ei ole niin asenna ja elämäsi alkaa helpottua...

Wow! tuo oli kiltein ikinä kuulemani RTFM-kehotus :)

Mulla on helpit asennettuna, mutta office on englanniksi. Lontoon murre on kyllä hallussa, mutta ohjelmointitermit englanniksi on sitten jo eri juttu... Täytynee käydä ostamassa sopiva sanakirja...

Kielipuolena
Jukkelus

neau33 [27.02.2008 15:53:34]

#

Heippa taas Jukkelus!

Minulla taas ei ole MS Access'ia lainkaa vaan käytän JET-moduulia Excelistä käsin, mikä mahdollistaa VBA/ADO/DAO/OLE DB tasolla lähes mitä vaan...

Jukkelus [07.03.2008 14:28:34]

#

Heureka!

Nyt se ratkesi :). Ensin tein lomakkeen jossa on listbox ja ok-nappi.
Tietojenkysely rutiiniin lisäys

If Me.Jäsenmaksu = True Then
    DoCmd.OpenForm "lomake", acNormal, , , acFormEdit, acDialog
End If

Ja lomakkeen ok-nappiin koodi

Forms!Jäsenet.Form!Maksutapa = Me.Lista
DoCmd.Close

Kiitos Nea vielä kerran avusta

Jukkelus


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta