2016-08-16 15 views
0

私は、選択したポイントのシリーズでXValueを見つけ出すためのより良い(よりきれいな)方法を探しています。ポイントは、ユーザによって(クリックすることによって)選択され、従って、インデックスは未知である。現在のメソッドは各ポイントをループし、名前が理論上は2つの異なるポイントで同じになる可能性があるため、あまりエレガントではない名前を比較します。ポイントオブジェクトからX値または値を見つけよう

XValuesは日付であり、2種類のグラフがあります。シリーズ名はデータテーブルにある日付であり、ポイントXValueはデータテーブルにある日付である。以下のコードはクラスモジュールからのものです。チャート内のデータが選択されると、データテーブルの対応する行も選択されます。

Option Explicit 
' Declare object of type "Chart" with events 
Public WithEvents EvtChart As Chart 
Private Sub EvtChart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long) 
    Dim d As Date, r As Range 
    If TypeOf Selection Is Series And IsDate(Selection.Name) Then 
     d = CDate(Selection.Name) 
    ElseIf TypeOf Selection Is Point Then 
     If IsDate(Selection.Parent.Name) Then 
      d = CDate(Selection.Parent.Name) 
     Else 
      Dim s As Series, p As Point, i As Long 
      Set s = Selection.Parent 
      Set p = Selection 
      For i = 1 To s.Points.Count 
       If p.Name = s.Points(i).Name Then 
        d = s.XValues(i) 
        Exit For 
       End If 
      Next 
     End If 
    Else 
     Exit Sub 
    End If 
    Set r = Range(Summary.Cells(HROW + 2, 1), Summary.Cells(1048576, 1).End(xlUp)).Find(d, , xlFormulas) 
    If Not r Is Nothing Then r.EntireRow.Select 
End Sub 
+0

設定された手順の写真を含めて、それらの写真でリクエストを伝えることはできますか? –

+0

私はあなたの質問を理解していません。これは、チャートに、このイベントを追加するものを除いて、全体のコードです:新CEventChartとして暗いclsEventChart サブInitEvents() 設定clsEventChart.EvtChart = Summary.ChartObjects(「DynChart」)にしてみ – j74nilsson

+0

End Subのチャート。あなたの質問を投稿する[この回答のように](http://stackoverflow.com/a/38949184/3397819) –

答えて

0

@alexricherが彼のコメントで指摘したように、Arg2は必要なインデックスを提供します。改訂されたコードは次のようになります

Option Explicit 
' Declare object of type "Chart" with events 
Public WithEvents EvtChart As Chart 
Private Sub EvtChart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long) 
    Dim d As Date, r As Range 
    If TypeOf Selection Is Series Then 
     If IsDate(Selection.Name) Then d = CDate(Selection.Name) 
    ElseIf TypeOf Selection Is Point Then 
     If IsDate(Selection.Parent.Name) Then 
      d = CDate(Selection.Parent.Name) 
     Else 
      Dim s As Series 
      Set s = Selection.Parent 
      d = s.XValues(Arg2) 
     End If 
    Else 
     Exit Sub 
    End If 
    Set r = Range(Summary.Cells(HROW + 2, 1), Summary.Cells(1048576, 1).End(xlUp)).Find(d, , xlFormulas) 
    If Not r Is Nothing Then r.EntireRow.Select 
End Sub 

Iはまた、(例えば軸のような)別のグラフ要素が選択されている場合に実行時エラーを回避するIf TypeOf Selection Is Series Thenラインに小さな補正を行いました。

関連する問題