30. december 2001 - 21:41Der 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?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
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)
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
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
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
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
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\"
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!?
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.
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\".
Synes godt om
Ny brugerNybegynder
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.