Avatar billede rigpig Nybegynder
06. september 2004 - 09:12 Der er 18 kommentarer og
1 løsning

Listbox med ListStyleOption

Project: Ark med 600 rækker, skal kunne vælge vilkårlige rækker, indtaste timer som lægges til markede rækker.

Jeg har lavet en listbox med MultiSelectMulti og ListStyleOption, som peger på arket, det virker helt perfekt, men der er et problem, hvordan får jeg "check box" til at forblive markerede, det er tit de samme rækker der skal markeres.
Jeg har pløjet John Walkenbach's bog om VBA igennem, desværre uden held.
Alternativt vil jeg gerne vide om man kan checke en række med alm. check box for at se hvike der er "tændt"

Har før lavet programmet med alm. check box, men det bliver utroligt sløvt. (900 linier med begynder kode! er skrap kost for Excel)
Håber i kan hjælpe
På forhånd tak.
Avatar billede bak Forsker
06. september 2004 - 11:58 #1
måske har jeg ikke forstået det korrekt, men...
1. commandbutton chekker om dit din række er selected. Dette lægges over i en fælles variabel SelectedItems()

2.commandbutton laver en reload af de værdier i listboxen der var markeret da commandbutton1 blev trykket på.

Dim selecteditems()
Private Sub CommandButton1_Click()
    ReDim selecteditems(ListBox1.ListCount - 1)
    For I = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(I) = True Then
            selecteditems(I) = True
        End If
    Next I
End Sub

Private Sub CommandButton2_Click()
For I = 0 To ListBox1.ListCount - 1
    ListBox1.Selected(I) = selecteditems(I)
Next
End Sub
Avatar billede rigpig Nybegynder
06. september 2004 - 12:23 #2
En ListBox hvor brugeren indtaster et antal timer og selecter de rækker hvor timerne skal addes.
Jeg har en CommandButton som chekker hvilke rækker der er select og adder de timer i de celler som jeg ønsker.
Problemet med CheckBoxene i min ListBox hvor jeg bruger ListStyleOption=true, er at disse CheckBoxe ikke beholder markeringen, men at brugeren skal markere dem igen næste gang.
Jeg vil helst bruge en listbox med MultiSelectMulti=true og ListStyleOption=true da det kan gøres med ca.30 linier kode.
Håber du forstår problemet, ellers bare spørg igen, i kommer med i min aftenbøn i en hel uge, hvis i kan hjælpe.
Jeg checker lige din ide med commandbutton2, måske hvis jeg kalder den "opdater" hmmmm
Avatar billede bak Forsker
06. september 2004 - 12:41 #3
Bliver  userformen lukket ned hver gang ?
i det tilfælde skal variablen selecteditems() dimmes i et alm modul som

public selecteditems()
Avatar billede rigpig Nybegynder
06. september 2004 - 13:06 #4
Ja, Userformen bliver åbnet ca 1 gang om dagen.
Med "public" mener du at programmet kan have indflydelse på andre åbne excel programmer?
Jeg vedlægger lige koden til min commandbutton, måske hjælper det, du får tak for din stædighed, tro mig, det er værdsat.

Private Sub CommandButton1_Click()
Dim x As Long, rng As Range
Set rng = ActiveSheet.UsedRange
Application.Calculation = xlCalculationManual
On Error Resume Next
For x = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(x) Then rng(x + 1, 3) = rng(x + 1, 3) + AddHrs.Text
    If ListBox1.Selected(x) Then rng(x + 1, 2) = rng(x + 1, 2) + AddHrs.Text
Next
    Application.Calculation = xlCalculationAutomatic
End Sub
Avatar billede bak Forsker
06. september 2004 - 13:39 #5
Det har ingen inflydelse på andre åbne ark.
Sålænge dette ark er åbent vil det huske de sidst selectede items.
Dvs at når userformen startes igen vil et tryk på commandbutton2 (reload) selecte de linier der var selected sidste gang man trykkede på på CommandButton1
Koden til commandbutton2 kunne også lægger under Userform1_Activate eller Userform1_Initialize, så vil den automatisk have selected de samme items som sidst

denne her til commandbutton1 click

Private Sub CommandButton1_Click()
Dim x As Long, rng As Range
Set rng = ActiveSheet.UsedRange
ReDim selecteditems(ListBox1.ListCount - 1)
Application.Calculation = xlCalculationManual
On Error Resume Next
For x = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(x) = True Then
    rng(x + 1, 3) = rng(x + 1, 3) + [AddHrs]
    rng(x + 1, 2) = rng(x + 1, 2) + [AddHrs]
    selecteditems(x) = True
End If
Next
    Application.Calculation = xlCalculationAutomatic
End Sub

Denne her til Reload
Private Sub CommandButton2_Click()
For I = 0 To ListBox1.ListCount - 1
    ListBox1.Selected(I) = selecteditems(I)
Next
End Sub

og i et alm. modul

Public selecteditems()
Avatar billede bak Forsker
06. september 2004 - 13:41 #6
[AddHrs] skulle s'føli være AddHrs.Text
Avatar billede rigpig Nybegynder
06. september 2004 - 13:51 #7
Tak Bak, tester koden i aften, vender tilbage, igen tak for indsatsen.
Avatar billede bak Forsker
06. september 2004 - 14:56 #8
Går det helt galt så send mig et eksemplar, så skal jeg se hvad jeg kan gøre :-)
Avatar billede rigpig Nybegynder
06. september 2004 - 17:05 #9
Tror jeg tager mod tilbuddet, får fejl i reload, skal "I" dimmes? og så er der lige det med modul, skal denne kaldes fra programmet?
Avatar billede bak Forsker
06. september 2004 - 17:37 #10
excel snabela tbdl.dk
Avatar billede rigpig Nybegynder
06. september 2004 - 18:05 #11
er sendt, held og lykke
Avatar billede bak Forsker
06. september 2004 - 20:02 #12
sendt tilbage.  Selv held og lykke
Avatar billede rigpig Nybegynder
06. september 2004 - 20:33 #13
Beklager Bak, men den fjerner stadig markeringerne i listboxen når timerne addes, de kommer ikke tilbage når listboxen åbnes igen, gør jeg noget forkert? hvis det er bedre med en commandbutton er det helt ok.
Jeg har office 2000 pro
Avatar billede bak Forsker
06. september 2004 - 21:07 #14
Det stiller jeg mig lidt uforstående overfor.
Jeg har testet i både xl2000 og excel XP. Den virker fint i begge versioner.
Er du sikker på at det er den rigtige du har åbnet :-)
Avatar billede rigpig Nybegynder
06. september 2004 - 23:35 #15
Har lige kigget på den sidste version du sendte, hænger stadig i lysekronen, det begynder virkelig at ligne noget!!
Oh du store altvidende limsten, jeg bøjer mig ydmygt i støvet for dine fødder.
Du skriver du ikke er helt færdig, hvad kan du ellers finde på.
Avatar billede bak Forsker
06. september 2004 - 23:41 #16
Jeg ville jo gerne have dem samlet, men jeg har ikke mulighed for at sortere i arket, da det er låst.
En anden mulighed er også at vise dem seperat i en anden listbox, men lad os nu se.
Jeg skal nu nok i seng nu :-)
Avatar billede rigpig Nybegynder
07. september 2004 - 08:41 #17
Ikke nødvendigt, da items bliver lagt ind i grupper, de items der vælges er ikke fra samme gruppe, det er kun overskriften jeg har låst, da der ellers går ged i den i listboxen, hvis de pillefingre ændrer på kolonne bredden, der kan indtastes som man vil i selve arket.
Avatar billede rigpig Nybegynder
07. september 2004 - 10:39 #18
Smid et svar når du har fået nok, tak for hjælpen !
Avatar billede bak Forsker
07. september 2004 - 13:14 #19
Ok, her er et svar.
Jeg har forbedret funktionerne en smule, så jeg sender et nyt, når jeg kommer hjem :-)
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