Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: VBA: Checkboxien tekstit leikepöydälle?

Sivun loppuun

paulhenrik [15.09.2016 09:06:52]

#

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!

Grez [15.09.2016 09:30:00]

#

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

groovyb [15.09.2016 11:16:34]

#

Tässä varmaan tarkoitettiin "nauhoitettua" makroa, joka tietenkin on vba:ta kooditasolla, mutta koodit jäävät tallennetun makron taakse piiloon.

paulhenrik [15.09.2016 11:35:44]

#

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?

Grez [15.09.2016 11:39:41]

#

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?

paulhenrik [15.09.2016 12:23:01]

#

Antaa virheen "Object required"
Checkboxit ja buttoni on siis laskentataulukolla. Ja koodi samaten commandbuttonin click eventissä.

Grez [15.09.2016 13:14:17]

#

Joo en jaksa alkaa arvailemaan miten nykyexcelillä saa lisättyä painikkeita ja checkboxeja laskentataulukolle. Ehkä voit laittaa tuon taulukon jossa ongelma esiintyy ladattavaksi jostain

groovyb [15.09.2016 15:28:45]

#

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.

neosofta [04.10.2016 14:00:35]

#

'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

Sivun alkuun

Vastaus

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

Tietoa sivustosta