21. november 2007 - 15:21Der er
2 kommentarer og 1 løsning
Dynamisk plot fra excel
Hej Excel Eksperter og Guruer.
Jeg sidder pt. med en større opgave, da jeg godt kunne tænke mig at lave et dynamisk plot.
Med dynamisk plot, mener jeg et plot, hvor brugeren af arket vha. dynamisk genereret knapper kan tilføje og fjerne serier fra plottet.
Det hele skal foregå således - jeg har et stykke vba kode, som udfra antal søjler i et data-ark, genererer et plot med x antal serier = antal søjler i data-arket.
Da et plot med fx. 18 serier på, er helt uoverskueligt at se på, skal det være muligt med knapper på arket at slå disse til og fra enten som flueben eller en "pushdown" knap. (Dette skal helst foregå uden de store loadtider).
Andet problem er at generere knapperne, som skal være i antal de samme som plots og have navne efter serierne (og i sidste ende opstilles pænt under plottet).
1) Til at starte med - så lad os antage at der er 5 serier, så skal jeg have noget kode, der genererer 5 knapper med seriernes navne!
2) Derpå noget kode til hver knap der slår serien fra og til i plottet
Hvis der er nogen der er nysgerrige, så faldt jeg over denne dejlige "checkbox" kode - sådan noget man bare bliver helt varm om hjertet af :)
Sub AddCheckBoxes() On Error Resume Next Dim c As Range, myRange As Range Range("B7:D7").Select Set myRange = Selection For Each c In myRange.Cells ActiveSheet.CheckBoxes.Add(c.Left, c.Top, c.Width, c.Height).Select With Selection .LinkedCell = c(-3, 1).Address .Characters.Text = "" .Name = c.Cells(-5, 1).Address End With c.Cells(-3, 1).Select With Selection .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, _ Formula1:="=" & c.Cells(-3, 1).Address & "=SAND" .FormatConditions(1).Font.ColorIndex = 3 'change for other color when ticked .FormatConditions(1).Interior.ColorIndex = 4 'change for other color when ticked .Font.ColorIndex = 5 'cell background color = White End With Next myRange.Select End Sub
Sub TurnOnCheckboxesSelection() On Error Resume Next Dim cb As Shape, Cell As Range Range("B7:D7").Select For Each cb In ActiveSheet.Shapes Set Cell = Intersect(Selection, _ Range(cb.TopLeftCell.AddressLocal)) If Not Cell Is Nothing Then _ cb.ControlFormat.Value = xlOn Set Cell = Nothing Next End Sub
Sub TurnOffCheckboxesSelection() On Error Resume Next Dim cb As Shape, Cell As Range Range("B7:D7").Select For Each cb In ActiveSheet.Shapes Set Cell = Intersect(Selection, _ Range(cb.TopLeftCell.AddressLocal)) If Not Cell Is Nothing Then _ cb.ControlFormat.Value = xlOff Set Cell = Nothing Next End Sub
Sub RemoveCheckboxes() On Error Resume Next ActiveSheet.CheckBoxes.Delete Selection.FormatConditions.Delete End Sub
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.