Avatar billede yev Nybegynder
17. marts 2008 - 10:17 Der er 1 kommentar og
1 løsning

Rekursivt kald af change event af listbox i Excel

Hej eksperter!

Jeg har en (ActiveX) ListBox i et Excel regneark. I listen kan vælges en række komponenter og i toppen findes "Alle" - der vælger alle komponenterne i listen.

Når "Alle" vælges køres change eventen og sætter alle til valgt.
Problemet med "Alle" er, at når denne vælges, så bliver change-eventen kørt hver gang en enkelt komponent ændres, og således kaldes koden rekursivt i det uendelige.

Jeg har forsøgt mig med forskellige ting, herunder at sætte Application.EnableEvents = False (og så sætte den til true igen efter mit kald), men dette ændrer ikke noget.

Min ListBox ligger i ark nummer 9, så jeg har også forsøgt:
Sheet9.ListBox1.Application.EnableEvents = False, men heller ikke dette virker.

Jeg håber at høre fra jer...
Avatar billede supertekst Ekspert
17. marts 2008 - 10:19 #1
Du er velkommen til at sende filen til: pb@supertekst-it.dk - så skal jeg gøre et forsøg...
Avatar billede supertekst Ekspert
17. marts 2008 - 15:34 #2
Dim checked As Boolean
Dim RunEvents As Boolean
Dim flag As Boolean
Sub ListBox1_Initialize()
Dim i As Integer

Sheet9.ListBox1.MultiSelect = fmMultiSelectMulti

Rem Slet evt. indhold
For i = 0 To Sheet9.ListBox1.ListCount - 1
  Sheet9.ListBox1.RemoveItem 0
Next i

Sheet9.ListBox1.AddItem "Alle"
Sheet9.ListBox1.AddItem "Bornholm"
Sheet9.ListBox1.AddItem "Isefjorden og Roskilde Fjord"
Sheet9.ListBox1.AddItem "Kattegat Nord"
Sheet9.ListBox1.AddItem "Kattegat Syd"
Sheet9.ListBox1.AddItem "Lillebælt"
Sheet9.ListBox1.AddItem "Limfjorden"
Sheet9.ListBox1.AddItem "Nissum Fjord og Ringkøbing Fjord"
Sheet9.ListBox1.AddItem "Nordsøen Nord"
Sheet9.ListBox1.AddItem "Nordsøen Syd"
Sheet9.ListBox1.AddItem "Nordsøen Vest"
Sheet9.ListBox1.AddItem "Skagerrak"
Sheet9.ListBox1.AddItem "Smålandsfarvandet"
Sheet9.ListBox1.AddItem "Storebælt Nord"
Sheet9.ListBox1.AddItem "Storebælt Syd"
Sheet9.ListBox1.AddItem "Ukendt"
Sheet9.ListBox1.AddItem "Vestlige Østersø"
Sheet9.ListBox1.AddItem "Øresund Nord"
Sheet9.ListBox1.AddItem "Øresund Syd"
Sheet9.ListBox1.AddItem "Århus Bugt"

Sheet9.ListBox1.Font.Size = 13.2

Rem Sæt kolonnen "Beregn" til Falsk
    For i = 0 To Sheet9.ListBox1.ListCount - 1
      Sheet12.Range("Farvand_id_offset").Offset(i, 3).Value = False
    Next i
   
    flag = False
    RunEvents = True
End Sub
Private Sub ListBox1_Change()
    If flag = False Then
        flag = True
        actions
    End If
End Sub
Private Sub actions()                              'ListBox1_Change()
Dim i

Rem Hvis Alle er valgt - sæt alle beregn til SAND
    If Sheet9.ListBox1.Selected(0) = True Then
        Sheet9.ListBox1.Selected(0) = False
       
        For i = 1 To Sheet9.ListBox1.ListCount - 1
            Sheet12.Range("Farvand_id_offset").Offset(i, 3).Value = True
            Sheet9.ListBox1.Selected(i) = True
        Next i
    Else
        For i = 0 To Sheet9.ListBox1.ListCount - 1
            If Sheet9.ListBox1.Selected(i) = True Then
                Sheet12.Range("Farvand_id_offset").Offset(i, 3).Value = True
            Else
                Sheet12.Range("Farvand_id_offset").Offset(i, 3).Value = False
            End If
        Next i
    End If
    flag = False
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim i

Rem v/Dobbeltklik slettes alle selections & beregn -> Falsk
    flag = True
    For i = 0 To Sheet9.ListBox1.ListCount - 1
        Sheet9.ListBox1.Selected(i) = False
        Sheet12.Range("Farvand_id_offset").Offset(i, 3).Value = False
    Next i
    flag = False
End Sub
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
Kurser inden for grundlæggende programmering

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