• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA probleempje met lezen van Tekst / getal

Status
Niet open voor verdere reacties.

Joost.van.Steeg

Gebruiker
Lid geworden
9 okt 2006
Berichten
138
Ik probeer een vergelijking te maken in VBA tussen een cel en een txtbox op een formulier:
Dit ziet er als volgt uit:
Code:
If Worksheets(FactuurNaam).Range("A" & RowNumberFact).Value = Controls(ControlStelCode).Value Then etc...

De waarde van
Controls(ControlStelCode).Value = 1

maar de waarde van
Worksheets(FactuurNaam).Range("A" & RowNumberFact).Value = 1 (lees spatie 1)
Terwijl in deze cel gewoon een 1 staat.
Ik heb het geprobeerd met de celinstellingen; standaard, getal en tekst, maar in alle drie de gevallen leest hij in VBA "spatie 1" waardoor de vergelijking nooit opgaat.

IS er bijvoorbeeld een mogelijkheid om spaties te verwijderen in VBA ?

Alle andere ideen zijn natuurlijk ook welkom.
 
Ja dat kan. Maar je moet de oorzaak wegnemen en niet de ziekte "genezen".

Eerst wil ik van jou weten hoe het komt dat er spatie 1 komt. Hoe heb je dat vastgesteld? Met Debug.Print of zo?
 
En als je in die bewuste cel nu eens gaat staan en dan Bewerken > Wissen > Alles doet, en terug 1 invoert?
 
Geprobeerd, geen resultaat.
Nieuwe werkmap geopend.
Cell A1 voor zien van de waarde "1"
Venster direct : ?Sheets("blad1").range("a1").value
Geeft:
spatie 1 -> Dat hoort toch niet zo ?
 
Die wordt er standaard gezet...

Doe maar eens:

Code:
Sub e()
    Debug.Print (Range("a1") = 1)
End Sub

Wigi
 
Ok, dan geeft hij als resultaat "waar"
Dit betekend dus dat de data met elkaar in overeenstemming is?

Maar als ik "?controls("ControlNaam").value" opgeef, dan komt de waar 1 zonder spatie in het venster direct te staan.

Bij de opdracht
If controls("ControlNaam").value = sheets("Blad1").range("A1").value Then
etc
End if

wordt de opdracht niet uitgevoerd.
En sheets("Blad1").range("A1").value geeft "spatie 1"
 
Daar ligt volgens mij het probleem niet. Kan je het bestandje bijhangen? Of alvast een stukje daaruit.
 
Was toevallig bezig om te kijken hoe het in een nieuw bestand zou zijn. Hier is het probleem hetzelfde.
 

Bijlagen

  • VBAVergelijking.rar
    10,1 KB · Weergaven: 23
Ik dacht al wel dat er iets met je controls mis was, maar zonder bijlage kon ik dat niet nagaan.

Dit is de correcte verwijzing

Code:
txtBox1.Text

Wigi
 
Hmm, iets te voorbarig.

.text geeft mij hetzelfde resultaat als .value

Ook in het bestandje dat ik heb toegevoegd werkt hij nog niet:

de msgbox("joost") wordt hier niet weergegeven.

Bij jou dus wel ?
 
Haha, ja, dat dan weer wel ;-)

Vervolgens een onderbrekingspunt in mijn code gezet en gekeken naar de waardes in venster direct. Wederom spatie 1 vs 1, wat VBA kennelijk bij mij niet als dezelfde waarden ziet.
 
Voor het bestandje dat gepost werd:

Code:
Private Sub cmdClick_Click()
    If Range("A1").Value = txtBox1.Text Then MsgBox ("Joost")
    MsgBox txtBox1.Text
End Sub
 
ok, dat werkt inderdaad. Nu is het idee van mijn code alleen een beetje anders.

Wederom heb ik het bestandje bijgevoegd, maar nu op de manier zoals ik hem in mijn project gebruik.

De reden dat ik gebruik maakte van die controls(controlnaam).value is dat de controlnaam een variabele is.

Dit kwam in mijn bestand inderdaad niet naar voren.
 

Bijlagen

  • VBAVergelijking.rar
    9,4 KB · Weergaven: 25
Toch nog wel wat foutjes eruit gehaald hoor.

Een Do op zich is al fout als er geen Loop bijstaat.

TxtBoxNummer = 0 want als het 1 en je telt er nog 1 bij krijg je een niet bekend object.

Val(Controls(TxtBoxNaam).Text)

Val is gebruikt om van de 1 een 1 te maken, snappie?


Code:
Private Sub cmdClick_Click()

Dim TxtBoxNaam As String
Dim TxtBoxNummer As Integer

Deel1 = "txtBox"
TxtBoxNummer = 0 '1

'Do
    TxtBoxNummer = TxtBoxNummer + 1
    TxtBoxNaam = Deel1 & TxtBoxNummer
    
    If Worksheets("blad1").Range("A1").Value = Val(Controls(TxtBoxNaam).Text) Then
    MsgBox ("Joost")
    
    End If
End Sub

Wigi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan