|
▼ichinose さん:
おかげさまで一応完成させることが出来ました。
フォームにボタンを2つ作り(1.グラフ選択2.そのグラフに戻れる)、
最終的にこのようなプログラムになりました。
Option Explicit
Private WithEvents cht As Chart
Private Sub CommandButton1_Click()
Dim obj As Object
Set obj = Selection
Do Until TypeName(obj) = "ChartObject"
Set obj = obj.Parent
If TypeName(obj) = "Workbook" Then 'グラフに関係しないものが選択されている場合
Application.ScreenUpdating = True
MsgBox "グラフが正しく選択されていません"
Application.ScreenUpdating = True
Exit Sub
End If
Loop
Set cht = obj.Chart
If cht.HasTitle = True Then
chtName.Caption = cht.ChartTitle.Text
Else
chtName.Caption = "(" & cht.Name & ")"
End If
End Sub
Private Sub cht_BeforeDoubleClick(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long, Cancel As Boolean)
Dim a As Integer
Dim b As Integer
Dim aa As Integer
Dim bb As Integer
Dim x As Integer
Dim n As Long
Dim fml As String
Dim dCell As Range
If ElementID = xlSeries Then
If Arg2 > 0 Then
With cht.SeriesCollection(Arg1)
x = InStr(.Formula, "(") + 1
'nameとcategory_labelsの後ろの","から、valuesの先頭を取得
For n = 1 To 2
a = InStr(x, .Formula, ",") + 1
b = InStr(x, .Formula, "(")
If a > b And b <> 0 Then
x = InStr(x + 1, .Formula, ")") + 2
Else
x = a
End If
Next n
'valuesの最後尾を取得
aa = InStr(x, .Formula, ",")
bb = InStr(x, .Formula, "(")
If aa > bb And bb <> 0 Then
aa = InStr(x, .Formula, ")")
a = x + 1
End If
'valuesを取得(文字列)
fml = Mid(.Formula, a, aa - a)
n = 1
For Each dCell In Range(fml)
If n = Arg2 Then
dCell.Parent.Activate
dCell.Select
Exit For
End If
n = n + 1
Next dCell
End With
End If
Cancel = True
Else
Cancel = True
End If
End Sub
Private Sub CommandButton2_Click()
cht.Parent.Select
cht.Parent.Activate
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Set cht = Nothing
End Sub
ただ、気になるのが、
For Each dCell In Range(fml)
If n = Arg2 Then
dCell.Select
Exit For
End If
n = n + 1
Next dCell
の部分です。
Valuesデータ(変数fml)が「Sheet1!$A$1:$A$10,Sheet1!$A$21:$A$30」のような複数の範囲の時に
range(fml).item(Arg2)
range(fml).cells(Arg2)
等とすると、「Arg2=15」だとAddressは「$A$15」が返ってきてしまうのです。(僕にとっては不思議なのですが)
色々試した結果、「これでいいのか?」迷いつつも上記のようなプログラムとしました。
問題点、もしくはもっとスマートな方法があれば後学のためにもご教示いただけないでしょうか?
|
|