Koulutyöt johdattivat minutkin tämän kielen pariin, exceliin pitäs visual basicilla ohjelmoida joitain juttuja, mutta pariin ongelmaan en ole keksinyt vastausta:
Jos mulla on excelin soluissa nimiä, ja inputboxissa käyttäjä syöttää nimen, niin tarkoitus olisi etsiä solu missä tämä syötetty nimi olisi. no ongelmaksi on muodostunut keksiä miten tuo stringien vertailu suoritetaan että sama nimi löytyisi (olikohan javassa equals?).
Toinen vastaus, mitä etsin liittyy kirjaimien etsimiseen käyttäjän syöttämästä merkkijonosta inputboxissa. Mun ohjelmat menee sekaisin jos hinnaksi syötetään jotain jossa on kirjaimia, eli pitäisi tarkistaa, onko merkkijonossa muuta kuin numeroita ja mahdollisesti pilkku. Miten onnistuu parhaiten.
Kolmas: desimaaliluvuissa tuo ecxeli huolii vain pilkun, ei pistettä. miten voi muuttaa käyttäjän syöttämästä desimaaliluvusta pisteen pilkuksi, ennen kuin ohjelma sitä edeleen käsittelee?
Siinä tällä hetkellä mieltä vaivaavat kysymykset. Noihin luulisin löytyvän suoraan sopivia metodeja (tms.) mutta en niitä itse osannut juurikaan etsiä, vaikka visual basicin helpistä sitä yritin. Jos tiedätte hyvän keinon etsiä juurikin erilaisia metodeja niin vinkit ovat tervetulleita.
Vertailu hoituu näin:
if excel_solu = input1.text then tee_jotain
Jos haluat, että isoilla/pienillä kirjaimilla ei ole väliä, niin:
if lcase(excel_solu) = lcase(input1.text) then tee_jotain
Lcase-funktio muuttaa merkkijonon kaikki merkit pieniksi, lcasen sijaan voit käyttää ucase-funktiota, joka tekee juuri päinvastoin.
Instr-funktiolla voit tutkia, löytyykö jokin merkki merkkijonosta:
if instr(exce_taulukko, "a") then tee_jotain
Jos merkki löytyy, instr palauttaa sen kohdan, jossa merkki esiintyy ensimmäisen kerran.
Merkin tai merkkijonon korvaaminen toisella onnistuu replace-funktiolla:
excel_taulukko = replace(".", ",", excel_taulukko)
Kannattaa katsoa vb:n oppaat, nämä ovat perusjuttuja.
Kiitos noista. tuossa replacessa toi tutkittava stringi kyllä syötetään ekana, mut se oli sit helppo katsoa helpistä.
Enivei, eikö tuohon kirjainten, tai oikeammin muiden merkkien kuin numeroiden, pisteen ja pilkun etsimiseen ole helpompaa tapaa. Siis käyttäjän tulee syöttää mun ohjelmasssa hinta, ja mikäli sinne pirullinen käyttäjä syöttää vaikka '#' merkin niin ohjelma pukkaa erroria. Tuohon jos saisi nerokkaan ratkaisun niin hyvin menee.
Onpas sellainen funkkari kuin IsNumeric.
vb:n helppi kirjoitti:
Returns a Boolean value indicating whether an expression can be evaluated as a number.
No voithan tehdä ihan oman funktion, joka poistaa kaikki epäkelvot merkit. Sitten sitä olisi kätevä käyttää, ja se on lisäksi helppo koostaa edellä mainituista funktioista. Left-, Right- ja Mid-funktiot saattavat myös osoittautua hyödyllisiksi.
IsNumeric teki tempun, loistavaa! Kiitti soodalle ja muillekin, katsotaan josko selviisi tästä eteenpäin vähänaikaa omin taidoin.
Vielä jotain pientä ja epäselvää, johon en löytänyt vastausta oppaasta: miten saan pakotetun rivinvaihdon inputbox / msgboxin tkestiin? eli ihan vaan kijoitettua tekstiä useammalle riville tommoseen laatikkoon.
edit: Hyödylliseksi osottautuisi myös näppäinyhdistelmä tms. jolla ikuiseen looppiin jäänyt VB ohjelma saataisiin keskeytettyä.
Hoo, seuraava olisi myös hyvä tietää. Olen tehnyt exceliin napin joka ensin kysyy asiakkaan nimen (kassakone ohjelma) ja sen jälkeen toisella inputboxilla summan, joka laitetaan asiakkaan piikkiin. Miten saan ohjelman keskeytettyä, jos käyttäjä painaa cancelia (inputboxissa)?
Se rivin vaihto onnistuuu siinä messagepoksissa vaikka näin:
msgbox "tämä on ensimmäinen rivi" & vbcrlf & "tämä on toinen rivi"
Inputboxin kanssa kannattaa käyttää String muotoista muuttujaa, johon tulos asetetaan. Näin vältytään virheiltä, joita syntyy jos Inputbox palauttaa tyhjän ("" -> Cancelia painettu) tai merkkijonon. Convertoi sitten tuon muuttujan numeroksi, jos haluaa käsitellä numeroita.
Eli vastaus kysymykseesi... Inputboxin jälkeen tarkistetaan, onko muuttuja tyhjä (""), mistä tiedetään onko Cancelia painettu.
Public Sub Test() Dim abu As String abu = InputBox("Test", "Test") If abu = "" Then Exit Sub ElseIf IsNumeric(abu) Then MsgBox "Annoit numeron " & abu & "!", vbInformation Else MsgBox "Annoit merkkijonon " & abu & "!", vbInformation End If End Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.