1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Private Sub doRestrictPivots() Dim WS As Worksheet Dim PT As PivotTable Dim PF As PivotField Dim isAllowed As Boolean isAllowed = False On Error Resume Next For Each WS In ActiveWorkbook.Worksheets For Each PT In WS.PivotTables PT.EnableFieldDialog = isAllowed PT.EnableFieldList = isAllowed PT.EnableDataValueEditing = isAllowed For Each PF In PT.PivotFields PF.EnableItemSelection = isAllowed PF.DragToColumn = isAllowed PF.DragToData = isAllowed PF.DragToHide = isAllowed PF.DragToPage = isAllowed PF.DragToRow = isAllowed Next PF Next PT Next WS End Sub |
quote:Op donderdag 8 mei 2014 11:41 schreef DaviniaHR het volgende:
Als ik dit rechtstreeks in de macro-ding plak, wordt het rood en gebeurt er niets.
Als ik dan op F5 druk, krijg ik een pop-up dat ik een sub moet aanmaken.
Wat doe ik verkeerd?
Is er een regeltje in de sub die ik kan ewghalen waardoor je wel de rapportfilters kunt instellen?quote:Op donderdag 8 mei 2014 15:10 schreef sylvesterrr het volgende:
Ik zei toch dat je nagenoeg niets meer kan doen?
Dat durf ik zo 1,2,3 niet te zeggen. Mijn gebruikers mogen de standaardfilters niet gebruiken vanwege de vele pivot tables die ik filter met behulp van slicers.quote:Op vrijdag 9 mei 2014 12:51 schreef DaviniaHR het volgende:
[..]
Is er een regeltje in de sub die ik kan ewghalen waardoor je wel de rapportfilters kunt instellen?
Niet nieuwe filters inslepen, maar wel op het knopje drukken, zeg maar?
regel 15quote:Op vrijdag 9 mei 2014 12:51 schreef DaviniaHR het volgende:
[..]
Is er een regeltje in de sub die ik kan ewghalen waardoor je wel de rapportfilters kunt instellen?
Niet nieuwe filters inslepen, maar wel op het knopje drukken, zeg maar?
1 2 3 4 5 6 7 | Function getdecimals2(ByVal value As Double) As Double Dim a As Double Dim b As String a = Round(value * 100, 0) b = CStr(Right(a, 2)) getdecimals2 = CDbl(b) / 100 End Function |
Het is maar wat je als zo'n grote onnauwkeurigheid beschouwd (0,00000000000116415210804632quote:Op zaterdag 10 mei 2014 14:31 schreef Holy_Goat het volgende:
Lieve mensen.
Waarom de fuck gebeurt dit?
[ afbeelding ]
Ik verwacht gewoon 0.03 als antwoord.
Wel via een omweg opgelost nu, maar slaat echt nergens op
[ code verwijderd ]
Zit er zo een onnauwkeurigeheid in?
Mooie oplossing maar gaat inderdaad niet altijd op.quote:Op zaterdag 10 mei 2014 18:03 schreef snabbi het volgende:
returnsdecimals = Round(value - Round(value), 2)
1 2 3 4 5 6 | Sub aa() Dim a As Double a = Round(213.82 - Round(213.82), 2) If a < 0 Then a = a + 1 Debug.Print a >> geeft 0.82 End Sub |
returnsdecimals = Round(value - Application.WorksheetFunction.Floor(value, 1), 2)quote:Op zaterdag 10 mei 2014 19:10 schreef Speculant. het volgende:
je vergeet dat er ook naar boven kan worden afgerond.
Voor ons is het net alsof je 3100,03 - 3100 doet. Dit is 0,03quote:Op zaterdag 10 mei 2014 22:17 schreef Holy_Goat het volgende:
Maarem, waarom gaat het dan fout in mijn eerdere voorbeeld?
Dankjewel voor je uitlegquote:Op zondag 11 mei 2014 10:16 schreef snabbi het volgende:
[..]
returnsdecimals = Round(value - Application.WorksheetFunction.Floor(value, 1), 2)
[..]
Voor ons is het net alsof je 3100,03 - 3100 doet. Dit is 0,03
Voor de computer is het echter 3100,02999999988358 - 3100
Dit komt doordat de computer dus de dichtsbijzijnde floating point weergave zoekt die 3100,03 benaderd. 3100 hoeft hij niet te benaderen, want alleen decimalen en getallen groter dan 15 cijfers moeten worden benaderd.
Nu weet de computer wel dat hij 3100,02999999988358 moet weergeven als 3100,03, maar dat is niet zo voor 0,02999999988358. 0,03 heeft namelijk een andere floating point representatie, deze is bijvoorbeeld 0,030000001344.
PS ik ben te lui geweest om de echte getallen er bij te zoeken
Door het rekenen met de andere getallen die niet als floating point hoeven weergegeven te worden, verliest de computer de type weergave uit het oog.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |