Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: ComboBox arvojen tallennus soluun

Apua kaipaava [07.05.2009 15:50:09]

#

Moikka

Olen tekemässä exceliin lomaketta. Minulla on seuraavanlainen ongelma, minulla on 18 ComboBoxia ja haluaisin tallentaa näiden arvot soluihin. Tämä onnistuisi helposti jos jokaiselle ComboBoxille olisi oma tallennussolu. Ongelmana kuitenkin on, että voi olla että vain ComboBox1, ComboBox2 ja ComboBox18 sisältää arvon (ovat valittuna). Miten saan ohjelman toimimaan niin, että näiden kolmen ComboBoxin arvot tulostuvat kolmeen allekkaiseen soluun (väliin ei saisi jäädä tyhjiä soluja)? Ymmärrän että jotenkin pitäisi vertailla, mitkä kaikki ComboBoxit sisältävät arvon, mutta tuota koodia en osaa toteuttaa.

groovyb [07.05.2009 16:08:27]

#

Sub Form_Load()                        'Form_Loadiin thisworkbookin alle
Sheet1.ComboBox1.AddItem ("eka")       'kamat comboboxeihin
Sheet1.ComboBox2.AddItem ("toka")
Sheet1.ComboBox3.AddItem ("kolmas")




'.... jne
end sub

'nämä sheet1:seen vaikka jonkun napin eventin tai vastaavan alle

Private Sub CommandButton1_Click()

Dim data(18) As String
data(1) = Sheet1.ComboBox1.Value
data(2) = Sheet1.ComboBox2.Value
'jne, eli laitetaan comboxien arvot taulukkoon

Sheet1.Cells(1, 1) = data(18) ' eli combobox18.value ensimmäiseen haluttuun soluun

Dim i As Integer

i = 1

For i = 1 To 17

If data(i) = "" Then

Else

Sheet1.Cells(i + 1, 1) = data(i) 'jos comboboxissa on tavaraa, ne listautuu sen solun alle, jossa combobox18 sisältö on

End If

Next

End Sub

Ihme_kala [07.05.2009 17:34:19]

#

groovyb kirjoitti:

If data(i) = "" Then

Else

Tuon sijasta, ja yleensäkin kun haluat tarkistaa että onko joku tieto tyhjä, voi tehdä ihan simppelisti näin:

If variable <> "" Then
    ***Tehdään juttu, koska muuttuja ei ole tyhjä***
End If

Antti Laaksonen [07.05.2009 18:27:45]

#

Tämä koodi tulostaa solusta A1 alkaen allekkain ei-tyhjien ComboBoxien sisällöt:

Dim rivi As Integer
Dim sarake As Integer
Dim i As Integer
Dim teksti As String
rivi = 1   ' aloitusrivi
sarake = 1 ' aloitussarake
For i = 1 To 18 ' 18 ComboBoxia
    teksti = Controls("ComboBox" & i).Text
    If teksti <> "" Then
        Cells(rivi, sarake) = teksti
        rivi = rivi + 1
    End If
Next

Apua kaipaava [08.05.2009 07:02:00]

#

Antti Laaksonen kirjoitti:

Tämä koodi tulostaa solusta A1 alkaen allekkain ei-tyhjien ComboBoxien sisällöt:

Dim rivi As Integer
Dim sarake As Integer
Dim i As Integer
Dim teksti As String
rivi = 1   ' aloitusrivi
sarake = 1 ' aloitussarake
For i = 1 To 18 ' 18 ComboBoxia
    teksti = Controls("ComboBox" & i).Text
    If teksti <> "" Then
        Cells(rivi, sarake) = teksti
        rivi = rivi + 1
    End If
Next

En saa tuota yllä olevaa koodia toimimaan. Saan seuraavanlaisen herjan
Compile error: Sub or Function not defined. Missähän on vika?

groovyb [08.05.2009 09:22:19]

#

se ei ole sinulla minkään funktion alla.

Sub ohjelmapätkä()

'koodi tähän väliin

End Sub 'lopetus

voit liittää sen myös eventtiin,

Sub Form_Load()

'koodi

End Sub 'tämä koodi toteutuu kun avaat tiedostosi

eventit luot helposti kun vedät jonkun controllin (esim nappulan) lomakkeelle,
laitat visual basicistä design moden päälle, ja sen jälkeen kaksoisnapautat sitä controllia. jonka jälkeen se luo kyseiselle sheetille eventin visual basicin puolelle.

esim jos napautat nappulaa design modessa, se luo sheetille

Private Sub CommandButton1_Click()

'...ja koodi tähän taas

End Sub

ja koodi tämän eventin sisällä totetutuu kun nappia painetaan.

ja jos sinulla on oma funktio, vaikka

Private Sub MySub()

Sheet1.Cells(1,1) = "Terve

End Sub


'voit kutsua sitä nappula_painettu eventissä näin

Private Sub CommandButton1_Click()

MySub()

End Sub

kannattaa katsoa VBA tutorialeja ja aloitusoppaita netistä, aika hyviä löytyy helposti

Antti Laaksonen [08.05.2009 09:42:14]

#

Apua kaipaava kirjoitti:

En saa tuota yllä olevaa koodia toimimaan. Saan seuraavanlaisen herjan
Compile error: Sub or Function not defined. Missähän on vika?

Minkä rivin kohdalla tuo virheilmoitus tulee?

Voit tehdä lomakkeelle esim. painonapin, johon kirjoitat koodin.

Private Sub CommandButton1_Click()
    ' ...
End Sub

Vastaus

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

Tietoa sivustosta