Avatar billede allright Nybegynder
12. oktober 2009 - 20:23 Der er 8 kommentarer og
1 løsning

VBA - data fra formular

Hejsa

Jeg har en form med 8 værdier, felterne hedder hhv.
ssektion1
ssektion2
osv.

Jeg kører disse i en løkke, hvor jeg gerne vil have den kører de forskellige felter indtil en given værdi er nået.


Denne linie giver mig problemer:
Do Until ssection > udskydning.ssektion & lsektion

lsektion kører fra 1 til 8, og der var meningen at den på den måde skulle køre alle felterne igennem.

hele kode:
Dim ssection As Integer
Dim ssektionnr As Integer
Dim lsektion As Variant
colnu = 2
ssektionnr = 1
For lsektion = 1 To 8
ssection = 1
Do Until ssection > udskydning.ssektion & lsektion
If ssection & sektionnr < 10 Then
Range("c" & colnu).Value = "'" & ssektionnr & ".0" & ssection
Else
Range("c" & colnu).Value = "'" & ssektionnr & "." & ssection
End If
colnu = colnu + 1
ssection = ssection + 1
Loop
ssektionnr = ssektionnr + 1
Next lsektion
Avatar billede tjacob Juniormester
13. oktober 2009 - 12:03 #1
Du har i hvert tilfælde en åbenlys fejl:

I dit For-loop starter du med at sætte ssection = 1, og du slutter med at tælle den en op: ssection = ssection + 1.
Denne optælling er jo irrelevant, når du i næste iteration igen sætter ssection = 1.
Altså: ssection er ALTID 1 når du starter DO-loopet.
Avatar billede tjacob Juniormester
13. oktober 2009 - 12:06 #2
Ah, undskyld. Det er mig der vrøvler. ssektion tælles op i DO-loopet. Se bort fra min kommentar i #1........
Avatar billede tjacob Juniormester
13. oktober 2009 - 12:25 #3
Dit problem er at du ikke kan sammensætte variabel- og objektnavne af andre variable:

F.eks.
Dim A1,A2
A & "1" = 2
-Dette virker IKKE.

For eksempel når dine loops starter:

"If ssection & sektionnr < 10 Then"

I denne linie sætter du to integers sammen. Første gang er de begge 1. dvs at ssection & sektionnr = 11. Så tæller de ssection op, og næste gang er ssection & sektionnr = 21 osv. Din IF-sætning bliver aldrig True.

Nu kommer du aldrig så vidt for problemet starter i linien før:
Do Until ssection > udskydning.ssektion & lsektion

Jeg går ud fra at udskydning.ssektion er et objekt i din form. Du kan ikke bare lægge en integer (lsektion) til et objekt.

Hvad er udskydning?
Avatar billede allright Nybegynder
13. oktober 2009 - 16:28 #4
Hejsa

Formen har flg. elementer
ssektion1
seektion2
ssetkion3
ssektion4
ssektion5
ssektion6
ssektion7
ssektion8

Det ville gerne have et loop hvor den hentede disse værdier:

Do Until ssection > udskydning.ssektion & lsektion

Ideen er at i formen indtastes et sidetal for hver sektion, hvorefter scriptet laver sideoversigten.

feks. 20 i ssektion 1 og 10 i ssektion 2, skal give:
1.01
1.02
1.03
osv.

Scriptet virker sådant set fint hvis jeg laver hele skidtet 8x uden løkke, men ville for nemhedens skyld gerne have det ind i en lykke.

//JJ
Avatar billede tjacob Juniormester
13. oktober 2009 - 17:22 #5
Det er denne linie jeg ikke forstår:  Do Until ssection > udskydning.ssektion & lsektion

Hvad er udskydning.ssektion?
Er udskydning din form? Og er ssektion(1-8) textboxe?

Hvordan ser denne linie: Do Until ssection > udskydning.ssektion & lsektion

ud i den version (med 8) hvor den virker?
Avatar billede allright Nybegynder
13. oktober 2009 - 17:53 #6
udskydning for formen.

udskydning.ssektion1 er første felt udskydning.ssektion2 er andet felt osv.

Her ruller den: (dog ikke så elegant)
' 1 sektion
Do Until ssection > ssektion1
If ssection & sektionnr < 10 Then
Range("c" & colnu).Value = "'" & ssektionnr & ".0" & ssection
Else
Range("c" & colnu).Value = "'" & ssektionnr & "." & ssection
End If
colnu = colnu + 1
ssection = ssection + 1
Loop
ssektionnr = ssektionnr + 1


' 2 sektion
ssection = 1
Do Until ssection > ssektion2
If ssection & sektionnr < 10 Then
Range("c" & colnu).Value = "'" & ssektionnr & ".0" & ssection
Else
Range("c" & colnu).Value = "'" & ssektionnr & "." & ssection
End If
colnu = colnu + 1
ssection = ssection + 1
Loop
ssektionnr = ssektionnr + 1
Avatar billede tjacob Juniormester
13. oktober 2009 - 18:22 #7
Prøv at erstatte linien: Do Until ssection > udskydning.ssektion & lsektion

med: Do Until ssection > clng(udskydning.Controls("ssektion" & cstr(lsektion)))
Avatar billede allright Nybegynder
13. oktober 2009 - 20:31 #8
Thanks, det ruller nu :-)
Avatar billede tjacob Juniormester
14. oktober 2009 - 10:38 #9
OK, -så tillader jeg mig at lægge et svar.
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
Stort udvalg af Excel kurser til alle niveauer og jobfunktioner

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