Avatar billede pernillemb Nybegynder
25. maj 2002 - 12:44 Der er 12 kommentarer og
1 løsning

Lidt tricky opgave...

Jeg har fået en lidt tricky opgave, jeg ved ikke lige hvordan jeg skal gribe den an.

Det drejer sig om forskellige data jeg har i hvert sit ark (men i samme dokument) i Excel.  Nu skal jeg have regnet nogle ting ud med disse data, problemet er bare at VBA selv skal finde ud af hvor mange gange det samme problem skal køres.

I hvert ark er der et forskelligt antal punkter med tilhørende x og y værdier.  VBA skal selv tælle disse punkter og bruge det når der regnes.

Derudover skal VBA også selv gå videre til næste ark når alle udregninger er overstået i det første.

Hvordan kommer jeg igang?????

Pernille
Avatar billede tjacob Juniormester
25. maj 2002 - 12:50 #1
Er antallet af ark et fast tal?
Avatar billede pernillemb Nybegynder
25. maj 2002 - 12:54 #2
Ja, det er det egentligt, men det skulle gerne være sådan at VBA selv fandt ud af hvor mange ark der er (hvis det er muligt!) Ellers må jeg jo "nøjes" med det faste antal(30 stk).
Avatar billede jennemaan Nybegynder
25. maj 2002 - 13:02 #3
Hej Pernille,

hermed et skud fra hoften... Har ikke testet, men det er noget i den stil du skal lave...


Sub DoIt()

Dim mWorkSheet As Worksheet

For Each mWorkSheet In Thisworkbook.Worksheets
  DoItWithTheWorkSheet mWorkSheet
Next mWorkSheet

End Sub

Sub DoItWithTheWorkSheet(aWorkSheet As WorkSheet)
Dim iRow As Long

iRow=1
'Antaget at x og y værdier står i kolonne a og b...
While aWorkSheet.Range("A" & iRow)<>""
'nu gør vi noget for hver række i sheet'et med data
  debug.print Range("A" & iRow).Value * Range("B" & iRow).Value
  iRow=iRow+1
Wend


End Sub


/Jennemaan
Avatar billede pernillemb Nybegynder
25. maj 2002 - 13:10 #4
Øh, jeg forstår ikke rigtigt, hvad du gør. Kan du ikke forklare det lidt nærmere, hvad der sker i de enkelte linier??
Avatar billede jennemaan Nybegynder
25. maj 2002 - 13:14 #5
Sub DoIt()

'Dimensioner en objektvariabel af type Worksheet
Dim mWorkSheet As Worksheet

'For hvert forksheet i denne workbook...
For Each mWorkSheet In Thisworkbook.Worksheets
  '... kalder vi rutine til bearbejdning af den pågældende workbook
  DoItWithTheWorkSheet mWorkSheet
Next mWorkSheet

End Sub

'dette er så rutinen der går noget ved det aktuelle worksheet
Sub DoItWithTheWorkSheet(aWorkSheet As WorkSheet)
Dim iRow As Long

'sæt startrække i sheet'et
iRow=1

'Antaget at x og y værdier står i kolonne a og b...
'looper vi sålænge der står en værdi i kolonne a
While aWorkSheet.Range("A" & iRow)<>""
'nu gør vi noget for hver række i sheet'et med data
  debug.print Range("A" & iRow).Value * Range("B" & iRow).Value

'tæller op så vi i næste gennemløb bearbejder næste række
  iRow=iRow+1
Wend

End Sub
Avatar billede pernillemb Nybegynder
25. maj 2002 - 13:21 #6
Skal jeg selv indsætte nogle navne eller hvad?  Hvor skal jeg lægge mine egne beregninger ind?
Avatar billede jennemaan Nybegynder
25. maj 2002 - 13:26 #7
dine beregninger foregår nede i DoItWithTheWorkSheet ;o)

Du behøver ikke sætte nogen navne ind... Rutinen DoIt går simpelthen hver eneste worksheet igennem i workbook'en og sørger for at DoItWithTheWorkSheet bliver kaldet for hvert worksheet.

Jeg ved ikke hvordan dine data ser ud, eller hvad du vil have regnet ud... I ovenstående eksempel går jeg ud fra at x og y værdierne står i kollonne a og b. i min debug.print sætning ganger jeg blot de to værdier sammen for at vise hvordan du refererer værdierne...

/Jennemaan
Avatar billede jennemaan Nybegynder
25. maj 2002 - 13:28 #8
Hvis det kun er bestemte sheets (f.eks. sheets hvor du i celle c3 har skrevet "DoItToMe") du vil have regnet på kan du ændre doit på følgende måde:
Sub DoIt()

'Dimensioner en objektvariabel af type Worksheet
Dim mWorkSheet As Worksheet

'For hvert forksheet i denne workbook...
For Each mWorkSheet In Thisworkbook.Worksheets
  '... kalder vi rutine til bearbejdning af den pågældende workbook

  If mWorkSheet.Range("C3").Value="DoItToMe" Then
    DoItWithTheWorkSheet mWorkSheet
  End If

Next mWorkSheet

End Sub

;o)

/Jennemaan
Avatar billede pernillemb Nybegynder
25. maj 2002 - 14:04 #9
Jeg er ved at afprøve om det virker, har dog et par "simple" spørgsmål:

1) Hvordan får jeg VBA til at tage kvadratroden til et tal?
2) Hvordan får jeg den til at "gemme" alle tal, den udregner til den er færdig, hvorefter den skal bruge disse tal i en ny udregning? Skal jeg få den til at udskrive disse tal i mit regneark og i så fald, hvordan gør man det?
Avatar billede jennemaan Nybegynder
25. maj 2002 - 14:09 #10
1)

kvadratrod2 = sqr(2)
eller
kvadratrod2 = 2^(1/2)

Du kan f.eks. lave en global variabel i det kodemodul du arbejder i... Du behøver ikke gemme mellemresultater i et sheet..

/Jennemaan
Avatar billede pernillemb Nybegynder
25. maj 2002 - 14:35 #11
Jeg synes denne opgave virker temmelig uoverskuelig, da jeg ikke er særlig god til VBA.  Kan jeg få dig til at hjælpe mig lidt mere, hvis jeg sender en mere dybdegående problemstilling? Må jeg kontakte dig på mail eller ICQ? Det er helt ok, hvis du siger fra, da jeg sikkert er lidt "belastende" ang denne opgave.
Avatar billede jennemaan Nybegynder
25. maj 2002 - 14:38 #12
icq 30368838

;o)
Avatar billede bhj031180 Nybegynder
26. maj 2002 - 22:53 #13
prøv at kigge på her:
http://www.sam.sdu.dk/undervis/sysana.F02/optim_excel.pdf

Her er et godt bud på optimering i vba!
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
Kurser inden for grundlæggende programmering

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

IT-JOB

European Stonecraft

Intern Navision/BC Supporter

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Ingeniør til Satellitkommunikation

Djurslands Bank

IT-udvikler