[[20101026225917]] 『ファンクションキーでシートを選択したい』(dore) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ファンクションキーでシートを選択したい』(dore)

シートを頻繁に切り替えながら、作業をする必要があります。その際、片手しか使えなく、また、マウスも使いにくい状況です。

そこで、ファンクションキーのF1を押すことによりシート1が、F2でシート2、F3でシート3が選択される方法はあるでしょうか。

EXCEL2003でwindowsXPを使用しています。よろしくお願いします。


 いろいろな要望があるものですね。
 本来のファンクションキーは使えなくなりますし、シート数は3で固定して
 いますが

 Sub setKeys()
    Application.OnKey "{F1}", "ActiveWS1"
    Application.OnKey "{F2}", "ActiveWS2"
    Application.OnKey "{F3}", "ActiveWS3"
 End Sub

 Sub ActiveWS1()
    Worksheets(1).Activate
 End Sub

 Sub ActiveWS2()
    Worksheets(2).Activate
 End Sub

 Sub ActiveWS3()
    Worksheets(3).Activate
 End Sub

 を実行すればできるようになるかと思います。
 (Mook)

 私自身が忘れがちなのでメモ代わりに・・・
 シングルクォートでProcを囲むとOnKeyメソッドのProcに引数を渡す事が出来ますので参考までに。

  Sub setKeys()
    Application.OnKey "{F1}", "'ActiveWS 1'"
    Application.OnKey "{F2}", "'ActiveWS 2'"
    Application.OnKey "{F3}", "'ActiveWS 3'"
  End Sub

  Sub ActiveWS(i As Long)
    Worksheets(i).Activate
  End Sub

 あと、慣例として必要のないタイミングで終了を

  Sub delKeys()
    Application.OnKey "{F1}"
    Application.OnKey "{F2}"
    Application.OnKey "{F3}"
  End Sub

 (momo)

 momo さん、対策参考になりました。
 上記を反映した、修正案です。

 ファンクションキーでシート選択をしたいWorkbook の標準モジュールに
 '----------------------------------------------------
 Sub setKeys()
    Dim i
    On Error Resume Next
    For i = 1 To 12
        Application.OnKey "{F" & i & "}", "'ActiveWS " & i & "'"
    Next
    On Error GoTo 0
 End Sub

 '----------------------------------------------------
 Sub delKeys()
    Dim i
    On Error Resume Next
    For i = 1 To 12
        Application.OnKey "{F" & i & "}"
    Next
    On Error GoTo 0
 End Sub

 '----------------------------------------------------
 Sub ActiveWS(i As Long)
    If i <= Worksheets.Count Then
        Worksheets(i).Activate
    Else
        MsgBox "該当シートがありません。"
    End If
 End Sub
 '----------------------------------------------------

 ThisWorkbook モジュールに
 '----------------------------------------------------
 Private Sub Workbook_Activate()
    setKeys
 End Sub

 Private Sub Workbook_Deactivate()
    delKeys
 End Sub
 '----------------------------------------------------
 としてどうでしょうか。

 すべてのブックに処理を反映したいのであれば、 PERSONAL.xls の Workbook の Open と BeforeClose
 で呼ぶとよいかと思います。
 (Mook)


 そうですね、ループ処理が可能になりますね。
 最初の
 For i = 1 To 12
 を
 For i = 1 To Application.WorksheetFunction.Min(ThisWorkbook.Worksheets.Count, 12)
 にしておくと
 On Error Resume Next
 が必要なくなるかもしれませんね^^
 (momo)

 私もシートの数分と最初は思ったのですが、
 シートの追加や削除を想定して上記の仕様にしました。
 (Mook)

 >シートの追加や削除を想定して上記の仕様にしました。
 なるほど〜 良いエラートラップを教えて頂きました。

 (momo)

Mookさん、momoさんありがとうございました。

お二人の高度なやり取りに恐れ入りました。

おかげで業務の効率が上がりそうです。

重ねて御礼申し上げます。

(dore)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.