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

afronden datalabel

Status
Niet open voor verdere reacties.
Code:
 For ipts = 1 To .Points.Count     'alle punten aflopen en kleuren ngl. afwijking sd
                                             v = Fix((Ywaarden(ipts - 1) - g) / sd)     'afronden afwijking tov gemiddelde naar een veelvoud van sd
                                             If Sgn(v) <> Sgn(v1) Then v1 = 0     'SGN = teken (neg=-1, 0=0, pos=+1) als sgn(afiwijking) anders is dan tellerstand dan teller terug op nul zetten
                                             If Abs(v) >= s Then v1 = v1 + Sgn(v)     'teller telt +1 bij positieve waarden op, -1 bij negatieve waarden !

                                             Select Case Abs(v)
                                                  Case 0 To 2:  'aan deze moet je niets veranderen, standaard cobalt groene punten en anders groene doorlopende lijnen
                                                       If Abs(v1) >= 4 Then     '4 of meer opeenvolgende punten met een afwijking van meer dan 1 s
                                                            With .Points(ipts)
                                                                 .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                                 .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                                 .Border.Color = RGB(255, 0, 0)     'voorliggende lijntje rood
                                                            End With
                                                            If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)     'achterliggende lijntje rood (mag alleen niet van het laatste punt zijn !)
                                                       [COLOR="#FF0000"]Else     'in alle andere gevallen dat het punt nog niet rood gekleurd is
                                                            If data_admin(i, iCol_Levels) = 1 Then     'je toont de USL en de LSL
                                                                 If WorksheetFunction.Median(mylsl, Ywaarden(ipts - 1), myusl) <> Ywaarden(ipts - 1) Then     'je Y-waarde ligt niet tussen lsl en USL
                                                                      With .Points(ipts)
                                                                           .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                                           .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                                           .Border.Color = RGB(255, 0, 0)
                                                                      End With
                                                                      If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)     'maakt lijntje naar punt ook rood!
                                                                 End If
                                                            End If[/COLOR]
                                                       End If

                                                  Case Else
                                                       With .Points(ipts)
                                                            .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                            .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                            .Border.Color = RGB(255, 0, 0)
                                                       End With
                                                       If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)
                                             End Select
                                        Next

in die select case abs(v) is alles al rood buiten de -2 en de +2 (die case else na het rode stuk !)
dus naar die moet je niet meer om kijken.

in het gebied tussen -2s en +2s wordt ook al vanaf het 4e punt buiten -1s en +1s rood gekleurd, dus die moet je ook niet hebben. (eerste stuk van Case 0 to 2, voor het rode stuk)

Dus de andere gevallen moet je wel nog tackelen, dus het rode deel begint met een else en dan aflopen waarom je een bepaald punt nog voor een andere reden wenst rood te kleuren.
dan loop je de opeenvolgende if-jes binnen die rode code af :
* je toont de LSL en de USL
* je Y-waarde ligt buiten het gebied LSL-> USL (kleiner dan LSL of groter dan USL)
wel dan worden die ook rood gekleurd
 
Laatst bewerkt:
Nog niet helemaal. Als de USL en LSL geselecteerd zijn dan zijn die eisen leidend tov van de 3s en -3s. Als nu een meetpunt >3s en <USL of <-3s en >LSL wordt het punt rood.
 
dan de volgorde een beetje aanpassen
Code:
For ipts = 1 To .Points.Count     'alle punten aflopen en kleuren ngl. afwijking sd
                                             If data_admin(i, iCol_Levels) = 1 Then     'je toont de USL en de LSL
                                                  If WorksheetFunction.Median(mylsl, Ywaarden(ipts - 1), myusl) <> Ywaarden(ipts - 1) Then     'je Y-waarde ligt niet tussen lsl en USL (ik ga er van uit dat je altijd pos Y-waarden hebt
                                                       With .Points(ipts)
                                                            .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                            .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                            .Border.Color = RGB(255, 0, 0)
                                                       End With
                                                       If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)     'maakt lijntje naar punt ook rood!
                                                  End If

                                             Else               'je toont niet de LSL en USL
                                                  v = Fix((Ywaarden(ipts - 1) - g) / sd)     'afronden afwijking tov gemiddelde naar een veelvoud van sd
                                                  If Sgn(v) <> Sgn(v1) Then v1 = 0     'SGN = teken (neg=-1, 0=0, pos=+1) als sgn(afiwijking) anders is dan tellerstand dan teller terug op nul zetten
                                                  If Abs(v) >= s Then v1 = v1 + Sgn(v)     'teller telt +1 bij positieve waarden op, -1 bij negatieve waarden !

                                                  Select Case Abs(v)
                                                       Case 0 To 2:     'aan deze moet je niets veranderen, standaard cobalt groene punten en anders groene doorlopende lijnen
                                                            If Abs(v1) >= 4 Then     '4 of meer opeenvolgende punten met een afwijking van meer dan 1 s
                                                                 With .Points(ipts)
                                                                      .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                                      .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                                      .Border.Color = RGB(255, 0, 0)     'voorliggende lijntje rood
                                                                 End With
                                                                 If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)     'achterliggende lijntje rood (mag alleen niet van het laatste punt zijn !)
                                                            End If

                                                       Case Else
                                                            With .Points(ipts)
                                                                 .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                                 .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                                 .Border.Color = RGB(255, 0, 0)
                                                            End With
                                                            If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)
                                                  End Select
                                             End If
                                        Next
 
4x 1s en 4x -1s moet ook werken met UsL en LSL geselecteerd. Als ik die voorwaarde inbouw in het eerste stuk dan lijkt het goed te gaan.
Code:
                                        For ipts = 1 To .Points.Count     'alle punten aflopen en kleuren ngl. afwijking sd
                                             If data_admin(i, iCol_Levels) = 1 Then     'je toont de USL en de LSL
                                                  If WorksheetFunction.Median(mylsl, Ywaarden(ipts - 1), myusl) <> Ywaarden(ipts - 1) Then     'je Y-waarde ligt niet tussen lsl en USL (ik ga er van uit dat je altijd pos Y-waarden hebt
                                                       With .Points(ipts)
                                                            .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                            .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                            .Border.Color = RGB(255, 0, 0)
                                                       End With
                                                       If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)     'maakt lijntje naar punt ook rood!
                                                [COLOR="#FF0000"]  Else
                                                      v = Fix((Ywaarden(ipts - 1) - g) / sd)     'afronden afwijking tov gemiddelde naar een veelvoud van sd
                                                      If Sgn(v) <> Sgn(v1) Then v1 = 0     'SGN = teken (neg=-1, 0=0, pos=+1) als sgn(afiwijking) anders is dan tellerstand dan teller terug op nul zetten
                                                      If Abs(v) >= s Then v1 = v1 + Sgn(v)     'teller telt +1 bij positieve waarden op, -1 bij negatieve waarden !
    
                                                      Select Case Abs(v)
                                                           Case 0 To 2:     'aan deze moet je niets veranderen, standaard cobalt groene punten en anders groene doorlopende lijnen
                                                                If Abs(v1) >= 4 Then     '4 of meer opeenvolgende punten met een afwijking van meer dan 1 s
                                                                     With .Points(ipts)
                                                                          .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                                          .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                                          .Border.Color = RGB(255, 0, 0)     'voorliggende lijntje rood
                                                                     End With
                                                                     If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)     'achterliggende lijntje rood (mag alleen niet van het laatste punt zijn !)
                                                                End If
                                                            End Select[/COLOR]
                                           
                                                  End If

                                             Else               'je toont niet de LSL en USL
                                                  v = Fix((Ywaarden(ipts - 1) - g) / sd)     'afronden afwijking tov gemiddelde naar een veelvoud van sd
                                                  If Sgn(v) <> Sgn(v1) Then v1 = 0     'SGN = teken (neg=-1, 0=0, pos=+1) als sgn(afiwijking) anders is dan tellerstand dan teller terug op nul zetten
                                                  If Abs(v) >= s Then v1 = v1 + Sgn(v)     'teller telt +1 bij positieve waarden op, -1 bij negatieve waarden !

                                                  Select Case Abs(v)
                                                       Case 0 To 2:     'aan deze moet je niets veranderen, standaard cobalt groene punten en anders groene doorlopende lijnen
                                                            If Abs(v1) >= 4 Then     '4 of meer opeenvolgende punten met een afwijking van meer dan 1 s
                                                                 With .Points(ipts)
                                                                      .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                                      .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                                      .Border.Color = RGB(255, 0, 0)     'voorliggende lijntje rood
                                                                 End With
                                                                 If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)     'achterliggende lijntje rood (mag alleen niet van het laatste punt zijn !)
                                                            End If

                                                       Case Else
                                                            With .Points(ipts)
                                                                 .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                                 .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                                 .Border.Color = RGB(255, 0, 0)
                                                            End With
                                                            If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)
                                                  End Select
                                             End If
                                           Next
 
als je die 3 gemeenschappelijke regels voorin zet, dan hoeft dat maar 1 keer.
En daarna bekijk je de code en kunnen bepaalde zaken samen genomen worden en lijkt alles een stuk eenvoudiger (korter) te kunnen
Code:
 For ipts = 1 To .Points.Count     'alle punten aflopen en kleuren ngl. afwijking sd
     'dit stukje geldt in beide gevallen
                                             v = Fix((Ywaarden(ipts - 1) - g) / sd)     'afronden afwijking tov gemiddelde naar een veelvoud van sd
                                             If Sgn(v) <> Sgn(v1) Then v1 = 0     'SGN = teken (neg=-1, 0=0, pos=+1) als sgn(afiwijking) anders is dan tellerstand dan teller terug op nul zetten
                                             If Abs(v) >= s Then v1 = v1 + Sgn(v)     'teller telt +1 bij positieve waarden op, -1 bij negatieve waarden !

                                             If data_admin(i, iCol_Levels) = 1 Then     'je toont de USL en de LSL
                                                  'je Y-waarde ligt niet tussen lsl en USL of vanaf het 4e punt buiten +/- 1s
                                                  If (WorksheetFunction.Median(mylsl, Ywaarden(ipts - 1), myusl) <> Ywaarden(ipts - 1)) Or (Abs(v1) >= 4) Then
                                                       With .Points(ipts)
                                                            .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                            .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                            .Border.Color = RGB(255, 0, 0)
                                                       End With
                                                       If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)     'maakt lijntje naar punt ook rood!
                                                  End If

                                             Else               'je toont niet de LSL en USL
                                                  'of vanaf het 4e punt buiten +/- 1s ofwel vanaf +/- 3s
                                                  If Abs(v1) >= 4 Or Abs(v) > 2 Then     '4 of meer opeenvolgende punten met een afwijking van meer dan 1 s
                                                       With .Points(ipts)
                                                            .MarkerForegroundColor = RGB(255, 0, 0)     'inhoud punt rood
                                                            .MarkerBackgroundColor = RGB(255, 0, 0)     'rand punt rood
                                                            .Border.Color = RGB(255, 0, 0)     'voorliggende lijntje rood
                                                       End With
                                                       If ipts < .Points.Count Then .Points(ipts + 1).Border.Color = RGB(255, 0, 0)     'achterliggende lijntje rood (mag alleen niet van het laatste punt zijn !)
                                                  End If


                                             End If
                                        Next
 
Laatst bewerkt:
je had het nog eenvoudiger kunnen maken door die 2 nog samen te bundelen in 1 grote if (heb niet gecontroleerd op de positie en het aantal haakjes), maar of dat wenselijk is ???
Code:
 If (data_admin(i, iCol_Levels) = 1 and (WorksheetFunction.Median(mylsl, Ywaarden(ipts - 1), myusl) <> Ywaarden(ipts - 1)) Or (Abs(v1) >= 4)) or (data_admin(i, iCol_Levels) = 0 and                  
 (Abs(v1) >= 4 Or Abs(v) > 2))  Then
Vanaf wanneer is iets "koterij" of reguliere bebouwing ?
 
Laatst bewerkt:
voor de veiligheid is het misschien beter de uitdrukking =0 te vervangen door <>1
Code:
or (data_admin(i, iCol_Levels) [COLOR="#FF0000"]= 0[/COLOR]
or (data_admin(i, iCol_Levels)[COLOR="#FF0000"][COLOR="#FF0000"] <>1[/COLOR][/COLOR]
 
Ik heb #126 maar weer terug gezet want bij het uitschakelen van de USL LSL wordt er niet meer getoetst op de 3s en -3s. De punten >3s en/of <-3s blijven groen
 
Ik zit nog te praktiseren hoe ik #82 kan toepassen in de sub Alles_Even_Groot zonder dat de volgorde van de grafieken aangepast worden. Nu wordt de volgorde van aanmaak gehanteerd. Als die Sub goed werkt kan ik ook de print opties in de module Weergve grf gebruiken
Code:
Sub tweegrfnperpagina()
     'test programma

     Dim W As Long, H As Long
     Dim ChtObj As ChartObject
     Dim i, j  As Long
     Application.ScreenUpdating = False

     '2 grafieken op 1 pagina
     Sheets("Grafieken").PageSetup.Orientation = xlPortrait
     Sheets("Grafieken").Columns("I:K").Hidden = True
     For Each ChtObj In Sheets("Grafieken").ChartObjects
          For i = 1 To Sheets("Grafieken").ChartObjects.Count
               H = 360
               With Sheets("Grafieken").ChartObjects(i)
                    .Width = 432
                    .Height = H
                    .Chart.Axes(xlValue).TickLabelPosition = xlNone     'geen labels tonen voor de Y-as, wordt straks door de 9e reeks ondervangen
                    .Left = 0                                   'linkerhoek van het chartobject !!!
                    .Chart.PlotArea.Left = 30                   'linkerkant van de plotarea (zonder de labels is dat nu de Y-as)
     '.Chart.Axes(xlValue).TickLabelPosition = xlNextToAxis

                    .Chart.PlotArea.Width = 332                 'wijdte van de plotarea (komt overeen met de niet gebruikte 2e Y-as)
                    .Chart.FullSeriesCollection(9).DataLabels.Position = xlLabelPositionLeft     'labels van de 9e reeks links van de punten
                    .Top = (i - 1) * H
                    With ChtObj.Chart
                         For j = 2 To 9
                              With .FullSeriesCollection(j).DataLabels.Format.TextFrame2.TextRange.Font
                                   .Size = 8
                              End With
                         Next
                         .Axes(xlValue).AxisTitle.Font.Size = 9
                         .ChartTitle.Font.Size = 8
                    End With
               End With
          Next i

     Next

     Application.ScreenUpdating = True
End Sub
 
als je nog niets gewijzigd had aan die macro, dan is deze oké.
Verder heb ik niet gekeken wat die macro precies doet
Code:
Sub tweegrfnperpagina()
     'test programma

     Dim W As Long, H As Long, MijnGrafieken
     Dim ChtObj As ChartObject
     Dim i, j  As Long
     Application.ScreenUpdating = False

     '2 grafieken op 1 pagina
     Sheets("Grafieken").PageSetup.Orientation = xlPortrait
    [COLOR="#FF0000"] MijnGrafieken = [transpose(TBL_TLC)]                       'tabel met grafieken in rijvolgorde
     For i = 1 To UBound(MijnGrafieken)
    [/COLOR]    [COLOR="#FF0000"]  With Sheets("grafieken").ChartObjects(MijnGrafieken(i))[/COLOR]
               H = 360
               .Width = 432
               .Height = H
               .Chart.Axes(xlValue).TickLabelPosition = xlNone  'geen labels tonen voor de Y-as, wordt straks door de 9e reeks ondervangen
               .Left = 0                                        'linkerhoek van het chartobject !!!
               .Chart.PlotArea.Left = 30                        'linkerkant van de plotarea (zonder de labels is dat nu de Y-as)
     '.Chart.Axes(xlValue).TickLabelPosition = xlNextToAxis
               .Chart.PlotArea.Width = 332                      'wijdte van de plotarea (komt overeen met de niet gebruikte 2e Y-as)
               .Chart.FullSeriesCollection(9).DataLabels.Position = xlLabelPositionLeft     'labels van de 9e reeks links van de punten
               .Top = (i - 1) * H
             [COLOR="#FF0000"]  With .Chart[/COLOR]
                    For j = 2 To 9
                         With .FullSeriesCollection(j).DataLabels.Format.TextFrame2.TextRange.Font
                              .Size = 8
                         End With
                    Next
                    .Axes(xlValue).AxisTitle.Font.Size = 9
                    .ChartTitle.Font.Size = 8
               End With
          End With
     Next
     Application.ScreenUpdating = True
End Sub
 
Laatst bewerkt:
Ik begin het steeds beter te begrijpen het index nr is idg 5 voor grafiek 1 en dan gaat het mis maar op rijnummer is het natuurlijk gewoon op volgorde van de tabel.
 
goed !

en als je dan bij herlezen alles dat bij elkaar hoort, bij elkaar zet, dan kan het ook hier een stuk korter en leesbaarder
Code:
Sub tweegrfnperpagina()
     'test programma

     Dim W As Long, H As Long, MijnGrafieken
     Dim ChtObj As ChartObject
     Dim i, j  As Long
     Application.ScreenUpdating = False

     '2 grafieken op 1 pagina
     Sheets("Grafieken").PageSetup.Orientation = xlPortrait
     MijnGrafieken = [transpose(TBL_TLC)]                       'tabel met tabel in rijvolgorde
     For i = 1 To UBound(MijnGrafieken)
          With Sheets("grafieken").ChartObjects(MijnGrafieken(i))
               H = 360
               .Width = 432
               .Height = H
               .Top = (i - 1) * H
               .Left = 0
               With .Chart
                    .Axes(xlValue).TickLabelPosition = xlNone   'geen labels tonen voor de Y-as, wordt straks door de 9e reeks ondervangen
                    .PlotArea.Left = 30                         'linkerkant van de plotarea (zonder de labels is dat nu de Y-as)
     '.Chart.Axes(xlValue).TickLabelPosition = xlNextToAxis
                    .PlotArea.Width = 332                       'wijdte van de plotarea (komt overeen met de niet gebruikte 2e Y-as)
                    .FullSeriesCollection(9).DataLabels.Position = xlLabelPositionLeft     'labels van de 9e reeks links van de punten
                    For j = 2 To 9
                         .FullSeriesCollection(j).DataLabels.Format.TextFrame2.TextRange.Font.Size = 8
                    Next
                    .Axes(xlValue).AxisTitle.Font.Size = 9
                    .ChartTitle.Font.Size = 8
               End With
          End With
     Next
     Application.ScreenUpdating = True
End Sub
 
Laatst bewerkt:
Mooi.

Is het mogelijk om de grafieken weer paginavullend te krijgen met de opties uit de module Weergave_grfn. 1 grafiek per pagina gaat prima, de andere opties niet meer. Ik kon eerst door de hoogte en de breedte te varieren de grafieken passend krijgen, maar ik krijg ze alleen nog aansluitend.
Code:
Sub tweegrfnperpagina()
     Dim W As Long, H As Long, MijnGrafieken
     Dim ChtObj As ChartObject
     Dim i, j  As Long
     Application.ScreenUpdating = False

     '2 grafieken op 1 pagina
     Sheets("Grafieken").PageSetup.Orientation = xlPortrait
     Sheets("Grafieken").Columns("I:K").Hidden = True
     MijnGrafieken = [transpose(TBL_TLC)]                       'tabel met tabel in rijvolgorde
     For i = 1 To UBound(MijnGrafieken)
          With Sheets("grafieken").ChartObjects(MijnGrafieken(i))
               H = 334
               .Width = 632
               .Height = H
               .Top = (i - 1) * H
               .Left = 0
               With .Chart
                    .Axes(xlValue).AxisTitle.Font.Size = 9
                    .ChartTitle.Font.Size = 8
                    .Axes(xlValue).TickLabelPosition = xlNone   'geen labels tonen voor de Y-as, wordt straks door de 9e reeks ondervangen
                    .PlotArea.Left = 30                         'linkerkant van de plotarea (zonder de labels is dat nu de Y-as)
                    .PlotArea.Width = 532                       'wijdte van de plotarea (komt overeen met de niet gebruikte 2e Y-as)
                    .FullSeriesCollection(9).DataLabels.Position = xlLabelPositionLeft     'labels van de 9e reeks links van de punten
                    For j = 2 To 9
                         .FullSeriesCollection(j).DataLabels.Format.TextFrame2.TextRange.Font.Size = 8
                    Next
               End With
          End With
     Next
     Application.ScreenUpdating = True
End Sub

Code:
Sub Print_grf()

     Dim n     As Integer
     Dim r     As Range
     Dim item As String, cCtrls As control

     For Each cCtrls In usGrafieken.Controls
          If TypeName(cCtrls) = "CheckBox" Then
               If cCtrls = True Then item = item & cCtrls.Name
          End If
     Next

     n = Right(item, 1)

     If n = 1 Then
          Set r = Sheets("Grafieken").[a1:N155]
     ElseIf n = 2 Then
          Set r = Sheets("Grafieken").[a1:d120]
     Else: Set r = Sheets("Grafieken").[a1: I48]
     End If
     r.PrintPreview
End Sub
 

Bijlagen

  • afronden numberformat v3.7.xlsm
    367,5 KB · Weergaven: 9
als ik het goed begrijp, wil je bij 1 grafiek die in landscape tonen en anders in portrait.
Daarnaast wil je de grafieken optimaliseren van grootte en daarom zit je van alles te doen/knoeien om 1 en ander op te rekken.

Ik probeer even een andere insteek met een camera (https://www.youtube.com/watch?v=_iDYa7UaD8s)
Dat kan dienen om een dashboard te maken, maar anders ook om hier een goede afdruk te maken.
De macro "MijnCamera" gevolgd door een cijfer doet het nodige werk.
Misschien moet je toch nog een beetje optimaliseren met de breedtes of hoogtes voor shapes 1 en 2
 

Bijlagen

  • afronden numberformat v3.7 (1).xlsm
    776,5 KB · Weergaven: 19
Mooi stukje programmeerwerk weer. Als ik het goed lees doe je toch hetzelfde als wat ik doe met de Width Height en Left. Alleen dat werkt niet meer doordat de functionaliteit van de Exceltabel:
Code:
MijnGrafieken = [transpose(TBL_TLC)]
blijkbaar anders werkt dan een directe verwijzing
Code:
For Each ChtObj In Sheets("Grafieken").ChartObjects
. Met de code die je nu hebt wordt alles vervormd. Ik denk dat ik het versimpel met 2 keuzes: 1 op landscape met alle gegevens naast de grafiek en met de optie shape 5 (5 grafieken op 1 pagina). Ik krijg het alleen niet voor elkaar met jou code en ook niet met de code die ik had (op de sheet komen de grafieken goed te staan in het afdrukvoorbeeld zijn ze heel erg klein en met de sub print_grf zijn ze iets groter maar ook nog te klein.
Code:
Sub Print_grf()

   Dim n       As Integer
   Dim r       As Range
   Dim item As String, cCtrls As control

   For Each cCtrls In usGrafieken.Controls
      If TypeName(cCtrls) = "CheckBox" Then
         If cCtrls = True Then item = item & cCtrls.Name
      End If
   Next

   n = Right(item, 1)

   If n = 1 Then
      Set r = Sheets("Grafieken").[a1:N155]
   ElseIf n = 2 Then
      Set r = Sheets("Grafieken").[a1:d120]
   Else: Set r = Sheets("Grafieken").[a1: I48]
   End If
   r.PrintPreview

End Sub
 
ik gooi de handdoek !
Als je met die checkboxes aan de gang gaat, dan ga je weer naar die 5 of 2 grafieken per blad en ga je met de breedtes en de hoogten spelen.
Mij niet gelaten, ik kan niet volgen.
Blijf toch van de layout van "grafieken" af, excel is een rekenprogramma, geen knutselprogramma.
Met camera kan je in realtime dashboards gaan maken en die aanpassen aan de noden.

Ik dacht dat je een zo duidelijk mogelijk en groot beeld wilde.
Door die grafieken en de legendes rechts los van elkaar in een camerabeeld te stoppen, kan je met beide breedtes gaan stoeien (=oprekken/samendrukken).
Enige beperking is dat de hoogten van beiden gelijk moeten zijn anders is eer een verschuiving tussen de grafieken en de legenden.

Dus met beide hoogten samen en de breedtes apart kan je gaan spelen om de vervorming binnen de perken te houden.
Eens je dat onder de knie hebt, eventueel kunnen die 3 maatvoeringen netjes in een tabel gestopt worden, mag je alles vragen.
Wil je bijvoorbeeld alleen een afdruk van 2 grafieken (bv. 2 en 4), dan is dat is een wip te regelen.
Grafieken 1, 3 en 5 verbergen en de camera vragen om 5 grafieken af te drukken

Soit.
 
Laatst bewerkt:
Het is allemaal prachtig wat je gemaakt hebt met die camera en het klopt dat het een zo duidelijk mogelijk en groot beeld moet zijn, ik snap er alleen geen snars van. Als ik het niet begrijp dan begrijpt de gebruiker het al helemaal niet. Het is niet de bedoeling dat de gebruiken van alles moet doen om iets uit te printen vandaar dat ik checkboxes gebruikt heb om het voor de gebruiken te vereenvoudigen. Je moet het zo zien soms zijn er 6 of 7 bestanden met 27 grafieken per bestand. Dan is het handig als je er 5 op 1 pagina uit kan printen. In andere gevallen wil je meer informatie uit een grafiek kunnen halen en dan is 1 grafiek per pagina ok.

Met Excel kun je rekenen maar ook knutselen, als ik echt alleen wil rekenen had ik het wel in MathLab gedaan. Ik hoop wel dat je die handdoek nog even vast houd want ik ben er bijna
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan