Symphysodon
Gebruiker
- Lid geworden
- 14 dec 2012
- Berichten
- 468
Beste forummers,
Ik heb een programma waarmee data inzichtelijk gemaakt wordt door middel grafieken. in die grafieken is het mogelijk een verticale markerlijn te plaatsen over een data punt. dit wordt geregeld met een MouseDown event
Dit heeft gewerkt maar werkt nu niet meer. Het ElementID krijg ik niet meer op 3, maar is 28 wat ik ook selecteer, waarbij Arg1 en Arg2 altijd 0 zijn. In het programma kunnen toevallig wel maximaal 27 grafieken aangemaakt worden.
De serie collection worden weergegeven in de tabel: TBL_TLC en toen de markerfunctie nog werkte werden de resultaten van een selectie weergegeven in de tabel: TBL_GrafiekEvents. Beide tabellen staan in de sheet: Grafieken.
De tabel: TBL-TLC wordt gevoed met de Sub EnableChartEvents
Deze code en zo ook de Sub: Vertel_het_een_keer (die ook in de MouseDown gebruikt wordt) staan in de module: ModuleEventsGrafieken.
Ik hoop dat iemand me kan helpen.
Mvg
Marco
Ik heb een programma waarmee data inzichtelijk gemaakt wordt door middel grafieken. in die grafieken is het mogelijk een verticale markerlijn te plaatsen over een data punt. dit wordt geregeld met een MouseDown event
Code:
Private Sub cht_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim ElementID As Long, Arg1 As Long, Arg2 As Long
Dim myX As Variant, myY As Double
With ActiveChart
' Pass x & y, return ElementID and Args
.GetChartElement x, y, ElementID, Arg1, Arg2
' MsgBox Arg1 & vbLf & Arg2 & vbLf & ElementID
' Did we click over a point or data label?
If ElementID = xlSeries Or ElementID = xlDataLabel Then
If Arg2 > 0 Then
' Extract x value from array of x values
myX = WorksheetFunction.Index _
(.SeriesCollection(Arg1).XValues, Arg2)
' Extract y value from array of y values
myY = WorksheetFunction.Index _
(.SeriesCollection(Arg1).Values, Arg2)
' MsgBox "In de klassemodule voor het verzamelen van de gegevens " & vbLf & vbLf & "Grafiek : " & .Name & vbLf & vbLf & "serienummer : " & Arg1 & vbLf & "serienaam : " & .SeriesCollection(Arg1).Name & vbLf & vbLf & "punt " & Arg2 & vbLf & "X-waarde : " & myX & vbLf & "Y-waarde : " & myY
MouseDownArr(0) = .Parent.Index
tlc = [transpose(TBL_TLC)]
MouseDownArr(1) = Filter([transpose(TBL_TLC)], "index_" & Format(MouseDownArr(0), "000"), 1, vbTextCompare)(0)
MouseDownArr(2) = Arg1
MouseDownArr(3) = .SeriesCollection(Arg1).Name
MouseDownArr(4) = Arg2
MouseDownArr(5) = myX
MouseDownArr(6) = myY
With Sheets("grafieken").ListObjects("TBL_GrafiekEvents")
r = Application.Match(MouseDownArr(1), tlc, 0)
If IsNumeric(r) Then .DataBodyRange.Cells(r, 1).Resize(, UBound(MouseDownArr) + 1).Value = MouseDownArr
End With
Vertel_het_een_keer
If Button = 2 And Arg1 = 1 Then 'rechtermuis op 1e serie
If IsNumeric(r) Then
Set c = Sheets("data").ListObjects(1).DataBodyRange.Columns(r + 3)
ThisWorkbook.Names.Add "Bart", c
c_row = Application.Small([transpose(if(bart<>"",row(bart),999))], Arg2)
With c.Cells(c_row - c.Row + 1).Offset(, 28) 'was 6
.Value = IIf(.Value = 1, 0, 1)
End With
Hoofdprogramma
End If
End If
End If
End If
End With
End Sub
Dit heeft gewerkt maar werkt nu niet meer. Het ElementID krijg ik niet meer op 3, maar is 28 wat ik ook selecteer, waarbij Arg1 en Arg2 altijd 0 zijn. In het programma kunnen toevallig wel maximaal 27 grafieken aangemaakt worden.
Code:
' Pass x & y, return ElementID and Args
.GetChartElement x, y, ElementID, Arg1, Arg2
De serie collection worden weergegeven in de tabel: TBL_TLC en toen de markerfunctie nog werkte werden de resultaten van een selectie weergegeven in de tabel: TBL_GrafiekEvents. Beide tabellen staan in de sheet: Grafieken.
De tabel: TBL-TLC wordt gevoed met de Sub EnableChartEvents
Code:
Sub EnableAllChartEvents()
'Bijhouden tabel TBL_TLC (kolom x)
Dim chtEvent As CChtEvt
Dim tempCht As ChartObject
Set gMyCharts = New Collection
bgrafieken = (ActiveSheet.Index = Sheets("Grafieken").Index) 'huidig werkblad is grafieken ?
If bgrafieken Then
Set LO = Sheets("Grafieken").ListObjects("TBL_TLC")
If LO.ListRows.Count Then LO.DataBodyRange.Delete
End If
For Each tempCht In ActiveSheet.ChartObjects
If bgrafieken Then
With tempCht
.Name = "Grafiek_" & Format(.TopLeftCell.Row, "0000") & "_Index_" & Format(.Index, "000") & "_" & .TopLeftCell.Address
LO.ListRows.Add.Range.Cells(1).Value = .Name
End With
End If
Set chtEvent = New CChtEvt
Set chtEvent.cht = tempCht.Chart
gMyCharts.Add chtEvent, CStr(gMyCharts.Count + 1)
Next
If bgrafieken Then LO.Range.Sort LO.Range.Range("A1"), Header:=xlYes
End Sub
Ik hoop dat iemand me kan helpen.
Mvg
Marco