Cellwaarde controleren

Status
Niet open voor verdere reacties.

wpayanda

Gebruiker
Lid geworden
30 jan 2001
Berichten
87
Goede morgen allemaal,

Ik heb een excelfile gemaakt waarin een macro verschillende gegevens van 1 worksheet op verschillende worksheets kopiert. Om de gegevens uit elkaar te houden geef ik ze steeds een nieuwe serienummer. Ik wil nu echter eerst een controle laten uitvoeren voordat de gegevens gekopiert gaan worden. Dus als ik op knop gegevens ingeven druk dan moet mijn macro gaan controleren of in die serienummer al een keer gebruikt heb en als het zo is dat ik dan een melding van krijg. Ik voel mijn serie nummer in cell "G3" op worksheet "Formulier".

Kan iemand mij hiermee helpen?
 
Hoe wordt het nieuwe serienummer ingegeven / berekend?
 
Hallo WiGi,

Nieuwe serienummer wordt manueel ingegeven, dat is een datumaanduiding wat ik vaak gebruik, bijvoorbeeld voor vandaag: 15012008-01 is serie 1 van vandaag, 15012008-02 is serie 2 van vandaag etc.
 
En waar wordt dat ingegeven?

Vraagt de code daarom tijdens de uivoering van de macro?
Of zet je dat in een cel? Zo ja, waar dan? (blad, cel, ...)

Wigi
 
Wigi,

Ik geef de gegevens zelf in en het enige wat de macro doet is die gegevens kopieren naar andere werkbalken, ik heb een werkblad formulier waarop ik alles invul. In cel G3 geef ik de serienummer in. Als de rest van de cellen ook ingevuld zijn dan worden de gegevens over verschillende werkbladen gekopierd. Dus de gegevens van de harheidsmeting gaat naar werkblad "Hardheidsmeting", de gegevens van trekproef gaat naar werkblad "trekproef" etc. Echter in alle werkbladen wordt de serienummer/testnummer in kolom "C" geschreven, en daarachter komen de datum en de meetegegevens.

De macro vraagt dus niet naar de serienummer/testnummer maar dat geef ik zelf in. Als de serienummer niet ingegeven is krijg ik wel een foutmelding dat hij niet doorgaat als er geen serienummer ingevuld is.
 
Je moet testen of die cel G3 op Sheet formulier al voorkomt. Maar met welke cellen moet dat dan getest worden? Ik moet specifieke cellen hebben waar eerdere nummers terecht komen.

Wigi
 
Hierbij wat ik tot nu toe heb, maar hij werkt niet. Als ik de rode regel tussenuit haal dan doet ie het wel maar dan moet ik ongeveer 100 keer op OK drukken wil ik weer in mijn excelfile iets kunnen doen.


Code:
Private Sub CommandButton2_Click()

If Sheets("formulier").Range("G3").Value = False Then
Msg = "Vul eerst gegevens op het werkblad Formulier in!"    
style = vbOKOnly + vbExclamation + vbApplicationModal   .
Title = "LET OP"   
Response = msgbox(Msg, style, Title, Help, Ctxt)
If Response = vbOK Then    
    MyString = vbOK
    Sheets("formulier").Range("B3").Select 
    
End If
End If


For Each c In Worksheets("Ziftbepaling").Range("C6:C101")
[COLOR="Red"]If c.Value = True Then[/COLOR]
If c.Value = Worksheets("Formulier").Range("G3").Value Then
Msg = "Chargenummer al in gebruik!"    
style = vbOKOnly + vbExclamation + vbApplicationModal  
Title = "LET OP"   
Response = msgbox(Msg, style, Title, Help, Ctxt)
If Response = vbOK Then    
MyString = vbOK
Sheets("formulier").Range("B3").Select 


End If
End If
End If

Next c

If Worksheets("Formulier").Range("B3").Value = "ZINKOXIDE" Then
Call pareldistributie2
Call einde
Sheets("formulier").Activate
Call clear

Else

If Not Range("G3").Value = "" Then

