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.
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
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
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
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?
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
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.