Hei
Olen aloitteleva vielä vba/macro saralla, olisi näinkin simppeli ongelma mihin nyt en keksi mitään järkevää toteutusta.
Tarkoitus olisi tehdä excel niin että rivillä on teksti ja lopussa checkbox.
Rivien lopussa on painike joka kopioi leikepöydälle valittujen checkboksien tekstit jotka voisi sitten liittää vaikka notepadiin.
Onko tämä järkevämpi toteuttaa macroilla vai vba:lla?
Olenko täysin hakoteillä tälläisen koodin kanssa?
Private Sub CommandButton2_Click() If lRow = 0 Then lRow = 7 Else lRow = lRow + 5 End If 'Do the copy Sheets("sheet2").OLEObjects("CheckBox1").Copy Sheets("sheet3").Range("V" & lRow).PasteSpecial End Sub
Lisäys:
Tai varmaankin järkevämpi näin mutta miten saisi että kopioi tekstit leikepöydälle?
Private Sub CommandButton1_Click() ' The following 4 lines of code will work with Form control checkboxes With Me For i = 1 To .CheckBoxes.Count If .CheckBoxes(i).Value = Checked Then MsgBox .CheckBoxes(i).Caption Next End With ' The following 4 lines of code will work with ActiveX control checkboxes With Me For i = 1 To .OLEObjects.Count With .OLEObjects(i) If .Name Like "CheckBox" & "*" Then If .Object.Value = True Then MsgBox .Object.Caption End With Next End With End Sub
Mod. lisäsi kooditagit!
paulhenrik kirjoitti:
Onko tämä järkevämpi toteuttaa macroilla vai vba:lla?
Ensimmäinen ajatus joka minulle tulee: "Millaisia on Excelin Macrot jotka ei ole VBA?"
Jos käytät userformia, niin se voisi toimia näin
Dim sz As String Dim ctr As Control Dim MyData As New DataObject sz = "" For Each ctr In Controls If Left(ctr.Name, 8) = "CheckBox" Then If ctr.Value Then sz = sz & ctr.Caption & vbCrLf End If Next MyData.SetText sz MyData.PutInClipboard
Tässä varmaan tarkoitettiin "nauhoitettua" makroa, joka tietenkin on vba:ta kooditasolla, mutta koodit jäävät tallennetun makron taakse piiloon.
Grez kirjoitti:
(15.09.2016 09:30:00): ”– –” Ensimmäinen ajatus joka minulle...
Jostain syystä antaa virhettä "For Each ctr In Controls"
- Liitin tuon koodin suoraan CommandButton1 taakse, pitäisikö tuo olla jotenkin erilailla? vai määritänkö vielä jotain?
groovyb kirjoitti:
Tässä varmaan tarkoitettiin "nauhoitettua" makroa, joka tietenkin on vba:ta kooditasolla, mutta koodit jäävät tallennetun makron taakse piiloon.
Ei ne mun mielestä mitenkään jää piiloon, sehän on siellä VBA moduulilla ihan normaalisti.
paulhenrik kirjoitti:
Jostain syystä antaa virhettä "For Each ctr In Controls"
- Liitin tuon koodin suoraan CommandButton1 taakse, pitäisikö tuo olla jotenkin erilailla? vai määritänkö vielä jotain?
Mulla kyllä toimii ihan täysin tuo koodi, kopioin sen suoraan Excelistä (Excel 2016). Itselläkin oli commandbuttonin click-eventissä toi koodi. Onko sulla siis samalla UserFormilla se commandbutton kuin nuo chekcboxit? Vai onko se komentopainike laskentataulukolla tms?
Antaa virheen "Object required"
Checkboxit ja buttoni on siis laskentataulukolla. Ja koodi samaten commandbuttonin click eventissä.
Joo en jaksa alkaa arvailemaan miten nykyexcelillä saa lisättyä painikkeita ja checkboxeja laskentataulukolle. Ehkä voit laittaa tuon taulukon jossa ongelma esiintyy ladattavaksi jostain
Grez kirjoitti:
Ei ne mun mielestä mitenkään jää piiloon, sehän on siellä VBA moduulilla ihan normaalisti.
Jep, mutta ei ne missään makroa nauhoittaessa, eikä sen jälkeenkään näy. Ellei sitten itse käy katsomassa. Tämä aiheuttaa monille ihmettelyä VBA:n ja Excel makron välillä, vaikka ne käytännössä ovat aivan samoja asioita.
'Mikäli käytät ActiveX ohjausobjekteja: Private Sub CommandButton1_Click() Dim strText As String: strText = "" Dim obj As OLEObject For Each obj In ActiveSheet.OLEObjects If InStr(obj.Name, "CheckBox") > 0 Then If obj.Object.Value = True Then strText = strText & obj.Object.Caption & vbCrLf End If End If Next Dim objData As New MSForms.DataObject objData.SetText strText objData.PutInClipboard End Sub
'Mikäli käytät Lomakeohjausobjekteja: 'Lisää työkirjan sivulle Painike (lomakeohjausobjekti), Liitä makro- 'ikkunassa valitse alasvetovalikosta Tämä työkirja ja klikkaa Tallenna. 'Lisää taulukkoon vielä haluamasi määrä Valintaruutuja (lomakeohjausobjekti). 'Lisää sitten sivulle vielä ActiveX komentopainike ja poista se sitten 'saman tien (luo VBA-projektiin referenssin MSForms-kirjastoon, joka 'mahdollistaa DataObject'in käytön). 'Valitse valintanauhasta Kehitystyökalut, valitse Visual Basic, klikkaa 'Insert Module kuvaketta ja valitse listasta Module. Lisää moduuliin alla 'oleva koodi kokonaisuudessaan. Sub Painike1_Napsauta() Dim strText As String: strText = "" For Each Shape In ActiveSheet.Shapes If InStr(Shape.Name, "Check Box") = 1 Then If Shape.OLEFormat.Object.Value = 1 Then strText = strText & Shape.OLEFormat.Object.Caption & vbCrLf End If End If Next Dim objData As New MSForms.DataObject objData.SetText strText objData.PutInClipboard End Sub
KUMMASSAKIN TAPAUKSESA MUISTA TALLENTAA TYÖKIRJA MAKROT SALLIVASSA MUODOSSA
Aihe on jo aika vanha, joten et voi enää vastata siihen.