Load UserForm2
UserForm2.Show

End If
End If

End Sub
 
Laatst bewerkt:
Misschien is dit iets om ook je serie nummer automatisch te laten genereren. hij geeft de dag aan net zoals bij jou alleen hij kijkt automatich of het 01 02 03 ect moet zijn voor die dag.

zie code hieronder.

Code:
Sub ordernummer()

Dim MyDate, MyVervolg, AnyString, MyStr, MyWaarde, MyNummer

    MyDate = Format(Date, "yyyymmdd")
    MyWaarde = "001"
    MyVervolg = WorksheetFunction.Max(Sheets("blad1").Columns(2)) + 1
    MyNummer = MyDate & MyWaarde

    AnyString = WorksheetFunction.Max(Sheets("blad1").Columns(2))

    MyStr = Left(AnyString, 8)

If MyStr >= MyDate Then
    With Worksheets("blad1")
        .Cells(2, 1).EntireRow.Insert
        .Cells(2, 2).Value = MyVervolg
    End With
Else
    With Worksheets("blad1")
        .Cells(2, 1).EntireRow.Insert
        .Cells(2, 2).Value = MyNummer
    End With
End If

End Sub

alleen ff aanpassen na eigen gebruik. Dan hoef hje ook geen invoer contole te hebben
 
bedankt voor de reactie Relleboer,

het is inderdaad makkelijker maar het is zo dat ik de gegevens niet dezelde dag ingeef. ik zal hem ook overnemen in mijn code, maar het kan ook zijn dat ik de meetgegevens pas na een week krijg en dan moet ik ze invoeren.

en eigenlijk is het zo dat ik niet de enige ben die deze file gebruikt, vandaar dat ik een controle wil laten uitvoeren om te voorkomen dat ik alle fout ingegeven gegevens door anderen hoef te verbeteren en dus extra uren moet gaan maken.
 
hallo allemaal,

omdat ik niet veel reacties heb gehad ben ik zelf aan het werk gegaan. Uiteindelijk is het met gelukt om een controle te laten uitvoeren (zie onderstaande code). Het is echter wel zo dat hij lege cellen ook als fout gaat beschouwen. Daarvoor heb ik als eerst een regel toegevoegd dat als er niks in cel G3 ingevuld is dat ie niet verder gaat. Als er in G3 wel iets is ingevuld en dezelfde nummer in de eerste werkblad voorkomt krijg ik een foutmelding en als ik op OK druk is de bedoeling dat hij cel G3 gaat selecteren, maar wat doet hij nu doet , nadat ik op Ok heb gedrukt, hij laadt de Userform en dat is niet de bedoeling. en als ik een nieuwe chargenummer ingeef, wat nog niet bestaat, dan reageert mijn knop niet! weet iemand waar het aan ligt?

Dus samengevat:
- Hij ziet lege cellen ook als fout
- Nadat ik op OK heb gedrukt laadt hij de Userform, hij moet eigenlijk G3 op werkblad Formulier selecteren
- Als er een nieuwe waarde ingevuld wordt in cel G3 dan reageert de knop (CommandButton2_Click() ) niet meer

Code:
Private Sub CommandButton2_Click()

If Sheets("formulier").Range("G3").Value = False Then
Msg = "Vul eerst gegevens op het werkblad Formulier in!"
style = vbOKOnly + vbExclamation + vbApplicationModal
Title = "LET OP"
Response = msgbox(Msg, style, Title, Help, Ctxt)
If Response = vbOK Then    '
    MyString = vbOK
    Sheets("formulier").Activate
    Range("B3").Select

End If
End If

If Not Range("G3").Value = "" Then
For Each c In Worksheets("Ziftbepaling").Range("C6:C10")
If c.Value = Worksheets("Formulier").Range("G3").Value Then
Msg = "Chargenummer al in gebruik!"    '
style = vbOKOnly + vbExclamation + vbApplicationModal
Title = "LET OP"
Response = msgbox(Msg, style, Title, Help, Ctxt)
If Response = vbOK Then
    MyString = vbCancel
    Sheets("Formulier").Activate
Range("G3").Select

Else

Load UserForm2
UserForm2.Show
End If
End If


If Worksheets("Formulier").Range("B3").Value = "ZINKOXID" Then
Call pareldistributie2
Call einde
Sheets("formulier").Activate
Call clear

Else

Load UserForm2
UserForm2.Show

End If

Next
End If
End Sub
 
Heeeellllppppppp

goede morgen allemaal,

Gezien dat ik niet te veel reacties heb gehad ben ik toch maar zelf verder gegaan. Ik heb nu onderstaade code tussen gevoegd waarmee ik de invoer laat controleren.

Code:
Private Sub CommandButton2_Click()


If Sheets("formulier").Range("G3").Value = False Then
Msg = "Vul eerst gegevens op het werkblad Formulier in!"
style = vbOKOnly + vbExclamation + vbApplicationModal
Title = "LET OP"
Response = msgbox(Msg, style, Title, Help, Ctxt)
If Response = vbOK Then    '
    MyString = vbCancel
    Unload UserForm2
    Sheets("formulier").Range("B3").Select
End If
End If


If Not Range("G3").Value = "" Then
For Each c In Worksheets("Ziftbepaling").Range("C6:C9")
If c.Value = Worksheets("Formulier").Range("G3").Value Then
Msg = "Chargenummer al in gebruik!"
style = vbOKOnly + vbExclamation + vbApplicationModal
Title = "LET OP"
Response = msgbox(Msg, style, Title)
If Response = vbOK Then
    MyString = vbCancel
    Sheets("formulier").Range("B3").Select
End If
End If
Next c
End If


If Worksheets("Formulier").Range("B3").Value = "ZINKOXIDE" Then
Call pareldistributie2
Call einde
Sheets("formulier").Activate
Call clear

Else
If Not Range("G3").Value = "" Then

Load UserForm2
UserForm2.Show

End If
End If

End Sub

Als cel G3 leeg is dan krijg ik een melding dat ik de gegvens in moet vullen. Dat is dus al opgelost!

Als de cel G3 niet leeg is, dan kan twee dingen gebeuren:
1- De chargenummer/serienummer komt niet voor in blad ziftbepaling colom "C", dan wordt de Userform2 ingeladen en kan men verder.
2- De chargenummer/serienummer komt wel voor in blad ziftbepaling colom "C", dan krijgt men een foutmelding dat de charge al bestaat. De bedoeling is dat de cell G3 geselecteerd wordt zodat de charge-/serienummer aangepast kan worden. Echter als ik op knop OK van de foutmelding druk dan wordt de userform2 geactiveerd.

Als in cel B3 "Zinkoxide" ingevoerd wordt dan moet de programma maar een deel van mijn totale macro gebruiken. Hier wordt ook gekeken of dezelfde chargenummer al bestaat. zo ja, dan moet hij weer cel G3 selecteren en niet verder gaan. Maar als ik de foutmelding krijg dat de chargenummer al bestaat en op knop OK druk dan gaat hij verder en kopiert hij alles op andere sheets.

Wie o wie kan mij hiermee helpen? wat is fout in de code?
 
Laatst bewerkt:
goede morgen allemaal,

Gezien dat ik niet te veel reacties heb gehad ben ik toch maar zelf verder gegaan. Ik heb nu onderstaade code tussen gevoegd waarmee ik de invoer laat controleren.

Code:
Private Sub CommandButton2_Click()


If Sheets("formulier").Range("G3").Value = False Then
Msg = "Vul eerst gegevens op het werkblad Formulier in!"
style = vbOKOnly + vbExclamation + vbApplicationModal
Title = "LET OP"
Response = msgbox(Msg, style, Title, Help, Ctxt)
If Response = vbOK Then    '
    MyString = vbCancel
    Unload UserForm2
    Sheets("formulier").Range("B3").Select
End If
End If


