[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『グラフを選択時とアクティブセルについて』(ドカ)
あるセルを選択します。
その後、グラフを選択します。
グラフを選択しておいて、そのグラフを操作するマクロを走らせます。
その時に、あらかじめ選択しておいたセルのデータを使いたいのですが、どうすれば良いのでしょうか?
グラフを選択した時点で、ActiveCellを認識してくれないようなのです。
Excel2003、 Win7にて
>グラフを選択しておいて、そのグラフを操作するマクロを走らせます。 >グラフを選択した時点で、ActiveCellを認識してくれないようなのです。
多分、書き方と言うかやり方がダメなんだと思います。
今さら気づいたのだけれど、例えばコードの中で、
ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.ChartArea.Select MsgBox ActiveCell.Address
てな事をやってませんか?
>グラフを選択しておいて この手順がいまいち伝わらないのでなんともいえないのだけれど。 手動で選択するのであれば、アクティブセルを認識すると思いますよ。 BJ
あるセルを手動で選択します。
その後、手動でグラフを選択します。
グラフを選択しておいて、そのグラフを操作するマクロを走らせます。
その時に、あらかじめ選択しておいたセルのデータを使いたいのですが、どうすれば良いのでしょうか?
という質問です。
そして、こうすれば出来るのかなということを思いつきましたが、コードではどう書けばよいか分からないので教えてください。
マクロを走らせたときに、選択されているグラフの認識N0?を覚えておきます。
そして、選んだグラフをマクロ上で一旦選択してない状態にします。
(手動であればESCキーを押すことと同じ)
そうするとセルがアクティブになるので、アクティブになっているセルを認識します。
(Set ○=ActiveCell)
そして、また、最初に覚えておいた認識NoのグラフをActive状態にします。
(ドカ)
基本的にグラフは自分自身では使わないので詳しくないけど ・シート上に適当なグラフを作成し ・どこかのセルを選択し ・そのあと、グラフを選択し
この状態で、以下を走らせると、選択されていたセルは認識できているけど?
Sub test() MsgBox ActiveCell.Address MsgBox TypeName(Selection) End Sub
(ぶらっと)
ぶつかり
>あるセルを手動で選択します。 >その後、手動でグラフを選択します。 この手順なら、ActiveCellを認識しますよ。 この後、マクロでグラフを選択して色々手を加えようとしている事がまずいと思います。 グラフをいちいち選択しないと変更できないものもあったと思うので、 この辺は断言できないけれども。 アクティブセルを取得するタイミングの問題かと思いもしますけど? 最初にアドレスを覚えておくなり、変数にセットしておけば良いんじゃないですか? >(Set ○=ActiveCell) BJ
事前に確認したつもりでしたが、やっちまったか!!
と思いながら、提示されたコードを実行してみましたが、
オブジェクトの変数またはWITHブロック変数が設定されていません。とエラーメッセージが出てしまいます。
(ドカ)
こちらではアクティブセルのアドレスが表示されるけど? 2010だけど。
そちらでエラーが出たコードは MsgBox ActiveCell.Address ここ?
いずれにしても、不思議だねぇ・・・・
(ぶらっと)
別の板だけど
http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200910/09100107.txt
こんなのがあった。ドカさんは2003ということだけど、いちど試してみたらいかが?
(ぶらっと)
そちらでエラーが出たコードは MsgBox ActiveCell.Address ここ? そうです。ここでエラーが出ます。
win7+office2010とXP+office2000でもエラーがでます。
紹介されたサイトの方法で解決しました。
Sub test() ActiveWorkbook.Activate ←これ追加で解決しました。
MsgBox ActiveCell.Address MsgBox TypeName(Selection) End Sub
debug.print activewindow.caption
2003と2010では挙動が違うようですね
WIN7+2010では、うまく行きました。
WIN7+2003では、うまく行きません。
2003では、どうすれば良いのでしょうか?
ドカ
>debug.print activewindow.caption これが問題なら、
Sub test() With ActiveSheet With .ChartObjects(1) '実際のチャートオブジェクト .Activate .Chart.ChartArea.Select End With End With MsgBox "ok" ActiveWindow.Visible = False MsgBox ActiveCell.Address End Sub
ichinose
どんなときエラーになるかは、↓を試せばなんとなく理解できそうです。 セルを選択した状態でステップ実行してみてください。
Sub test1() ActiveSheet.ChartObjects(1).Select MsgBox ActiveChart.Name MsgBox ActiveWindow.Caption ActiveChart.ChartArea.Select 'ここでエラー End Sub
Sub test2() ActiveSheet.ChartObjects(1).Activate MsgBox ActiveChart.Name MsgBox ActiveWindow.Caption ActiveChart.ChartArea.Select End Sub
セルを選択して、グラフも選択して、その状態で実行ということの必要性というか、 それがあるから、そういう処理コードにしているんだろうね。 複数のグラフがあって、処理するグラフと、それに関するセルは、操作者に「任意に選ばせる」ために。
もし、そうじゃなく、セルもグラフも特定できるなら、「選択」という状態に頼らないコードにすれば、なんとでもなるもんね。
なので「必要なんだ」という前提で。
当方、win7 + 2003 という環境がないので、そこでどうなるかはわからないけど XP + 2003 および Win7 + 2010 双方で、以下のコードで問題なく同じ結果になるので、 Win7 + 2010 では、本来、不要であっても、コードとしては、共通のコードでいけるのでは?
Sub Test() ActiveWorkbook.Activate MsgBox TypeName(Selection) MsgBox ActiveCell.Address End Sub
(ぶらっと)
というこで動作が安定していない気がします。
バージョンも色々あって、動作が不安定なので、何がうまくいって、何がいかないのかもわからなくなった状況です。
また、最初に手動でグラフを選んだ場合とコードから選んだ時では、挙動が違う気もします。
また、明日確認して、報告します。
ドカ
朝、落ち着いて確認してみました。
下記コードは、動きます。
Sub test() ActiveWorkbook.Activate ’←これ追加で解決しました。
MsgBox ActiveCell.Address MsgBox TypeName(Selection) End Sub
手動でグラフを選んでおくと、グラフの周りに■のマークが付きます。
しかし、上のコードを動かすと、周りのマークが□に変わります。
この状態で、上のマクロを動かすとエラーになります。
これに気づかなかったため、動いたり動かなかったりすると勘違いしていました。
ということで、これでセルの情報を取得することは出来そうです。
一方で今度はグラフを手動で選んだ状態に戻したいので(■マークにしたい)、上のマクロを動かした後に、手動でグラフを選んだ状態に戻すコードを教えてください。
よろしくお願いいたします。
office2010は、ActiveWorkbook.Activateが無くても動きました。
(補足情報)
マクロの作動中に、セルを選んだり、グラフを選んだりするのは、実際やって見て大変面倒でした。
1回走らせるのなら良いのですが、その結果をみてデータの修正をするなど、何度も走らせるのは面倒です。
そのために、最初にこのセルのデータを使って、このグラフを修正しろと選んでおいて、マクロを動かようにしたいのです。
また、決まったフォームのエクセルファイルではなくても動くように、セルとグラフを手動で選択するようにしています。
ドカ
> 一方で今度はグラフを手動で選んだ状態に戻したいので
釈迦に説法ですが、グラフは選択しなくても処理できます。 選択してから処理しようとするからムツカシクなってるのでは?
(kanabun)
>選択してから処理しようとするからムツカシクなってるのでは? 多分これが1番の問題かと思いますけど データにしたいセル範囲を選んでコピー。 グラフに貼り付け。 の手動で良いんじゃないかと?? BJ
ということで、以下のように対処して問題なく動くようになりました。
変更前)With Selection
変更後)With ActiveChart.SeriesCollection(1).Points(n)
(う〜ん、でも、どうすれば、もう一度選択した状態に戻せるのでしょうかねぇ)
ドカ
私も含めて、皆さんが【暗に】指摘というか心配(?)している「選択」。 この必要性があってのことだろうけど、その必要性というか理由を説明すれば、皆さん、その方向で 回答をアップしてくれると思う。
それがないので、【だからSelect/Selectionを使わなきゃいいでしょ?】という回答以上のことを 一生懸命考える気力がわいてこないねぇ。
(ぶらっと)
セルとグラフを最初に選択しておく理由は、4つ位前に書きました。
そして、オリジナルのコードがselectinを使っていたのと、私にselectionを使わないコードの知識がないため、選択する方法をお聞きしました。
現時点では、不具合は解決しましたので、選択する必要はありません。
最後の質問で、選択状態に戻したいと言っているのは、単なる興味本位です。
ドカ
マクロ以前に選択するのは 「グラフの系列のどれか」だけにしておいて、 マクロ実行途中で、セルを選択させてもいいのでは? たとえば↓
Sub try1() '■系列を選択しておく If TypeName(Selection) <> "Series" Then Exit Sub
'セル範囲を指定 Dim r As Range On Error Resume Next Set r = Application.InputBox("セル範囲を指定してください", Type:=8) On Error GoTo 0 If r Is Nothing Then Exit Sub
'指定範囲で 系列データを更新 Selection.Values = r.Value End Sub (kanabun)
提示頂いたコードのようにやっていたのを、あえて、最初にセルを選択しておく方法に変更したので、今回の質問に至っています。
その他回答いただいた皆さんへ
グラフに関する知識がないので、皆さんに色々ご迷惑をおかけしました。
一旦、解決・終了とさせていただきたいと思います。
(ドカ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.