Grafieken groter maken via VBA

Status
Niet open voor verdere reacties.

Dennisjuhh

Gebruiker
Lid geworden
30 jan 2014
Berichten
94
Beste Helpers,

Ik heb een marco gemaakt die automatisch een grafiek invoegt in excel. Nu krijg ik hem alleen niet automatisch groter gemaakt=( Iemand miss een tip? Of dat ik aan kan geven waar ik hem wil en welke cellen hij beslaat?

Hier het voorbeeld:

Bekijk bijlage voorbeeld.xlsm

Alvast bedankt!
 
Laatst bewerkt:
Hallo Dennisjuhh,

Je kunt eenvoudig een macro opnemen en je grafiek groter maken. Bekijk de opgenomen macro en probeer dit aan te passen.
Daar kom je vast uit!

gr Tom
 
Beste Tom,

dit heb ik al gedaan, maar dan staat er alleen maar graf.activate=(
 
Probeer het hier maar eens mee. Met de waarden kun je spelen uiteraard:
Code:
    With ActiveSheet.Shapes("Grafiek 3")
        .ScaleWidth 1.2395833333, msoFalse, msoScaleFromTopLeft
        .ScaleHeight 1.3784722222, msoFalse, msoScaleFromTopLeft
    End With
 
Laatst bewerkt:
Je moet de naam van de grafiek dynamisch ophalen, anders heb je een probleem later.
Code:
Sub Knop1_Klikken()
 Grafiek
End Sub

Code:
Function Grafiek()
Dim obj As Object
Dim chrt As Chart
Dim chrtName As String
    
    With ActiveSheet.Shapes
        .AddChart.Select
        Set chrt = ActiveChart
        With ActiveChart
            .ChartType = xlLineMarkers
            .SetSourceData Source:=Range("D6:G7")
            .SeriesCollection(1).Name = "=""Test"""
            .ApplyLayout (5)
            .Axes(xlValue, xlPrimary).AxisTitle.Text = "Test"
        End With
        chrtName = chrt.Name
    End With
    chrtName = Trim(Mid(chrtName, Len(ActiveSheet.Name) + 1, Len(chrtName) - (Len(ActiveSheet.Name))))
    ActiveSheet.Shapes(chrtName).ScaleHeight 1.5, msoFalse, msoScaleFromTopLeft
    ActiveSheet.Shapes(chrtName).ScaleWidth 1.5, msoFalse, msoScaleFromTopLeft
    
End Function
 
Oke top bedankt, het werkt! Alleen hij is nu groter maar staat nog niet op de juiste plaats. kan ik niet aangeven in VBA dat hij in de grafiek plaatst van B10 tot C10 ofzoiets. Of dat ik een specifieke plek aan kan geven waar hij terecht moet komen?
 
Locatie kun je doen als volgt:
Code:
ActiveSheet.Shapes(chrtName).Left = 10
ActiveSheet.Shapes(chrtName).Top = 10

Daarmee staat ie redelijk mooi links boven.
Als je het specifiek boven een cell wilt hebben kan het ook met verwijzing daar naar toe:
Code:
ActiveSheet.Shapes(chrtName).Left = activesheet.range("B10").left
ActiveSheet.Shapes(chrtName).Top = activesheet.range("B10").top
 
Nou kan ik misschien heel moeilijk doen maar dan heb ik nog 1 laatste vraag:D

Is het ook mogelijk in VBA om de grootte van de grafiek te laten baseren op hoe groot een aantal cellen is? Ik heb dus een rij getallen staan in cel A1 tm A10. Soms zijn dit grote getallen, soms kleine. Als ik dus een standaard grootte instel staat dit lelijk als je kleine getallen hebt. Kan ik bijvoorbeeld de breedte opgeven o.b.v. hoe groot het bereik A1 tm A10 is?

erg bedankt!! Sorry ben beginnend VBA en doe mijn best om alles te zoeken op het forum!
 
Alles kan :)
Code:
Function Grafiek()
Dim obj As Object
Dim chrt As Chart
Dim chrtName As String
Dim iOri As Double, iNew As Double, iFactor As Double
Dim i As Integer

    With ActiveSheet.Shapes
        .AddChart.Select
        Set chrt = ActiveChart
        With ActiveChart
            .ChartType = xlLineMarkers
            .SetSourceData Source:=Range("D6:G7")
            .SeriesCollection(1).Name = "=""Test"""
            .ApplyLayout (5)
            .Axes(xlValue, xlPrimary).AxisTitle.Text = "Test"
        End With
        chrtName = chrt.Name
    End With
    chrtName = Trim(Mid(chrtName, Len(ActiveSheet.Name) + 1, Len(chrtName) - (Len(ActiveSheet.Name))))
    With ActiveSheet
        iOri = .Shapes(chrtName).Height
        For i = 10 To 19
            iNew = iNew + Cells(i, 1).Height
        Next i
        iFactor = iNew / iOri
        .Shapes(chrtName).ScaleHeight iFactor, msoFalse, msoScaleFromTopLeft
        .Shapes(chrtName).ScaleWidth iFactor, msoFalse, msoScaleFromTopLeft
        .Shapes(chrtName).Left = ActiveSheet.Range("B10").Left
        .Shapes(chrtName).Top = ActiveSheet.Range("B10").Top
    End With
End Function
 
Je gaf aan dat je de grafiek vanaf rij 10 wilde hebben (B10 om precies te zijn). Dus lijkt het mij logisch om de rijhoogte van de daaropvolgende 10 rijen te berekenen. Mag uiteraard ook anders worden. :)
 
Ah oke! Het was de bedoeling dat het in de breedte was! ik heb nu "height" vervangen door "Widt" maar dan mag volgens VBA niet=( suggesties:D?
 
Nou heb ik ook voor elkaar, zit alleen nog met die I te *****n nu. Hij moet berekenen wat de breedte is van cel D12 tot Q12. Wat moet ik nu bij I invullen?
 
Width is met een h... En i begint dan bij 12. Maar dat is het probleem natuurlijk niet. Je moet een andere cell aanspreken, want de 2 getallen staan voor rij en kolom. Nu varieert de code de rij.
 
Laatst bewerkt:
Beste Helpers,

Ik krijg bovenstaande maar niet voor elkaar. Ik krijg de grafiek niet even breed als de kolommen waar de brongegevens in staan. Kan iemand me helpen en kijken wat ik fout doe?

Alvast bedankt en hier het bestand!

Bekijk bijlage test.xlsm
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan