Excel VBA質問箱 IV

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

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


6665 / 13644 ツリー ←次へ | 前へ→

【43791】アルファベット以外のショートカットキーは可能? こま 06/10/25(水) 21:38 質問[未読]
【43792】Re:アルファベット以外のショートカットキ... ぱっせんじゃー 06/10/25(水) 21:47 発言[未読]
【43884】何とか考えましたが、あと少し。 教えて... こま 06/10/27(金) 23:37 質問[未読]
【43889】Re:何とか考えましたが、あと少し。 教え... ichinose 06/10/28(土) 10:27 発言[未読]
【43894】ありがとうございます。でも、まだ、質問... こま 06/10/28(土) 17:29 質問[未読]
【43900】Re:ありがとうございます。でも、まだ、質... ichinose 06/10/28(土) 21:18 発言[未読]
【43909】クラスモジュールを使用した例 ichinose 06/10/29(日) 8:34 発言[未読]
【43912】ありがとうございました。 こま 06/10/29(日) 16:35 お礼[未読]

【43791】アルファベット以外のショートカットキー...
質問  こま  - 06/10/25(水) 21:38 -

引用なし
パスワード
   マクロ実行作業を、なるべくキーボードでやりたいと考えています。
 Ctrl+アルファベット
 Ctrl+Shift+アルファベット
ではなく、Ctrlに以下をプラスしたショートカットキーは可能でしょうか?
「1〜0」の数字
「F1」 などのファンクションキー
「→」 等の矢印

アルファベット以外を使用する方法が調べられず、御質問させていただきました。
よろしくお願いいたします。

【43792】Re:アルファベット以外のショートカット...
発言  ぱっせんじゃー  - 06/10/25(水) 21:47 -

引用なし
パスワード
   エクセル ショートカットキー
で検索すると、参考HPがたくさんヒット
します。

サイトによって見落としがあったりします
ので、いくつかのサイトを参考にしましょ
う。

自分なりに一覧表にすると便利ですよ。

一例です。

http://www.relief.jp/itnote/archives/000099.php

【43884】何とか考えましたが、あと少し。 教えて...
質問  こま  - 06/10/27(金) 23:37 -

引用なし
パスワード
   調査不足で申し訳ありませんでした。
以下、調べて考えた、実行できるようにはなったのですが、

「右スクロール」というプロージャを「Ctrl+→」で実行させたいのですが、
ワークブックを開いている時、常に作動するのではなく、
グラフ(ChartObject)をActiveにした時

  黒四角がグラフの四隅に現れる状態
  自動記録ですと下記の状態
   ActiveSheet.ChartObject("グラフ 1").Activate
   (グラフ名はグラフ1とは限りませんが・・・)

になった時だけ、ショートカットを有効にするにはどうしたら良いのでしょうか?
Workbook_Opneをどう変化させたらいいのか?
ここで思考ストップしてしまいました。
なにとぞよろしくお願いいたします。

-------------------------------------------
ThisWorkbookに

  Private Sub Workbook_Open
   ショートカットON
 end sub

標準モジュールに

 Sub ショートカットON()
    Application.Onkey "^{RIGHT}", "右スクロール"
 End Sub
-------------------------------------------

【43889】Re:何とか考えましたが、あと少し。 教...
発言  ichinose  - 06/10/28(土) 10:27 -

引用なし
パスワード
   ▼こま さん:
おはようございます。

>調査不足で申し訳ありませんでした。
>以下、調べて考えた、実行できるようにはなったのですが、
>
>「右スクロール」というプロージャを「Ctrl+→」で実行させたいのですが、
>ワークブックを開いている時、常に作動するのではなく、
>グラフ(ChartObject)をActiveにした時
>
>  黒四角がグラフの四隅に現れる状態
>  自動記録ですと下記の状態
>   ActiveSheet.ChartObject("グラフ 1").Activate
>   (グラフ名はグラフ1とは限りませんが・・・)
>
>になった時だけ、ショートカットを有効にするにはどうしたら良いのでしょうか?
>Workbook_Opneをどう変化させたらいいのか?


>
>-------------------------------------------
>ThisWorkbookに
>
>  Private Sub Workbook_Open
>   ショートカットON
>  end sub
>
>標準モジュールに
>
>  Sub ショートカットON()
>    Application.Onkey "^{RIGHT}", "右スクロール"
>  End Sub
この「ショートカットON」というプロシジャー実行後は、
Ctrl+→キーで「右スクロール」というプロシジャーが実行されるのですよね?
ならば・・・、
この「右スクロール」というプロシジャーの中で
選択されているオブジェクトがChartObjectか否かをチェックしたらいかがですか?


'============================
Sub 右スクロール()
  Dim sel As Object
  Dim retcode As Long
  retcode = 1
  Set sel = Selection
  Do Until TypeName(sel) = "Application"
    If TypeName(sel) = "ChartObject" Then
     retcode = 0
     Exit Do
     End If
    Set sel = sel.Parent
    Loop
  If retcode = 0 Then
    'ここに本来、Ctrl+→が押された時の処理コードを記述します
    MsgBox "ok"
    End If
