Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: stringien vertailu ja muuta pientä

Sivun loppuun

Eerikki T [07.07.2004 12:44:52]

#

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.

Turambar [07.07.2004 13:38:36]

#

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.

Eerikki T [07.07.2004 16:37:57]

#

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.

sooda [07.07.2004 16:44:06]

#

Onpas sellainen funkkari kuin IsNumeric.

vb:n helppi kirjoitti:

Returns a Boolean value indicating whether an expression can be evaluated as a number.

hunajavohveli [07.07.2004 16:53:10]

#

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.

Eerikki T [07.07.2004 19:32:39]

#

IsNumeric teki tempun, loistavaa! Kiitti soodalle ja muillekin, katsotaan josko selviisi tästä eteenpäin vähänaikaa omin taidoin.

Eerikki T [20.07.2004 13:51:15]

#

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)?

tuomas [20.07.2004 14:27:30]

#

Se rivin vaihto onnistuuu siinä messagepoksissa vaikka näin:

msgbox "tämä on ensimmäinen rivi" & vbcrlf & "tämä on toinen rivi"

BadSource [20.07.2004 14:43:55]

#

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

Sivun alkuun

Vastaus

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

Tietoa sivustosta