Avatar billede svaage Nybegynder
08. maj 2004 - 13:01 Der er 25 kommentarer og
2 løsninger

Procedure too large

Hej med jer

Jeg har fået et problem jeg håber I kan hjælpe mig med. Nedenstående er et udsnit af kode, der skal få et afkrydsningfelt til forsvinde vis en bestemt celle er 0, det virker fint, men jeg er igang med at lave ca. 1200 kontroller som denne og for nu at vide at " procedure too large " oeg at  størrelsen i følge hjælpefilen max må være 64 k, hvordan kan jeg løse dette problem ????????


Private Sub Worksheet_Activate()
If Range("e4") = 0 Then
    ActiveSheet.Shapes("Afkrydsningsfelt 2").Visible = False
    Else
    ActiveSheet.Shapes("Afkrydsningsfelt 2").Visible = True
End If
End Sub

Hilsen Sv@@ge
Avatar billede kabbak Professor
08. maj 2004 - 13:34 #1
Hvis Afkrydsningsfelterne er fortløbende og cellens rællenummer er fortløbende, så.



Private Sub Worksheet_Activate()
Dim A As Variant
A = "Afkrydsningsfelt "
For i = 1 To 5
If Range("e" & i + 3) = 0 Then
    ActiveSheet.Shapes(A & i + 1).Visible = False
    Else
    ActiveSheet.Shapes(A & i + 1).Visible = True
   
End If
Next
End Sub
Avatar billede kabbak Professor
08. maj 2004 - 13:35 #2
ret.
For i = 1 To 5
til det antal Afkrydsningsfelter du har.
Avatar billede svaage Nybegynder
08. maj 2004 - 14:02 #3
hej kabbak
Der er lidt problemer i det: afkrydsningsfelterne står i 34 søjler med 38 rækker i hver, afkrydsningsfelterne har fortløbende numre i hver søjle.
Kan det lade sig gøre ?
hilsen Sv@@ge
Avatar billede sjap Praktikant
08. maj 2004 - 15:49 #4
svaage
Hvordan er afkrydsningsfelterne navngivet? Jeg kan se du har et, der hedder "Afkrydsningsfelt 2" som relaterer sig til E4. Hvad hedder det i den næste søjle?
Avatar billede svaage Nybegynder
08. maj 2004 - 16:08 #5
de næste rækker er angivet, hvis vi tager række 2 som eksempel,med at afkrydsningsfeltet i celle b4 er navngivet afkrydsningsfelt 204 og b3 som afkrydsningsfelt 205 og sådan frem til celle 42 som er navngivet 242. næste række er navngivet med 304 - 342, næste igen 404-442
Avatar billede sjap Praktikant
08. maj 2004 - 16:21 #6
svaage
Prøv lige nedenstående

Private Sub Worksheet_Activate()
Dim A As Variant
A = "Afkrydsningsfelt "
For j = 2 To 34
    For i = 4 To 42
        If Range(Cells(j, i - 1)) = 0 Then
            ActiveSheet.Shapes(A & j * 100 + i).Visible = False
        Else
            ActiveSheet.Shapes(A & j * 100 + i).Visible = True
        End If
    Next i
Next j
End Sub
Avatar billede svaage Nybegynder
08. maj 2004 - 16:39 #7
Er "j" i din kode det samme som søjler og derved er "2" = søjle B ?
Avatar billede sjap Praktikant
08. maj 2004 - 16:40 #8
jeps
Avatar billede svaage Nybegynder
08. maj 2004 - 16:45 #9
så kom der lige endnu et problem da de 34 søjler ikke ligger lige efter hinanden men ligger som søjle 2,7,12,17 dvs med 4 skjulte søjler ind i mellem, der bliver brugt til beregninger kan man gøre noget ved det
Avatar billede sjap Praktikant
08. maj 2004 - 16:45 #10
Hmm. Ja hvem sagde også at det skulle være nemt. Øjeblik.
Avatar billede sjap Praktikant
08. maj 2004 - 16:47 #11
Private Sub Worksheet_Activate()
Dim A As Variant
A = "Afkrydsningsfelt "
For j = 2 To 34
    For i = 4 To 42
        If Range(Cells((j-2)*5+2, i - 1)) = 0 Then
            ActiveSheet.Shapes(A & j * 100 + i).Visible = False
        Else
            ActiveSheet.Shapes(A & j * 100 + i).Visible = True
        End If
    Next i
Next j
End Sub
Avatar billede sjap Praktikant
08. maj 2004 - 16:52 #12
svaage
Vær lige opmærksom på at ovenstående slutter i kolonne FF (som er kolonne 162). Af en eller anden grund har jeg sat j løkken til at gå fra 2 til 34 - hvilket altså kun er 33 kolonner (og du skrev vist 34). Det må du vist lige kontrollere!
Avatar billede svaage Nybegynder
08. maj 2004 - 17:18 #13
den har nogle problemer med Range-metoden, det virker ikke som det skal hvad kan der være i vejen ?
Avatar billede sjap Praktikant
08. maj 2004 - 17:33 #14
Det var fordi jeg lige manglede at fjerne range fra den gamle kode. Prøv med

Private Sub Worksheet_Activate()
Dim A As Variant
A = "Afkrydsningsfelt "
For j = 2 To 34
    For i = 4 To 42
        If Cells((j - 2) * 5 + 2, i - 1) = 0 Then
            ActiveSheet.Shapes(A & j * 100 + i).Visible = False
        Else
            ActiveSheet.Shapes(A & j * 100 + i).Visible = True
        End If
    Next i
Next j
End Sub
Avatar billede svaage Nybegynder
08. maj 2004 - 17:38 #15
programmet debugger en fejl i linien " ActiveSheet.Shapes(A & j * i).Visible = False og meddeler at " Emnet med det angivne navn blev ikke fundet "
Avatar billede sjap Praktikant
08. maj 2004 - 17:44 #16
Mens du debugger, så vis vinduet brugerudtryk og skriv

? A & j * 100 + i

Fortæl mig så lige hvad den skriver.
Avatar billede svaage Nybegynder
08. maj 2004 - 17:48 #17
den skriver "afkrydsningsfelt 204"
Avatar billede sjap Praktikant
08. maj 2004 - 17:54 #18
Tjah, det er jo præcist det, som du tidligere skrev, at afkrydsningsfeltet hed. Så er spørgsmålet, hvem der har stavet forkert. Er du nu helt sikker på at navnet er som beskrevet? Er der mellemrum i navnet? Er mellemrummet måske en _ eller hvad ved jeg. Der er mange muligheder.
Avatar billede svaage Nybegynder
08. maj 2004 - 18:05 #19
hvis du har mulighed kan du så sende mig det ark du sidder og arbejder i, så kan jeg måske blive lidt klogere på hvad det er du gør og se om jeg kan få det til at passe til mit. Du kan sende det på: sv.kir@ci.kk.dk
Avatar billede sjap Praktikant
08. maj 2004 - 18:13 #20
Det kan jeg godt, men det får du ikke noget ud af. Jeg har ikke lavet et regneark hvor jeg direkte kan afprøve denne her kode - jeg har ikke orket, at smide de mange afkrydsningsfelter ind på et regneark.

Er du sikker på, at fanebladet med de mange afkrydsningsfelter er det aktive ark, når programkoden afvikles?
Avatar billede svaage Nybegynder
08. maj 2004 - 22:47 #21
Jeg har nu prøvet at lave et mindre regneark for at checke hvordan din kode virker, den virker fint med at fjerne de fire afkrydsningsbokse jeg har lavet men når jeg laver værdien om til et 1-tal, er det kun den første der kommer frem igen, ved du hvorfor ?
Avatar billede sjap Praktikant
08. maj 2004 - 22:55 #22
Det er vel kun den afkrydsningsbox som du har sat et 1-tal ved, der skal komme frem igen. (det lyder måske indlysende, men det var en fejl jeg selv lavede på et tidspunkt).
Avatar billede sjap Praktikant
08. maj 2004 - 23:26 #23
Jeg tror, jeg er kommet til at vende Cells argumentet forkert. Prøv at se på nedenstående:

Private Sub Worksheet_Activate()
Dim A As Variant
A = "Afkrydsningsfelt "
For j = 2 To 34
    For i = 4 To 42
        If Cells(i - 1,(j - 2) * 5 + 2) = 0 Then
            ActiveSheet.Shapes(A & j * 100 + i).Visible = False
        Else
            ActiveSheet.Shapes(A & j * 100 + i).Visible = True
        End If
    Next i
Next j
End Sub
Avatar billede svaage Nybegynder
09. maj 2004 - 00:19 #24
Nu har jeg fået det til at virke på den lille udgave og det er jo dejligt, i morgen vil jeg se om jeg kan få det til at virke, der hvor det skal virke. Men for nu vil jeg sige tak for hjælpen for i går og du hører fra mig i morgen om jeg kan få det til at virke

Hilsen Sv@@ge
Avatar billede sjap Praktikant
09. maj 2004 - 01:09 #25
God fornøjelse. :0)
Avatar billede svaage Nybegynder
14. maj 2004 - 21:36 #26
Så er der point til superjap, jeg har fået det til at virke så hermed point til dig og endnu en gang mange tak for hjælpen

Hilsen Sv@@ge
Avatar billede sjap Praktikant
16. maj 2004 - 18:57 #27
Jamen det var da godt det lykkedes til sidst - og tak for pointene :0)
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