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 SubLisä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 SubMod. 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.PutInClipboardTä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 SubKUMMASSAKIN TAPAUKSESA MUISTA TALLENTAA TYÖKIRJA MAKROT SALLIVASSA MUODOSSA
Aihe on jo aika vanha, joten et voi enää vastata siihen.