• 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.

Formule waarde niet herkend door VBA

Status
Niet open voor verdere reacties.

LucBrands

Gebruiker
Lid geworden
12 jan 2012
Berichten
38
Ik gebruik een formule in cel E2 (staat op Sheet 1). Afhankelijk van de waarde moet onderstaande VBA uitgevoerd worden. Helaas wordt dit niet uitgevoerd als er in de cel een formule staat. Als ik in cel E2 effectief een getal (0, 1 of 2) ingeef, dan wordt onderstaande wel uitgevoerd. Ik veronderstel dan dat VBA de waarde van de formule niet kan lezen.
Is er iemand die me hier een lossing kan voor geven?



If Target.Address = "$E$2" Then
With Sheet2
Select Case Target.Value
Case 0
.Shapes("TextBox1").Visible = True
.Shapes("TextBoxTolNL").Visible = False
.Shapes("TextBoxTolEN").Visible = False
Case 1
.Shapes("TextBox1").Visible = False
.Shapes("TextBoxTolNL").Visible = True
.Shapes("TextBoxTolEN").Visible = False
Case 2
.Shapes("TextBox1").Visible = False
.Shapes("TextBoxTolEN").Visible = True
.Shapes("TextBoxTolNL").Visible = False
End Select
End With
 
Probeer het eens met: Select Case Int(Target.Value)
 
Het change event (ik vermoed dat je dit gebruikt) wordt NIET getriggerd door een veranderde waarde ten gevolge van een herberekening. Je zal het dus anders moeten aanpakken, bijvoorbeeld kijken naar welke cel(len) de waarde in die formuls in cel E2 kunnen doen veranderen en dan het change event op wijzigingen aan die cellen laten reageren.
 
en beperk de code tot:

Code:
If Target.Address = "$E$2" Then
  With Sheet2
    .Shapes("TextBox1").Visible = target=0
    .Shapes("TextBoxTolNL").Visible = target=1
    .Shapes("TextBoxTolEN").Visible = target=2
  end with
End If
 
Dan kan je beter een voorbeeld van je document plaatsen.
 
en beperk de code tot:

Code:
If Target.Address = "$E$2" Then
  With Sheet2
    .Shapes("TextBox1").Visible = target=0
    .Shapes("TextBoxTolNL").Visible = target=1
    .Shapes("TextBoxTolEN").Visible = target=2
  end with
End If


Deze verkorte versie werkt en is ook korter, maar mijn probleem is nog niet opgelost
 
Een formule geeft geen change event. Je kan dit oplossen met calculate bv

Code:
Private Sub Worksheet_Calculate()
 If [E2] <> oud Then
    jouw code
    oud = [E2]
 End If
End Sub
 
Herrrrrstel:

Code:
If Target.Address = "$E$2" Then
  With Sheet2
    .TextBox1.Visible = target=0
    .TextBoxTolNL.Visible = target=1
    .TextBoxTolEN.Visible = target=2
  end with
End If
 
Bijgevoegd een voorbeeld:

Als de waarde in F16 (Sheet Info) veranderd (kan leeg, 0 of een andere waarde hebben) dan moet de formule (rij 46 - 47) op "Sheet Report" veranderen
Bij D2 = 0 dan is er een formule met worteltrekking
Bij D2 = 1 is de formule = TV = Tolerantie / 6
Bij D2 = 2 is de formule = TV = Tolerance / 6



Bekijk bijlage Voorbeeld.xlsm
 
Altijd handig; een bestand met een wachtwoord erop plaatsen.
Overigens is de formule in D2 niet je van het.
=als(en(f16=0;f16="");0;(b2+f16)-f16)

Als eerste moet de 'en' functie vervangen worden door 'of'. (als in f16 echt een nul staat geeft het onwaar retour of is dit de bedoeling).
Bij onwaar tel je b2 bij f16 op, en trekt vervolgens f16 er weer vanaf; b2 alleen is dan voldoende toch?
 
Altijd handig; een bestand met een wachtwoord erop plaatsen.
Overigens is de formule in D2 niet je van het.
=als(en(f16=0;f16="");0;(b2+f16)-f16)

Als eerste moet de 'en' functie vervangen worden door 'of'. (als in f16 echt een nul staat geeft het onwaar retour of is dit de bedoeling).
Bij onwaar tel je b2 bij f16 op, en trekt vervolgens f16 er weer vanaf; b2 alleen is dan voldoende toch?

Ja dit is al aangepast.
Dit is gewoon =als(of(f16=0;f16="");0;b2)
Paswoord vergeten af te zetten, ze zijn hier op het bedrijf nogal achterdochtig.
Als het voor een oplossing er af moet, zal ik dat proberen voor te stellen op een andere manier.
 
Hierbij een beknopt voorbeeld.

Ik merk wel als ik Cel D2 even met F2 open en gewoon enter de TextBox op sheet2 veranderd. Dus zou ik eigenlijk willen dat Cel 2 automatisch "refreshed" maar van VBA ken ik niet zoveel.


Bekijk bijlage Voorbeeld.xlsm
 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$F$16" Then
    With Sheet2
               .Shapes("TextBox1").Visible = Cells(2, 4) = 0
               .Shapes("TextBoxTolNL").Visible = Cells(2, 4) = 1
               .Shapes("TextBoxTolEN").Visible = Cells(2, 4) = 2
    End With
End If

End Sub

Je kunt natuurlijk ook pas bij het activeren van het werkblad waar de Text-Boxen staan, kijken wat de waarde in Cel D2 is en daarop handelen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan