Avatar billede tma_oksboel Nybegynder
24. september 2002 - 11:13 Der er 27 kommentarer og
3 løsninger

Reference mellem kontrolelementer på Worksheet og VBA

Hej

Hvordan refererer jeg fra min VBA kode til de kontrolelementer jeg har på mit Worksheet. Jeg er ikke interesseret i besvarelser angående hvordan man gør via userform, det ved jeg godt. Jeg ønsker f.eks. at manipulere med værdier på chkbokse.

På forhånd tak
24. september 2002 - 11:17 #1
Worksheets("Ark1").CheckBox1.Value
Avatar billede rvm Nybegynder
24. september 2002 - 11:25 #2
Her er en kode der ændrer en checkbox til True - altså med "hak" i

ActiveSheet.OLEObjects("CheckBox1").Object.Value = 1
Avatar billede tma_oksboel Nybegynder
24. september 2002 - 11:32 #3
Att: rvm
Jeg får meddelelsen:
Unable to get the OLEObjects property of the worksheet class

???
24. september 2002 - 11:37 #4
rvm>> jeg kommenter flitigt i dag *SS* jeg synes man skal bruge True og False

' Hvis din checkbox er fra værktøjslinien "Kontrolelementer"
Worksheets("Ark1").CheckBox1.Value = True
' Hvis din checkbox er fra værktøjslinien "Formular"
ActiveSheet.OLEObjects("CheckBox1").Object.Value = True
Avatar billede tma_oksboel Nybegynder
24. september 2002 - 11:38 #5
Skal der sættes noget i Tools -> References?
24. september 2002 - 11:40 #6
Nej.
Avatar billede tma_oksboel Nybegynder
24. september 2002 - 11:45 #7
Det giver samme fejl som ved kommentar: 11:32

Gør det nogen forskel at jeg bruger en engelsk version. (kan jeg ikke forestille mig)
Jeg bruger XP
Avatar billede rvm Nybegynder
24. september 2002 - 11:48 #8
flemming ->> Så længe dine kommentarer er fornuftige er de meget velkomne *S* Jeg vil også normalt brug True eller False - jeg kopierede bare eksemplet fra hjælpen og der stod der "1". Begge vore forslag virker forøvrigt, når checkboksen er fra værktøjslinien "Formular"
Avatar billede tma_oksboel Nybegynder
24. september 2002 - 11:51 #9
Jeg har i desperation forsøgt fra værktøjslinien 'Kontrolelementer'. Her virker det fint med:
  Worksheets("sheet1").chkControl1.Value = True

Jeg er også ganske tilfreds med jeres hjælp, men ville pokkers gerne lige have det til at virke fra værktøjslinien Forms
Avatar billede tma_oksboel Nybegynder
24. september 2002 - 11:52 #10
Gør det nogen forskel at chkboksene er i en gruppeboks?
24. september 2002 - 11:52 #11
Når jeg bruger checkbox'en fra værktøjslinene "Forms" i min engelske XP, så kan bliver navnet på checkbox'en "Check Box 1"
Worksheets("Sheet1").OLEObjects("Check Box 1").Object.Value = True
virker umiddelbart heller ikke for mig!!! hmmm
24. september 2002 - 11:57 #12
.Object har ikke egenskaben Value ! hmmm
Avatar billede rvm Nybegynder
24. september 2002 - 12:08 #13
Hvorfor så ikke bare bruge mit opridelige forslag?

ActiveSheet.OLEObjects("CheckBox1").Object.Value = 1
Avatar billede tma_oksboel Nybegynder
24. september 2002 - 12:11 #14
Det virker jo ikke i engelsk XP. Send evt. en prøve til torben@soelbaekdata.dk
24. september 2002 - 12:14 #15
rvm>> jeg fatter det ikke jeg kan ikke få fat i Value egenskaben ?

Jeg kan godt ændre True / False ved at skriv til den celle, som checkboksen er linket til !
Avatar billede tma_oksboel Nybegynder
24. september 2002 - 12:18 #16
Så kan man jo klare sig ved at påvirke den linkede celle, men det kan jo ikke være den optimale løsning. Man burde kunne ændre værdien i feltet direkte, uden at skulle opsætte en linket celle.

Torben
Avatar billede bak Forsker
24. september 2002 - 12:21 #17
hvis man select'er først så kan man.
ActiveSheet.Shapes("Check Box 1").Select
    Selection.Value = xlOff
Avatar billede tma_oksboel Nybegynder
24. september 2002 - 12:24 #18
Dejligt med en ny indgangsvinkel, men umiddelbart er det ikke så heldigt at hele rammen (hele objektet bliver markeret). Men værdien tilskrives godt nok.

Torben
Avatar billede bak Forsker
24. september 2002 - 12:28 #19
så select'er du bare noget andet bagefter. Det går så hurtigt at du ikke når at se det
ActiveSheet.Shapes("Check Box 1").Select
    Selection.Value = xlOn
    [a1].Select
Avatar billede tma_oksboel Nybegynder
24. september 2002 - 12:29 #20
Jeg prøvede med denne her:

Worksheets("sheet1").OLEObjects(1).Select

Men det ser ud til, at indekset på OLEObjects refererer til det der er sat på via kontrolelementer og ikke via forms.
Ved ikke om det hjælper jer. Det hjælper ikke mig.

Torben
Avatar billede rvm Nybegynder
24. september 2002 - 23:15 #21
Desværre - der er kun bak's løsning tilbage nu. Jeg har prøvet alt muligt, men det ser ikke ud som om de er nogen anden "work arround". Denne kode skifter mellem tilstandene:

ActiveSheet.Shapes("Check Box 3").Select

If Selection.Value = xlOn Then
    Selection.Value = xlOff
    Else
    Selection.Value = xlOn
End If

Forøvrigt brugte jeg denne kode til at finde navnet, da det ellers ikke fremgår nogen steder (hvis man har en dansk version):

Set myDocument = Worksheets(1)
For Each sh In myDocument.Shapes
    MsgBox sh.Name
Next
Avatar billede tma_oksboel Nybegynder
25. september 2002 - 07:39 #22
Jeg er lidt i tvivl om pointfordeling. Alle har deltaget fornuftigt, uden at vi har opnået en krystalklar løsning. BAK kunne også fortjene lidt point, så hvis han lige svarer ind, deler jeg simpelthen i tre.

Tak for indsatsen, Torben
Avatar billede bak Forsker
25. september 2002 - 08:36 #23
bip :-)
Avatar billede bak Forsker
25. september 2002 - 09:02 #24
Torben -> navnet fremgår af navneboksen øverst venstre hjørne, når du har markeret checkboxen
Avatar billede tma_oksboel Nybegynder
25. september 2002 - 09:09 #25
Ja, det ved jeg. Jeg synes dog, at der i hjælpen står noget om, at selvom man har navngivet elementet til f.eks. ChkBonus, skal man referere til objektets oprindelige navn. Jeg har her klippet fra hjælpen: (beklager den lange tekst)
An ActiveX control on a sheet has two names: the name of the shape that contains the control, which you can see in the Name box when you view the sheet, and the code name for the control, which you can see in the cell to the right of (Name) in the Properties window. When you first add a control to a sheet, the shape name and code name match. However, if you change either the shape name or code name, the other is not automatically changed to match.

You use the code name of a control in the names of its event procedures. However, when you return a control from the Shapes or OLEObjects collection for a sheet, you must use the shape name, not the code name, to refer to the control by name. For example, assume that you add a check box to a sheet and that both the default shape name and the default code name are CheckBox1. If you then change the control code name by typing chkFinished next to (Name) in the Properties window, you must use chkFinished in event procedures names, but you still have to use CheckBox1 to return the control from the Shapes or OLEObject collection, as shown in the following example.

Private Sub chkFinished_Click()
    ActiveSheet.OLEObjects("CheckBox1").Object.Value = 1
End Sub

torben
Avatar billede bak Forsker
25. september 2002 - 09:19 #26
Det er rigtigt Torben, men det uddrag gælder kun for activeX-komponenter.
hvis du vælger at bruge checkbox fra FORMS er det ikke activeX-komponenter, men en overlevering fra excel5.
Bemærk at du ikke kan sætte properties for dem.

Checkbox'en fra CONTROL TOOLBOX er activeX-komponenter.
Her kan du sætte properties ved at højreklikke på elementet og vælge Properties.
Avatar billede tma_oksboel Nybegynder
25. september 2002 - 09:22 #27
Ach so...
Jeg glad for at du kunne slå forskellen fast. Jeg var ikke klar over skelningen.

Tak, mvh. Torben
Avatar billede bak Forsker
25. september 2002 - 09:23 #28
Hvis du dobbeltklikker på en checkbox fra CONTROLS (mens du er i designmode) kan du indsætte følgende unden problemer
Private Sub CheckBox1_Click()
CheckBox1.Value = True
End Sub
Avatar billede tma_oksboel Nybegynder
25. september 2002 - 09:30 #29
Alt andet lige tyder det på, at man skal vælge at bruge fra controls istedet for fra forms. Jeg undrede mig umiddelbart over, at der ikke var en gruppeboks man kunne vælge, men har fundet den relevante egenskab på option-felter.

Torben
Avatar billede rvm Nybegynder
25. september 2002 - 11:38 #30
Og her er så en anden forskel:

Når man arbejder i Excel vil jeg klart anbefale at bruge objekter fra værktøjslinien "Kontrolelementer", mens jeg i Word vil anbefale objekter fra værktøjslinien "Formular", da Word har store placeringsmæssige problemer med objekter fra værktøjslinien "Kontrolelementer".
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester