24. september 2002 - 11:13Der 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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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
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"
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
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.
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.
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
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.
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
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.
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
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.
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
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.
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".
Synes godt om
Ny brugerNybegynder
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.