[VBA/Excel] Probleem macro *

Pagina: 1
Acties:
  • 128 views sinds 30-01-2008
  • Reageer

  • Tano
  • Registratie: December 2001
  • Laatst online: 30-04 12:23
Ik weet niet of dit het goede forum is, maar het valt onder programmeren :)

Het probleem gaat over het volgende bestand:
http://homepage.uvt.nl/~s110985/school.xls

Wanneer je hier de macro "Main" runt (ctrl-a) is het de bedoeling dat de koersen van de "beursvloer" naar "historie koersen" worden gekopieerd. De ene keer gaat dit goed, de andere keer gaat dit niet goed.

Ik heb geen flauw idee hoe dit kan. Wanneer ik Debug doe, dan loopt alles goed (mits je de macro "Delay" uitschakelt, met Delay werkt de debug-functie niet).
Please help me :)

[ Voor 15% gewijzigd door Tano op 07-10-2004 16:20 . Reden: link aangepast ]


  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Tano schreef op 07 oktober 2004 @ 16:19:
Ik weet niet of dit het goede forum is, maar het valt onder programmeren :)

Het probleem gaat over het volgende bestand:
http://homepage.uvt.nl/~s110985/school.xls

Wanneer je hier de macro "Main" runt (ctrl-a) is het de bedoeling dat de koersen van de "beursvloer" naar "historie koersen" worden gekopieerd. De ene keer gaat dit goed, de andere keer gaat dit niet goed.

Ik heb geen flauw idee hoe dit kan. Wanneer ik Debug doe, dan loopt alles goed (mits je de macro "Delay" uitschakelt, met Delay werkt de debug-functie niet).
Please help me :)
Kan je iets meer info geven? Wat doet het niet goed? Heb je al geprobeerd om bepaalde delen code te proberen uit te schakelen om te kijken in welk deel van de code het probleem zit? etc. Oftewel iets meer info over het exacte probleem en de dingen die je zelf al hebt geprobeerd. Dit is mij iig niet duidelijk genoeg. Kijk ook gelijk even in de FAQ voor aanwijzingen mbt een tpoic start.

I'm not a complete idiot - several parts are missing.


Verwijderd

dit is een wel zeer eigenaardig probleem. in ronde 11/12 laat excel een gecopieerde selectie zien met de boodschap in de statusbalk kies een bestemming en geeft er dan de brui aan. ik vrees dat dit soort van code ondebugbaar is. het is in ieder geval veel te ingewikkeld om met select en activecell ed correct te kunnen werken. a complete rewrite is in order, i'm afraid. sorry voor m'n onheilspellende bijdrage (daar ga ik het in deze draad bij laten overigens), maar het is niet anders.

  • Tano
  • Registratie: December 2001
  • Laatst online: 30-04 12:23
Verwijderd schreef op 07 oktober 2004 @ 17:16:
dit is een wel zeer eigenaardig probleem. in ronde 11/12 laat excel een gecopieerde selectie zien met de boodschap in de statusbalk kies een bestemming en geeft er dan de brui aan. ik vrees dat dit soort van code ondebugbaar is. het is in ieder geval veel te ingewikkeld om met select en activecell ed correct te kunnen werken. a complete rewrite is in order, i'm afraid. sorry voor m'n onheilspellende bijdrage (daar ga ik het in deze draad bij laten overigens), maar het is niet anders.
THX voor je bijdrage iig!
Ik zal voor de anderen even een verhaaltje schrijven wat precies het probleem is, en wat ik al heb geprobeerd!
Ik ben overigens ook maar een economiestudent die een bijvak ICT heeft..waarvoor macro's geschreven moeten worden (oftwel.. heel veel verstand heb ik er niet van). Kan je verhaal wel volgen hoor, daar niet van ;)

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Herschrijven is idd geen gek idee. Je maakt onnodig gebruik van allerlei werkbladfuncties en herhaalt bijna identieke stukken code terwijl je met de activecell goochelt. Dat excel zich op een gegeven moment hierin verslikt is niet zo verwonderlijk. Het kan veel mooier en simpeler, bijvoorbeeld het stukje waarin de actuele koersen worden aangepast:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub PasKoersenAan()
       'de koersschommelingen beperkten tot bv -20 en +20%
       Const Benedengrens=80
       Const bovengrens=120
       Dim ActueleKoersen as range
       Dim deKoers as range
       
       set ActueleKoersen=sheets("beursvloer").range("E7:E16")

       For each deKoers in ActueleKoersen
                 'oude koers opslaan
                 dekoers.offset(0,-1).value=dekoers.value
                 'nieuwe koers berekenen
                 dekoers.value=dekoers.value * _
                  (benedengrens + Rnd() * (bovengrens - benedengrens)) / 100
       Next deKoers

       'klaar       
End sub


@_heretic_: da's niet zo vreemd: Na ronde 11 is de macro afgelopen en de copyselectie wordt nergens opgeheven (For i=0 to 10) :)

[ Voor 9% gewijzigd door Lustucru op 08-10-2004 14:13 ]

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


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 20:53
Heb de code even bekeken. Ben bang dat _heretic_ een punt heeft.
Als aanmoediging heb ik het eerste stukje van sub Main even herschreven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Main()
Set vloer = ActiveWorkbook.Worksheets("Beursvloer")
Set historie = ActiveWorkbook.Worksheets("Historie koersen")

'Vragen om startbedrag en rondetijd

Dim seconden As Double
vloer.Cells(23, 2) = 0
vloer.Cells(19, 3) = InputBox("Welke saldo wilt u mee starten?"& _
" (1000 wordt aangeraden")
vloer.Cells(21, 2) = vloer.Cells(19, 3)
seconden = InputBox("Hoe lang wilt u dat een ronde duurt (in seconden)?" & _
" (voor beginners wordt 60 seconden aangeraden, min is 20 sec.)")

'Sheet klaarmaken voor gebruik

For Each cel In vloer.Range(Cells(7, 2), Cells(16, 2))
    cel.Value = 0
Next cel
historie.Range("B4:L13").ClearContents
Sheets("Beursvloer").Select

Probeer te kijken naar wat Niesje en ik doen, veel werken met variabelen, namen, harde bereiken (i.p.v. relatieve verwijzingen met een cursor als Activecell.)
Hiermee kan je code erg goed in loops laten lopen (scheelt veel typen) en het is allemaal wat professioneler.
Probeer eigenlijk helemaal geen gebruik te maken van Activesheet, Select, activecell etc.
Soms is't nuttig maar voor zover ik het snel zag is het bij jou code volstrekt overbodig (en daarmee teveel :) )

[ Voor 16% gewijzigd door onkl op 08-10-2004 14:59 . Reden: lay-out ontverpest ]


  • Tano
  • Registratie: December 2001
  • Laatst online: 30-04 12:23
Bedankt voor de tips!! Ik ga ermee aan de slag!
Pagina: 1