25. maj 2002 - 12:44Der 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.
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.
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).
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
'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
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...
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
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?
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.
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.