Avatar billede maagefinke Nybegynder
30. december 2001 - 21:41 Der er 13 kommentarer og
1 løsning

Dim as single - definere val under ét

Jeg skal sætte værdien af reg1 = val(text1.text)+val(text2.text)-val(text3.text)osv .Jeg kan tilsyneladende ikke finde ud af at lave en parantes med val(text1.text +text2.text).Er det virkelig nødvendigt at skrive val foran hver textbox?
Avatar billede razersedge Nybegynder
30. december 2001 - 22:06 #1
prøv med...

reg1 = text1 + text2 - text3

er lidt træt, tænker ikke helt klart :/

Avatar billede ea_data Nybegynder
30. december 2001 - 23:11 #2
Jeg tror ikke der er nogen anden mulighed, medmindre du opretter dine tekstfelter som arrays.
Avatar billede johs_j Novice
30. december 2001 - 23:39 #3
Jep, det er nødvendig at tage værdien ud af textboxene hver for sig.
Det razersedge skriver kan også bruges hvis du KUN skriver heltal. Hvis du skriver decimaltal skal du anvende . i stedet for ,
Det behøver du ikke hvis du bruger val(text1.text)
Avatar billede ea_data Nybegynder
31. december 2001 - 00:17 #4
Jeg har tænkt lidt mere over det og er nået frem til at man evt kan gøre det på denne måde:

Private Sub Command1_Click()
Dim sum As Double
Dim txtBox As TextBox
sum = 0
On Error GoTo Errhandler
For Each txtBox In Form1
sum = sum + val(txtBox.Text)
Next
Errhandler:
Me.Print sum
End Sub
Avatar billede ea_data Nybegynder
31. december 2001 - 11:39 #5
Af en eller anden grund medtages også andre kontroller end textbox. Det betyder af ovenstående rutine stopper før tid. Jeg har derfor rettet lidt i koden så opsumering kun sker for kontorller hvor navnet starter med \"Text\".

Private Sub Command1_Click()
Dim Kontrol As Control
Dim sum As Double
sum = 0
For Each Kontrol In Form1
If Left(Kontrol.Name, 4) = \"Text\" Then
sum = sum + Val(Kontrol.Text)
End If
Next
Me.Print sum
End Sub
Avatar billede maagefinke Nybegynder
31. december 2001 - 17:15 #6
Tak, jeg vender tilbage næste år. Godt nytår!
Avatar billede ea_data Nybegynder
01. januar 2002 - 14:48 #7
Du kan også indsætte ovenstående koden i en funktion, som du kalder Sum, så er den mere generelt anvendelig, idet du blot kan sige:
Sum(form1) for at få beregnet værdien af samtlige tekstbokse på form1. 
Tilføj et modul til dit projekt og indsæt følgende kode i modulet, eller tilføj koden under generelt i den aktuelle form:

Public Function Sum(frm As Form) As Double
Dim Kontrol As Control
Sum = 0
For Each Kontrol In frm
If LCase(Left(Kontrol.Name, 4)) = \"text\" Then
Sum = Sum + Val(Kontrol.Text)
End If
Next
End Function

\'funktionen kaldes således fra den aktuelle form:

Private Sub Command1_Click()
\'udskriv sum på formen
Me.Print Sum(Form1)
\'gem sum i variabel a
a=sum(form1)
End Sub
Avatar billede maagefinke Nybegynder
02. januar 2002 - 20:21 #8
Jeg har prøvet med følgende, men får hele tiden returneret 0 helt ude til venstre på min form?
Kan ikke se, hvad jeg gør forkert.
Private Sub Command1_Click()
Dim tal As Single
Dim kontrol As Control
Dim sum As Double
sum = 0
For Each kontrol In Form1
If Left(kontrol.Name, 4) = \"text\" Then
sum = sum + Val(kontrol.Text)
Text3.Text = sum
End If
Next
Me.Print sum
End Sub
Avatar billede ea_data Nybegynder
02. januar 2002 - 22:06 #9
Prøv at udskifte denne linie:

If Left(kontrol.Name, 4) = \"text\" Then
med:

If LCase(Left(kontrol.Name, 4)) = \"text\" Then

Det er også vigtigt at navnene på textboxene i din form starter med text. Hvis navnene starter med noget andet skal du skrive det i stedet for \"text\"
Avatar billede maagefinke Nybegynder
03. januar 2002 - 00:11 #10
Med denne kode lykkedes det at få resultatet i text3.text:
Private Sub Command1_Click()
Dim tal As Single
Dim kontrol As Control
Dim sum As Double
sum = 0
For Each kontrol In Form1
If LCase(Left(kontrol.Name, 4)) = \"text\" Then
sum = sum + Val(kontrol.Text)
Text3.Text = sum
End If
Next
End Sub
Jeg forhøjer pointtallet lidt, idet jeg så håber, at du gider forklare mig,
1) hvad \"If left(kontrol.name, 4) = \"tekst\" -betyder samt hvad Me.print betyder og hvorfor Mer.print havner helt til venstre i min form!?
Avatar billede maagefinke Nybegynder
03. januar 2002 - 00:15 #11
Nåja, det skal naturligvis være, hvad:
If LCase(Left(kontrol.Name, 4)) = \"text\"
Mange tak, ea data!
Avatar billede ea_data Nybegynder
03. januar 2002 - 18:03 #12
Forklaring:

LEFT(kontrol.Name, 4)

kommandoen LEFT retrunerer det antal tegn, som er anført efter kommaet. I det aktuelle tilfælde returneres de første fire tegn i navnet på den første tekstbox på din form. Så hvis første tekstbox har navnet \"text1\" svarer det til at skrive LEFT(\"Text1\", 4). Resultatet af dette udtryk er \"Text\". Lcase(\"Text\") konverterer de tegn, der er i parentesen til små bogstaver. \"Text\" bliver altså til \"text\". Det er jo meget praktisk når man skal sammenligne to tekststrenge som det sker i linien:
If LCase(Left(kontrol.Name, 4)) = \"text\"
Denne if sætning søger for at alle elementer på formen med et navn, som starter med \"TEXT\" vil blive medtaget i beregningen af summen.

Du skal derfor ændre din kode lidt. Jeg kan nemlig nu se, at du gemmer resultatet af udregningen i en textbox, som hedder text3. Denne tekstbox vil også blive medtaget i udregningen, fordi navnets første fire tegn er \"Text\". Du bør derfor ændre navnet så den textbox, hvor resultatet skal være, ikke indgår i sammentællingen. Du kan fx navnet på text2 til Resultat og ændre  koden således:

Private Sub Command1_Click()
Dim tal As Single
Dim kontrol As Control
Dim sum As Double
sum = 0
For Each kontrol In Form1
If LCase(Left(kontrol.Name, 4)) = \"text\" Then
sum = sum + Val(kontrol.Text)
End If
Next
Resultat.Text = sum
End Sub


Jeg håber dette giver mening. Ellers må du jo vende tilbage.

Avatar billede maagefinke Nybegynder
03. januar 2002 - 20:20 #13
Tak, jeg ser på det!
Avatar billede ea_data Nybegynder
03. januar 2002 - 22:16 #14
Det er naturligvis navnet på den tekstbox, der har navnet text3 som skal ændres til Resultat. Jeg går iøvrigt ud fra at alle andre tekstboxe, som du ønsker SKAL være med i beregningen har et navn, som starter med \"text\".
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