[[20181015160219]] 『エクセルのシート間の切り替え』(AA) ページの最後に飛ぶ

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

 

『エクセルのシート間の切り替え』(AA)

少し難しい質問になります。

現在、エクセルのシート間の切り替えをショートカットキーで行おうと思い、下記のマクロを作成しました。

thisworkbookに下記マクロを記述

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

  gstrLastSheet = Sh.Name

End Sub

標準モジュールに下記マクロを記述

Public gstrLastSheet As String

Sub GotoLastSheet()

  If gstrLastSheet <> "" Then
   Worksheets(gstrLastSheet).Activate
  End If
End Sub

標準モジュールに記載したマクロをショートカットキー(Ctrl+mなど)に登録

これにより、シートが非アクティベイトになった際にその名前を変数に格納し、ショーカットですぐそのシートに戻れるようになります。

要は、Alt+tabキーのエクセル間バージョンという感じです。

そこで質問ですが、これを個人用マクロブックに記述し、どのエクセルでも
このショートカットが使えるようにしたいのですが、どのように記述すればいいでしょうか。

< 使用 Excel:Excel2013、使用 OS:unknown >


私は好みではないのですが、個人用マクロブックを作成してみてはいかがでしょうか。
https://support.office.com/ja-jp/article/%E5%8D%98%E4%B8%80%E3%81%AE%E3%83%96%E3%83%83%E3%82%AF%E3%81%AB%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B-66c97ab3-11c2-44db-b021-ae005a9bc790
(???) 2018/10/15(月) 16:42

いえ、私が教えていただきたいのは、個人用マクロブックに記述するコードです。

(AA) 2018/10/15(月) 17:15


ご提示のコードで、思った通り動作しているのですよね?
ならばあとは、それを個人用マクロブックに書くだけと思うのですが、別に書き方の違いはありませんよ?
(???) 2018/10/15(月) 17:26

thisworkbook に記述する

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

  gstrLastSheet = Sh.Name

End Sub

はワークブックイベントなので、個人用マクロブックに記載してもうまくいかないと思うのですが。。
(AA) 2018/10/15(月) 17:32


なるほど、どう記述すれば…、との事だったので、個人用マクロブックが存在せずコーディングできないのが問題かと思っていました。

そうなると、確かに個人用マクロブックはアクティブなブックとは別なので、Workbook関係の命令を書いても、イベントが飛んできませんね。 難しい、とはそういう話でしたか…。 無理っぽい気がしますが、ちと考えてみます。
(???) 2018/10/15(月) 17:39


ありがとうございます。
なかなかこの辺りはウェブや本でも情報が少なくて苦戦しています。。

(AA) 2018/10/15(月) 17:45


完全に動くようにできるかは、標準モジュールの追加を試さないといけないので、実現方法を教えるだけの実験コードを書きます。(あとは頑張ってください…)

まず、「オプション」−「セキュリティセンター」−「セキュリティセンターの設定」の「マクロの設定」で、「VBAプロジェクト オブジェクトモデルへのアクセスを信頼する」にチェックを入れます。 マクロウィルスでも実行できるようになるので、実験だけにするか、見知らぬブックは絶対開かないようにするか、注意してください。

次に、個人用マクロブックの標準モジュールに、以下を張り付けてから、保存しておいてください。

 Sub AUTO_OPEN()
    Application.OnTime Now, "AddLine"
 End Sub

 Sub AddLine()
    With Application.VBE.VBProjects(2).VBComponents.Item("ThisWorkbook").CodeModule
        .InsertLines .CountOfLines + 1, "Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)"
        .InsertLines .CountOfLines + 1, "  gstrLastSheet = Sh.Name"
        .InsertLines .CountOfLines + 1, "End Sub"
    End With
 End Sub

これで、ブックを開く度に ThisWorkbook に対して、上記のコードを挿入するようになります。 ただし、このままでは既にコードがあっても追記してしまうので、この方法でいくなら、既にコードがあるかどうかのチェックも必要になると思います。(更に、(2)固定の部分も、PERSONAL.XLSを探すようにすべきかも)

後は同様に、標準モジュールにも共通変数定義とマクロを書き込めば良いでしょう。 ようは、マクロを書くマクロを書いてしまえばよい、という事です。
(???) 2018/10/15(月) 18:11


[[20090621183331]]『個人用マクロ』(たき)
  ↑
 そこのichinoseさんの回答を参考にしてみてください。

 私はここ10年間、個人用マクロブックを使ったことなく、
 テスト環境としても作る気が起きないので、参考情報だけです。m(__)m

 肝は、ここ
    ↓
 Private WithEvents app As Application

(半平太) 2018/10/15(月) 20:33


なるほど、私がクラスモジュールをあまり理解していないので骨が折れそうです。。。
ありがとうございました。
(AA) 2018/10/16(火) 11:59

 >私がクラスモジュールをあまり理解していないので骨が折れそうです。。。 

 ちょっと分からないですが、

 app(=Applicationオブジェクト)のイベントにSheetDeactivateがあるので、
 それで希望のイベントが拾えるんですけど・・

 いままでThisWorkbookでやってた事と同じですよ?

(半平太) 2018/10/16(火) 15:54


できました。
皆さんご協力ありがとうございました。

(AA) 2018/10/17(水) 17:05


コメント返信:

[ 一覧(最新更新順) ]


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