22. juli 2012 - 13:01Der er
4 kommentarer og 1 løsning
melder fejl i vba når jeg skriver i excel
jeg er igang med at kode en masse i vba/excel
tager lige en lille udbid af det jeg har gang i:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("i20:j1193, w20:x1193")) Is Nothing Then
'entry of data into R10 x = "" For y = 20 To 22 If Cells(y, 9) >= 120 Then x = x & " " & Cells(y, 9) End If Next For y = 35 To 37 If Cells(y, 9) >= 120 Then x = x & " " & Cells(y, 9) End If Next For y = 23 To 25 If Cells(y, 23) >= 120 Then x = x & " " & Cells(y, 23) End If Next For y = 32 To 34 If Cells(y, 23) >= 120 Then x = x & " " & Cells(y, 23) End If Next Cells(10, 18) = x
'entry of data into R11 x = "" For y = 23 To 25 If Cells(y, 9) >= 120 Then x = x & " " & Cells(y, 9) End If Next For y = 32 To 34 If Cells(y, 9) >= 120 Then x = x & " " & Cells(y, 9) End If Next For y = 26 To 28 If Cells(y, 23) >= 120 Then x = x & " " & Cells(y, 23) End If Next For y = 35 To 37 If Cells(y, 23) >= 120 Then x = x & " " & Cells(y, 23) End If Next Cells(11, 18) = x
sådan ser det ud men jeg får fejlen:
procedure too large
som i kan se skal jeg taste meget ind da det bare er 2 ud af 192 gange det skal bruges dog med forskelligt tal i systemet..
jeg er nået til de 560 og det springer med 50 hver gang jeg har tastet 8 ind.. eks. R10-R17 / R60-R67 / R110-R117 osv
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
En kompileret procedure/sub i Excel kan mig bekendt ikke overstige 64kb (kode, ikke linjer), og det gør den åbenbart med de 192 stumper du har lavet.
Jeg kan ikke lige se noget direkte mønster i de enkelte blokke; for R10 checkes linje 20-22, 35-37, 23-25 og 32-34 for R11 checkes linje 23-25, 32-34, 26-28 og 35-37 Så rækkefølgen af data der lægges i variablen x er ikke det samme for alle stumper.
Hvis der reelt ikke er system i rækkefølgerne og de celler der checkes, kan du nok kun vinde noget ved at lave en lille ekstra sub, og kalde den med f.eks.
Sub Worksheet_Change_Chk(pr,py1,py2,py3,py4) 'entry of data into R10 x = "" For y = py1 To py1+2 If Cells(y, 9) >= 120 Then x = x & " " & Cells(y, 9) End If Next For y = py2 To py2+2 If Cells(y, 9) >= 120 Then x = x & " " & Cells(y, 9) End If Next For y = py3 To py3+2 If Cells(y, 23) >= 120 Then x = x & " " & Cells(y, 23) End If Next For y = py4 To py4+2 If Cells(y, 23) >= 120 Then x = x & " " & Cells(y, 23) End If Next Cells(pr, 18) = x End Sub
Jeg har ikke lige en Ecxel ved hånden, og det er nogle år siden jeg færdedes i VBA, så du skal selv lige fejlsøge. (-:
Jeg har testet den første del af din kodestump og kan se, at din koden trigger Change.eventen igen når du skriver din tekststreng tilbage i regnearket - konsekvensen af dette er at du kalder den samme procedurer hver gang der skrives tilbage til Excel uden at proceduren er afsluttet - du får altså op til 192 procedurerkald inde i hinanden (nestede procedurer). Det er sikkert dette som VBA giver op over for efter et stykke tid. Måske kan du benytte dig af eventen selectionchange i stedet - den bliver kun trigget når du ændre den aktive celle.
RogerWilco - da jeg ikke har arbejdet med det ret længe fatter jeg ikke ret meget af det du skriver :(
Thorp - bruger 2007
Thorp - det er et program i excel til at styre turnering! der er 22 kampsedler hvor man spiller 2 hold med 4 mand på hver hold Hvor alle spiller mod alle! det vil sige 16 kampe! i de 16 kampe spiller man bedst af 5 sæt " den der først vinder 3 har vundet" i de celler kan man lukke fra 120 og op efter.. det vil sige det kan lade sige gøre 12 gange på en hel kamp.. dog sker det max 3 gange...
alle 22 kampsedler har jeg på 1 ark der er kun plads til 11 med det jeg har tastet ind i vba.. så halvdelen er der plads til :(
så nu har jeg delt det op i 2 ark med 11 kampe hver..
NYT spørgsmål: kan man så køre det på 2 ark og hvordan ??
Det jeg skrev var at din procedure kalder sig selv 192 gange uden at være afsluttet altså som i en uendelig løkke.
Løsningen jeg foreslog var at benytte proceduren:
Worksheet_Selectionchange(ByVal Target As Range)
Forsøg først med denne simple ændring inden du begynder at gøre regnearket mere kompliceret!
Der er også rige muligheder for at optimere din kode som RogerWilco skriver.
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.