PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBAPattern stylePattern style
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2016-10-12 12:12
 

Hej!

Jag har en större excel-fil där data hämtas ifrån en databas och exporteras till Excel där grafer bildas. Färgen på de olika delarna av grafen styrs av en funktion där man fyller i en cell i ett annat worksheet och koden läser av det. Problemet är att koden endast fungerar så länge det är enfärgat, nu vill jag kunna använda mig av mönster, det vill säga välja Format Cell -> Fill -> Pattern style. Därför måste jag lägga till en rad i koden som säger att den ska färga grafen likadant som cellen även om den har valt en pattern style. Jag kopierar koden till den delen av funktionen som är relevant. Min teori är att man ska skriva Fullseriescollection(i) och bygga vidare på det på en ny rad längst ner på den första Else-stycket. Om mer av koden till hela funktionen behövs eller några frågor uppstår svarar jag direkt. 

 For i = 1 To serCount

                If i = serCount + 1 Then Exit For
                If .SeriesCollection(i).Name = "" Or inCollection(.SeriesCollection(i).Name, excludedCol) Then
                    .SeriesCollection(i).Delete
                    i = i - 1
                    serCount = serCount - 1
                Else
                    If inCollection(.SeriesCollection(i).Name, areaCol) Then
                        .FullSeriesCollection(i).ChartType = xlAreaStacked
                        .FullSeriesCollection(i).Format.Fill.ForeColor.rgb = _
                        getRGB(findInSub(setupAC, findInCategory(tables, _
                        Right(tbl.Name, Len(tbl.Name) - 3)).offset(0, 5), areaC, _
                        .SeriesCollection(i).Name))
 
                    Else
                       .FullSeriesCollection(i).ChartType = xlLineStacked
                       .FullSeriesCollection(i).Format.line.Weight = 2.5
                       .FullSeriesCollection(i).Format.line.ForeColor.rgb = _
                        getRGB(findInSub(setupLC, findInCategory(tables, _
                        Right(tbl.Name, Len(tbl.Name) - 3)).offset(0, 6), lineC, _
                        .SeriesCollection(i).Name))
                    End If
                End If
 
Hoppas det inte blev för rörigt. All hjälp uppskattas verkligen! Tack på förhand!

MVH, Johan
Nytt inlägg
 2016-10-13 09:56
 

 Hej hej

Ser ut som den behövs i båda else satserna. 

1. Pattern kräver en bakgrundsfärg, för detta kan du duplicera din kod:

.FullSeriesCollection(i).Format.Fill.ForeColor.rgb = _
                        getRGB(findInSub(setupAC, findInCategory(tables, _
                        Right(tbl.Name, Len(tbl.Name) - 3)).offset(0, 5), areaC, _
                        .SeriesCollection(i).Name))

Här behöver du byta ut .forecolor mot .backcolor, samt lägga till ett argument till getRGBfunktionen, e.g förgrund eller bakgrund, och skapa funktionalitet för detta i din getRGB. 

Enklast är nog att återanvända getRGB även för ditt mönster. byt ut .backcolor mot .patterned. och se till att getrgb stödjer även denna variant.

Ett alternativ är att "fuska" och koppla den direkt mot cellen: .FullSeriesCollection(i).Format.Fill.Patterned = sheets("dittblad").range("dincell").interior.pattern

Hoppas detta hjälper dig lite på traven. 

 

Nytt inlägg
 2016-10-13 11:58
 
 Ändrad av erikssonjohan222  på 2016-10-13 12:02:37

Hej! Tack för svar! 

Jag tror du är på rätt spår, har du något exempel på hur jag ska lägga till ett argument i getRGBfunktionen? Den ser ut såhär:

Public Function getRGB(rcell) As Long

 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'   getRGB - Takes the background colour of a cell and return a RGB value as a string

'

'       rcell - The cell which holds the background colour

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 

    Dim C As Long

    Dim r As Long

    Dim g As Long

    Dim b As Long

 

    C = rcell.Interior.Color

    r = C Mod 256

    g = C \ 256 Mod 256

    b = C \ 65536 Mod 256

    getRGB = rgb(r, g, b)

    

End Function

Kan du även specificera hur jag ska koppla den direkt mot cellen? Vart ska jag lägga in raden till exempel?

/ Johan

 

Nytt inlägg
 2016-10-13 12:00
 
 Ändrad av erikssonjohan222  på 2016-10-13 12:01:51
Dubbelpost

 

Nytt inlägg
 2016-10-13 14:16
 

 Lägga till ett argument till gör där du deklarerar din funktion:

Public function getRGB(rcell as range, myType as string) as long

 

Sedan behöver du bara lägga till lite runt   C = rcell.Interior.Color

If myType = "Förgrund" then

       C = rcell.interior.patterncolor

Else if mytype = "Bakgrund" then

       C = rcell.interior.color

Else if mytype = "Mönster" then

       C = rcell.interior.pattern

       getrgb = C

       end function

End if

Samt skicka in dina olika strängar, "Bakgrund", "Förgrund", "Mönster",när du kallar på getRGB.

Exempelvis:  getRGB(Sheets("Blad1").range("A2"), "Bakgrund")

/C

 

 

 

rcell fylls när du kallar på getrgb genom det som står inom paranteserna, där anropas ytterliggare funktioner som tillslut spottar ut en range där din cell finns. 

 

 

Nytt inlägg
 2016-10-13 14:46
 

Jag uppskattar all hjälp men är fortfarande lite osäker. Räcker det med att lägga till myType as string i getRGB-funktionens namn samt lägga till det där med If myType under  C = rcell.Interior.Color? 

Måste inget göras i koden jag skickade i första inlägget? Jag är inte jätteinsatt i kod själv utan måste bara få det att fungera med att kunna lägga till pattern style därifrån koden läser hur graferna ska se ut. En liten mer detaljerad sammanfattning hade varit guld värt :)

Nytt inlägg
 2016-10-14 07:45
 

 Hej Johan

Utan tillgång till din fil är det svårt att följa hela flödet, jag får istället gissa mig fram till vad det bör vara. När du nu önskar en fullständig lösning så tar detta lite för lång tid, det får isåfall bli en lösning per konsultbasis. Är detta önskvärt så kan du maila till Christian.hagglund@excelspecialisten.se. Annars önskar jag dig fortsatt lycka till :).

Mvh

Christian

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBAPattern stylePattern style

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter