Avatar billede marcussen Nybegynder
22. juli 2012 - 13:01 Der 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

er der begrænset plads i vba??

er desværre stadig lidt grøn i vba :)

MVH Marcussen
Avatar billede RogerWilco Seniormester
22. juli 2012 - 19:54 #1
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.

Worksheet_Change_Chk(10,20,35,23,32)  ' Check R10
Worksheet_Change_Chk(11,23,32,26,35)  ' Check R11

...og med ekstra sub som noget i retning af:

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.  (-:
Avatar billede Thorp Praktikant
24. juli 2012 - 15:16 #2
Hej,

kan du oplyse hvilken version af Excel du benytter?
Avatar billede Thorp Praktikant
24. juli 2012 - 17:24 #3
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.
Avatar billede marcussen Nybegynder
26. juli 2012 - 16:29 #4
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 ??

MVH Marcussen
Avatar billede Thorp Praktikant
27. juli 2012 - 09:06 #5
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.
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