Vraag over textbox en listbox

Status
Niet open voor verdere reacties.

nootie

Gebruiker
Lid geworden
10 apr 2008
Berichten
104
Hoi,

Wanneer je een waarde(double) in een textbox typt dmv bijvoorbeeld 5,4 dan kan je er wiskundige bewerkingen meedoen. (5,4+2,3=7,7). Maar wanneer je de waarden invult met een punt in plaats van een komma, zijn de wiskundige bewerkingen niet meer mogelijk (5.4+2.3=77 => is dus niet juist). Kan je niet een stukje code vinden die alle punten van een textbox vervangt in een komma. Bijvoorbeeld:

Code:
for each textbox in excelfile
getal=textbox.text
Replace(getal, ".", ",")
next

Het 2de probleem is wanneer ik iets selecteer in een listbox, wordt er rond het geselecteerde een blauw kader geplaatst. Nu zou ik graag hebben, wanneer je opnieuw op het blauwe kader drukt. Dat het blauwe kader verdwijnt en dat je dus niks meer geselecteerd hebt. Is dit mogelijk. Bijvoorbeeld iets in de aard van:

Code:
Private Sub ListBox1_Click()
if listbox.selected=true then listbox.selected=false
End Sub

Thx
 
Dat weet ik ook wel dat een textbox gebruikt wordt voor voornamelijk tekst in te typen, maar waar ga je anders uw waarden intypen. Ook in een textbox toch, er bestaat toch niet iets speciaals om waarden in te typen.
 
Sterker nog: je kunt er alleen maar tekst in invoeren.
Als je met de inhoud van een tekstvak iets rekenkundigs wil gaan doen zul je het naar een ander gegevenstype om moeten zetten, bijv.

x=TextBox1.Text*1
of
x=Val(TextBox1.Text)
of
x=cdbl(TextBox1.Text)
 
Dat heb ik ook voor alle waarden gedaan namelijk cdbl(waarde), maar men probleem blijft nog altijd ivm die wiskundige berekeningen. Hij gaat het verschillend berekenen als je of wel een kommagetal ingeeft of wel een puntgetal.
 
Gebruik replace

x=replace(TextBox1.Text,".",",")*1
of
x=Val(replace(TextBox1.Text,".",","))
of
x=cdbl(replace(TextBox1.Text,".",","))
 
Dat zou ik ook meteen toepassen, maar ik heb oneindig veel textboxen staan. Ik ben bezig met een groot project met 30userforms en voor iedere userform staat er waarschijnlijk 10 textboxen. Dus dat is al een heel werk om dan telkens iedere textbox te gaan schrijven met replace(). Ik vroeg me dus af of er niet iets bestaat om met één code alle textboxen te gaan schrijven.
 
Dan denk ik dat daar het probleem is.
Hoe groot het projekt ook is, meestal kan dat met 1 userform en 10 tekstvakken gerealiseerd worden.
Afhankelijk van een variabele kunnen de labels voor een tekstvak een andere caption krijgen en kunnen de gegevens van de tekstvakken naar andere variabelen of cellen weggeschreven worden.
Bijvoorbeeld:

als je de variabele x laat variëren tussen 1 en 30 simuleer je met deze code 300 verschillen tekstvakken:
Code:
for j= 1 to 10
  cells(x*10,1)=replace(Me("tekst" & j).Text,".",",")* 400
next
 
Laatst bewerkt:
uhu, enkel is het probleem dat ik alle textboxen al heb benaamd. Nu ik zal wel zien wat ik ga doen. Btw weet er nog iemand hoe ik dat probleem met de listbox kan oplossen?
 
Voordat je allerlei vervangingsslagen op een tekstbox loslaat, zou ik eerst een procedure inlassen die de waarde van de tekstbox controleert. Dat is namelijk in min optiek de enige manier om er zeker van te zijn dat je daadwerkelijk de juiste output krijgt.
Ik gebruik daarom als ik getallen wil uit een tekstvak, altijd de functie IsNumeric om de data te checken. Voorbeeld:

Code:
If Not IsNumeric(Tekstvak) then
     Msgbox "Dit is geen getal, nogmaals invoeren!", vbOk
     SetFocus Tekstvak
End If
Zo weet je zeker, ongeacht de interpunctienotatie, of je met een getal te maken hebt.
Als je de check in een aparte procedure zet, hoef je maar één regeltje aan je tekstvakken toe te voegen:
Call checken
En dan ben je volgens mij al waar je wil wezen.
Kortom: het probleem bij de basis aanpakken, en voorkomen dat er überhaupt iets anders dan een getal wodt ingevoerd.

Michel
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan