Avatar billede peterref Nybegynder
13. maj 2005 - 21:04 Der er 2 kommentarer og
1 løsning

Forklaring på nogle liniers VBA kode debug.print, indlæsning etc.

Jeg har her en indsættelsessortering sorteringsdelen(den jeg rykker ind) har jeg styr på. Men kan jeg få nogle kommentarer til hver linie om hvad de betyder sådan helt grunlæggende bare kort. Såsom: Dim i, j As Long/ sætter XX antal byte af til heltal. Eller noget i den stil.

TAKKER

Option Compare Database
Option Explicit
Global filnr As Integer

Public Sub assembsort()

Dim i, j As Long
Dim elem As Long
Dim min As Long
Dim tid1 As Double
Dim tid2 As Double
Dim iMin As Long
Const N = 800
Dim tal(N)
For i = LBound(tal) To UBound(tal)
tal(i) = Rnd * N * 9
Next i
filnr = FreeFile
Open "p:\assemb.txt" For Output As filnr
Print #filnr, "tal der kommer ind"
Print #filnr, "--------------------------------------------------------------------------"
Print #filnr, "";
For i = LBound(tal) To UBound(tal)
Print #filnr, Right(Format(i, "  ###0"), 5);
Next i
Print #filnr,
Print #filnr, " -----------------------------------------------------------------------"
Call udfil(tal)
        i = 0
        Do 'løk1
        tid1 = Timer
        'Debug.Print "start:", tid1; "sekunder"
        min = tal(i)
        iMin = i

        j = i + 1
        Do 'løk2
        'løk 3
        If tal(j) < min Then
        min = tal(j)
        iMin = j
        End If '--luk 3
        j = j + 1

        Loop Until j > N '--luk2

        tal(iMin) = tal(i)
        tal(i) = min

        i = i + 1
        Loop Until i >= N
        '-- luk 1
Print #filnr, "sorteringsresultat"
Print #filnr, "--------------------------------------------------------------------------"
Print #filnr, "";
For i = LBound(tal) To UBound(tal)
Print #filnr, Right(Format(i, "  ###0"), 5);
Next i
Print #filnr,
Print #filnr, " -----------------------------------------------------------------------"
Call udfil(tal)
For i = 0 To N
Debug.Print tal(i)
Next i
Close #filnr
tid2 = Timer
Debug.Print "slut:", tid2; "sekunder", tid2 - tid1; "sekunder"
End Sub

Public Sub udfil(ByRef data())

Dim i As Integer
Dim elem As Variant

i = 0
For Each elem In data
Print #filnr, Right("    " & Format(elem, "####0"), 5);

Next elem
Print #filnr,

End Sub
Avatar billede hiks Nybegynder
15. maj 2005 - 12:26 #1
hej

dim betyder at du definerer variablen. Og i dit tilfælde er det så lokale variable du definierer, da de befinder sig inde i en Sub.

dim x as long definerer således at variblen x er af datatypen long, som er et heltal mellem -2.147.483.648 til 2.147.483.647

læs om de forskellige datatyper her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vagrpdatatype.asp

Const er en konstant og defineres også i din kodning. Det vil sige at du ikke kan ændre den i runtime, den vil altid have den værdi du skriver i din kodning.

debug.print er en "hjælpefunktion" til dig der eksempelvis gerne vil se variabel værdier når du tester dit program i VB6. Debug.print vil du ikke kunne bruge når du har kompileret. Debug vinduet får du frem ved at trykke CTRL+G.

Call udfil kalder din sub/modul "udfil" som så udfører en funktion for dig.

Jeg søgte bare lige hurtigt på google på nogle noter o.lign. til dig - jeg kunne forestille mig at det var noget i den her stil du er på udkig efter:

http://130.225.138.19/~hesc/

spørg lige hvis der er noget andet som du gerne vil have forklaring til også - jeg tog bare lige det du havde skrevet i starten.

go søndag/pinse.

/hiks
Avatar billede peterref Nybegynder
15. maj 2005 - 12:36 #2
hiks takker! hvis du gider ville en forklaring på dette stykke bare sådan hurtig hvad den gør vlre fedt, tak!

filnr = FreeFile
Open "p:\assemb.txt" For Output As filnr
Print #filnr, "tal der kommer ind"
Print #filnr, "--------------------------------------------------------------------------"
Print #filnr, "";
For i = LBound(tal) To UBound(tal)
Print #filnr, Right(Format(i, "  ###0"), 5);
Next i
Print #filnr,
Print #filnr, " -----------------------------------------------------------------------"
Avatar billede hiks Nybegynder
15. maj 2005 - 12:46 #3
jeps det kan vi da lige klare.

Open "p:\assemb.txt" For Output As filnr gør så du kan putte data i filen: p:\assemb.txt. Dette indikeret ved "For Output".

Print kommandoen skriver en linie i din fil - som du genkender ved #filnr her i dit tilfælde.

For i = Lbound(tal) to Ubound(tal) er starten på en løkke, der så vil udskrive det array der hedder "tal" fra lbound (lower bound, laveste grænse) og til ubound (upper bound, øverste grænse) på arrayet.

Linien der så bliver printet i løkken er: Right(Format(i, "  ###0"), 5);

Og det er de 5 sidste cifre af i, hvilket ikke giver så meget mening, da hvis det skulle være værdien af tal-arrayet skulle have stået: Right(Format(tal(i), "  ###0"), 5);

De tal bliver så skrevet ud med et format(tallet, ###0) som vist nok angiver at det er tusindstal-separatorer, men kan ikke lige huske det helt. Det er i hvert fald en formattering.

/hiks
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