If Not Range("G3").Value = "" Then
For Each c In Worksheets("Ziftbepaling").Range("C6:C9")
If c.Value = Worksheets("Formulier").Range("G3").Value Then
Msg = "Chargenummer al in gebruik!"
style = vbOKOnly + vbExclamation + vbApplicationModal
Title = "LET OP"
Response = msgbox(Msg, style, Title)
If Response = vbOK Then
    MyString = vbCancel
    Sheets("formulier").Range("B3").Select
End If
End If
Next c
End If


If Worksheets("Formulier").Range("B3").Value = "ZINKOXIDE" Then
Call pareldistributie2
Call einde
Sheets("formulier").Activate
Call clear

Else
If Not Range("G3").Value = "" Then

Load UserForm2
UserForm2.Show

End If
End If

End Sub

Als cel G3 leeg is dan krijg ik een melding dat ik de gegvens in moet vullen. Dat is dus al opgelost!

Als de cel G3 niet leeg is, dan kan twee dingen gebeuren:
1- De chargenummer/serienummer komt niet voor in blad ziftbepaling colom "C", dan wordt de Userform2 ingeladen en kan men verder.
2- De chargenummer/serienummer komt wel voor in blad ziftbepaling colom "C", dan krijgt men een foutmelding dat de charge al bestaat. De bedoeling is dat de cell G3 geselecteerd wordt zodat de charge-/serienummer aangepast kan worden. Echter als ik op knop OK van de foutmelding druk dan wordt de userform2 geactiveerd.

Als in cel B3 "Zinkoxide" ingevoerd wordt dan moet de programma maar een deel van mijn totale macro gebruiken. Hier wordt ook gekeken of dezelfde chargenummer al bestaat. zo ja, dan moet hij weer cel G3 selecteren en niet verder gaan. Maar als ik de foutmelding krijg dat de chargenummer al bestaat en op knop OK druk dan gaat hij verder en kopiert hij alles op andere sheets.

Wie o wie kan mij hiermee helpen? wat is fout in de code?

1) Userform2.show
Als ik naar je code kijk die je nu plaatst zie ik niet in waarom de userform word geladen als je op OK drukt van de foutmelding (neem trouwens aan dat je het nu hebt over de eerste berichtmelding bovenaan). Je zou hier anders ook een voorwaarde kunnen invullen dat 'Als de celwaarde niet goed is ingevuld dat VBA het commando Exit Sub uitvoert' ?!

2) Zinkoxide
Zou ik voor de veiligheid ook een voorwaarde in vullen. Bijvoorbeeld wanneer de chargewaarde al bestaat dan: Voorwaarde1 = True
Bij de kopieergedeelte zou ik dan de voorwaarde stellen dat als Voorwaarde1 = True then ..... doorgaan, Else stoppen.

Probeer anders eerst de code uit op een test bestand en laat VBA telkens tussen bepaalde commando's stoppen zodat je de waarden van al je variabelen kan controleren. Waarschijnlijk zit er ergens anders een fout in je code. Want vooralsnog werkt het wel bij mij. Anders moet je even ene testbestand plaatsen.
 
gast0667 bedankt voor je reactie, hierbij een voorbeeld van het bestand. Wat ik ook doe laadt hij de userform als ik op OK druk. misschien vind jij de reden daarvan.
 

Bijlagen

Laatst bewerkt door een moderator:
Ok, heb enkele regels in VBA geplaats onder "Private Sub CommandButton2_Click()"
(te zien aan de groene tekst)

Wat nu gebeurt:
1) Als de charge nummer bestaat selecteerd VBA cel "G3" en verlaat zijn commando (d.m.v. Exit Sub). Je moet dus opnieuw drukken op de knop.

2) Als Zinkoxide is ingevuld gebeurt er idem als bij 1).

Volgens mij was dit je vraag toch ?
 

Bijlagen

Laatst bewerkt door een moderator:
gast0667 hartelijk bedankt voor je hulp,

Het was inderdaad wat ik zocht, hij moest idd bij een dezelfde charge alles stoppen en de foutmelding weergeven. Het werkt nu perfect :D nogmaals bedankt
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan