21. november 2007 - 15:21
Der 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
3) Gøre det hele dynamisk
23. november 2007 - 16:32
#3
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