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.