Toon posts:

zoek kleuren en pas toe met VBSCRIPT in EXCEL2003

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste mensen,

Ik probeer voor een simpel planningstooltje in Excel2003 het volgende te doen. De functie is enigzins gelijk aan de 'voorwaardelijke opmaak' fuinctionaliteit, maar dan eentje die meer dan 3 voorwaarden aankan, in principe 'n' voorwaarden:
  1. in meerdere cellen in het planningstabblad worden waarden ingetypt (bijv. dirk, martijn, klaas)
  2. op een speciaal tabblad worden eenmalig namen ingetypt (bijv. dirk, martijn, klaas) en die cellen voorzien van een bepaalde achtergrondkleur.
  3. dan wordt een VB script geactiveerd om de planning 'in te kleuren' en totalen te tellen
  4. het script loopt door alle (eenmalig ingevoerde) waarden op het speciale tabblad en slaat de waarde van de cel en de corresponderende achtergrondkleur in een array op.
  5. dan loopt het script door de waardes in de array en zoekt corresponderende celwaarden in het planningstabblad. Bij elke 'gevonden' waarde wordt de corresponderende achtergrondkleur toegepast op de betreffende cel.
  6. Tevens wordt bij elke 'gevonden' waarde een teller opgehoogd, zodat het totaal van voorkomende waarden kan worden weergegeven.
  7. idealiter moeten deze totalen onderaan elke kolom van het planningstabblad separaat worden geteld en weergegeven.
Zover de bedoeling. Het script dat ik tot nu toe heb geschreven doet een deel, maar geeft een fout. Bij het uitvoeren wordt de eerste waarde (dirk) gevonden en ook de kleurcode die daarbij hoort. Maar bij de volgende 'gevonden' waarde (martijn) krijg ik een fout 9 ('het subscript valt buiten het bereik), op het moment dat ik de kleur uit wil lezen... Het ligt niet aan de kleur van de cel met waarde 'Martijn', want als deze als eerste wordt gelist, gaat alles gewoon goed.

Zou heel erg geholpen zijn met iemand die - in tegenstelling tot ondergetekende - echt weet hoe je zoiets in VBscript moet aanpakken. Hieronder de code. Op verzoek stuur ik je heel graag de EXCEL file....

Alvast bedankt!
Stefan


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Public workerNames, workerCols As Variant

Sub FindAndSetColors(numItems)

    Dim worker As Integer
    For worker = 0 To numItems
    
        With Worksheets(1).Range("a1:x100")
        
            sVal = workerNames(worker)
            MsgBox "zoek naar: " & sVal
                
            Set c = .Find(sVal, LookIn:=xlValues)
            If Not c Is Nothing Then
            
                'MsgBox "gevonden: " & sVal & " in cell: " & c.Address
                firstAddress = c.Address
                Do
                    'MsgBox c.Address
                    Interior.ColorIndex = workerCols(worker)
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With
    Next worker
End Sub

Sub GetNameColors(numItems)

    Dim worker As Integer
    With Worksheets(2).Range("naamkleuren")
    
        For worker = 0 To numItems

            sVal = workerNames(worker)
            MsgBox "zoek naar: " & sVal
            
            Set c = .Find(sVal, LookIn:=xlValues)
            If Not c Is Nothing Then
            
                workerCols(worker) = c.Interior.ColorIndex
                MsgBox "gevonden kleurcode voor: " & sVal & " is: " & workerCols(worker)
            Else
                MsgBox sVal & " is niet gevonden"
            End If
            Set c = Nothing
        Next worker
    End With
End Sub

Sub updateColors()

    workerNames = Array("dirk", "martijn", "stefan", "dorothee", "martin", "mark", "hendrik", "pieter")
    numItems = 3 'UBound(workerNames)
    workerCols = Array(numItems)
    
    GetNameColors numItems
    FindAndSetColors numItems

End Sub

[ Voor 0% gewijzigd door een moderator op 24-05-2007 00:42 . Reden: codetags ]


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

offtopic:
Ik heb van je 'quote' tags maar even 'code' tags gemaakt
:)

Als je gaat debuggen is het goed om te vermelden op welke regel het precies fout gaat. Door over variabelen te hooveren of toe te voegen aan de quickcontrol kun je ze nader onderzoeken. DAn zie je waarschijnlijk ook dat workercols een array is met maar één element,nl 3. Dat is ook precies wat je doet met:

Visual Basic:
1
2
3
4
5
workercols=Array(numItems)

ipv

redim workercols(numitems)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland