Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


72314 / 76738 ←次へ | 前へ→

【8908】Re:指定位置のグラフ要素を取得するには・・・・・。
回答  ichinose  - 03/11/7(金) 21:55 -

引用なし
パスワード
   ▼イチロー さん:
こんばんは。

>これは、グラフシートのモジュールに貼り付けてください!と書いてあります
>が、自分は標準モジュールに貼り付けたいのです。
ご提示された Chart_MouseUpは、イベントプロシジャーですから、標準モジュールには
記述する事が出ません。
これは、クラスモジュールに記述する事で可能となります。
クラスモジュール(クラス名は、既定名のClass1にしておきます)に
'======================================================
Public WithEvents cht As Chart
'===================================================================
'↓以下のコードは、イチローさんがご提示されたコードをほんのちょっとだけ
'変更した内容です。

Private Sub cht_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
  Dim ElemID As Long, Arg1 As Long, Arg2 As Long
  Dim Var As Variant
  Dim Msg As String


  cht.GetChartElement x, y, ElemID, Arg1, Arg2
'  ↑このオブジェクト変数の変更
   Select Case ElemID '定数値の詳細はヘルプを参照
 
   Case xlSeries 'データ系列
     Var = cht.SeriesCollection(Arg1).XValues
     '   ↑このオブジェクト変数の変更

     Msg = "要素:" & Var(Arg2)
     Var = cht.SeriesCollection(Arg1).Values
     Msg = Msg & vbCrLf & "値:" & Var(Arg2)
     MsgBox Msg

   Case Else
  'その他の処理

   End Select

End Sub


次に標準モジュールに、
'======================================================
Public cht_class As Class1
'=====================================================
Sub main()
  
  Call サンプル作成(Sheets("Sheet1"))
  
  Charts.Add
  With ActiveChart
    .ChartType = xlColumnClustered
    .SetSourceData Source:=Sheets("Sheet1").Range("A1:B7"), PlotBy:= _
    xlColumns
    .Location Where:=xlLocationAsNewSheet
    .HasTitle = True
    .ChartTitle.Characters.Text = "身長(cm)"
    .Axes(xlCategory, xlPrimary).HasTitle = True
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "氏名"
    .Axes(xlValue, xlPrimary).HasTitle = False
  End With
  Set cht_class = New Class1
  Set cht_class.cht = ActiveChart
End Sub
'================================================================
Sub サンプル作成(sht As Worksheet)
  With sht
    .Range("a1:a7") = WorksheetFunction.Transpose(Array("氏名", "A", "B", "C", "D", "E", "F"))
    .Range("b1:b7") = WorksheetFunction.Transpose(Array("身長(cm)", 150, 160, 170, 180, 145, 155))
    End With
End Sub

としてみて下さい。
標準モジュールのMainを実行してみて下さい(Sheet1という名前のシートは作っておいて下さいね)。
チャートシートが作成されるはずですから、そこでイベントが実行されるかどうか
試してみて下さい。


>実際、グラフシートは始めは存在しないため、グラフシートのモジュールにプ
>ログラムを張ることが出来ません。VBAを実行する事でグラフシートを新規に
>作成し、そのグラフシートにおいてクリックして要素を読み込みたいのですが
>、標準モジュールに貼り付けても動作してくれません。
>何か良い方法は無いでしょうか?
>
>ごちゃごちゃしましたけどよろしくお願いします。
0 hits

【8886】指定位置のグラフ要素を取得するには・・・・・。 イチロー 03/11/7(金) 13:05 質問
【8904】Re:指定位置のグラフ要素を取得するには・・... kein 03/11/7(金) 21:35 発言
【8908】Re:指定位置のグラフ要素を取得するには・・... ichinose 03/11/7(金) 21:55 回答

72314 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free