End Sub

尚、上記では、Chartobjectの子オブジェクト(Axis、Legend、Gridlines等)
を選択してもChartObjectとみなして処理が実行されるようにしてありますが、
あくまでも外側を選択して時というならば、コードを変更してください。

【43894】ありがとうございます。でも、まだ、質問...
質問  こま  - 06/10/28(土) 17:29 -

引用なし
パスワード
   教えていただきありがとうございます。

今のコードですと、Ctrl+→キーが
Workbook_Openされた瞬間に、通常の使い方が出来なくなってしまいます。

●通常の作業中は、Ctrl+→キーで、
 有効行の一番右にセルが移動する機能を使いたい。
●グラフがActiveになった時だけ、Ctrl+→キーで、
 「右スクロール」とういプロージャを呼び出したい。

という使い分けが出来ないものかと悩んでいます。
実は「右スクロール」プロージャに種類がありまして、
現在は下のようになっています。
 1.グラフのX軸範囲の半分スクロールする  Ctrl+Alt+→
 2.グラフのX軸範囲の全部スクロールする  Shift+Ctrl+Alt+→
ただし、Shift+Ctrl+Altは操作性が悪い為、キーを減らしたい。
右スクロールですので、感性的に1.も2.も、→キーで対処したい。
でも、通常作業中は、Ctrl+→キーの機能は絶対捨てられない。

っで悩んでいます。
質問の連続で申し訳ありません。
もし分かりましたら、よろしくお願いいたします。


----------------------------------------------------
今現在も「右スクロール」のプロージャーの中で、
 If ActiveChart Is Nothing Then
  Exit Sub
 End If
というのを入れて、グラフが選択されているか否かは判断しております。

【43900】Re:ありがとうございます。でも、まだ、...
発言  ichinose  - 06/10/28(土) 21:18 -

引用なし
パスワード
   こんばんは。

こっちの方が簡単ですね!!
ならば、

>----------------------------------------------------
>今現在も「右スクロール」のプロージャーの中で、
> If ActiveChart Is Nothing Then
   ActiveCell.End(xlToRight).Select
> else
   'グラフ選択時の処理
> End If

としてみてはいかがですか?

他にもクラスモジュールを使ってChartオブジェクトの
イベントを拾う方法も考えられますが、上記で事足りるならば
これの方が確実ですよ!!

【43909】クラスモジュールを使用した例
発言  ichinose  - 06/10/29(日) 8:34 -

引用なし
パスワード
   おはようございます。
>他にもクラスモジュールを使ってChartオブジェクトの
>イベントを拾う方法も考えられますが、

仮にSheet1というシートにあるグラフ(グラフの名前はは何でもよいいです)
を例にコードを記述します。


クラスモジュール Class1 に

'===================================
Option Explicit
Public callingseq As String
Public WithEvents cht As Chart
'===================================
Private Sub cht_Activate()
  Application.OnKey "^{RIGHT}", callingseq
End Sub
'===================================
Private Sub cht_Deactivate()
  Application.OnKey "^{RIGHT}"
End Sub


Sheet1のシートモジュールに
'========================================================
Option Explicit
Private myclass() As Class1
'========================================================
Sub Worksheet_Activate()
'イベントモジュールは通常、Privateですが、
'ここは外部から呼ぶ出せるようにしておきます
  Dim cht As ChartObject
  Dim idx As Long
  If Me.ChartObjects.Count > 0 Then
    ReDim myclass(1 To Me.ChartObjects.Count)
    For Each cht In Me.ChartObjects
     Set myclass(idx + 1) = New Class1
     With myclass(idx + 1)
       Set .cht = cht.Chart
       .callingseq = "sheet1.右スクロール"
       End With
     idx = idx + 1
     Next
    End If
End Sub
'========================================================
Private Sub Worksheet_Deactivate()
  Erase myclass()
End Sub
Sub 右スクロール()
  MsgBox "ok scroll"
End Sub


最後にThisworkbookのモジュールに
'==================================================
Private Sub Workbook_Open()
  If ActiveSheet Is Worksheets("sheet1") Then
    Worksheets("sheet1").Worksheet_Activate
    End If
End Sub


として、一度保存して閉じた後、再度開いて確認してみてください。


>これの方が確実ですよ!!
と記述した意味も理解していただけるかもしれません。

【43912】ありがとうございました。
お礼  こま  - 06/10/29(日) 16:35 -

引用なし
パスワード
   >今現在も「右スクロール」のプロージャーの中で、
> If ActiveChart Is Nothing Then
   ActiveCell.End(xlToRight).Select
> else
   'グラフ選択時の処理
> End If

で目的の動作が出来ました。
ショートカットキーを起動させないようにするには?しか考えられませんで、
いろいろな角度から考えなくてはと思いました。

一つ前の方は、すぐには理解出来なさそうですので、
ゆっくり見たいと思います。

ありがとうございました。

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