Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2013)
CommandBars("WorkBook Tabs").ShowPopupがExcel2013以上でエラー
投稿日時: 18/12/03 00:11:47
投稿者: ヒロヒコ

いつもお世話になります。もう別の方法(ユーザーフォーム)で解決しているのですが、後学のためにご教示いただけたらと思います。
 
book1.xlsxがアクティブではない状態で以下のコードを実行するとApplication.CommandBars("WorkBook Tabs").ShowPopupの部分で実行時エラー('ShowPopメソッド'は失敗しました:'CommandBar'オブジェクト)になります。最初からbook1.xlsxをアクティブにしていればエラーは起きません。
なおこのエラーはExcel2010では発生せず、2013、2016のみで発生します。また、ステップイン(F8)でやればエラーになりません。
 
エラーを回避する何かよい方法はあるのでしょうか。
 

Sub シート選択()

    Workbooks("book1.xlsx").Activate

    Application.CommandBars("WorkBook Tabs").ShowPopup

    MsgBox ActiveSheet.Name

End Sub

回答
投稿日時: 18/12/03 11:01:14
投稿者: Abyss2

試してください。
 

Sub シート選択()
    Workbooks("book1.xlsx").Activate
    Application.OnTime Now, "myProc"
End Sub

Private Sub myProc(Optional ByVal RHS&)
    Application.CommandBars("WorkBook Tabs").ShowPopup
    MsgBox ActiveSheet.Name
End Sub

回答
投稿日時: 18/12/03 18:01:01
投稿者: 半平太

Abyss2 さんの案だと旨くいきますね。
 
それで解決なんでしょうけど、
不思議でしょうがないので、これを頼りにして、
              ↓
>ステップイン(F8)でやればエラーになりません
 
「DoEvents」を噛ます力技をやってみたところ、私の環境(Office365)だと
 3つ書いたら動いたです。(2つでは動かない事が多かった)
 
Sub シート選択()
    Workbooks("book1.xlsx").Activate
     
    DoEvents
    DoEvents
    DoEvents
     
    Application.CommandBars("WorkBook Tabs").ShowPopup
 
    MsgBox ActiveSheet.Name
End Sub
 
(ご参考まで、という事で・・)

投稿日時: 18/12/03 22:12:08
投稿者: ヒロヒコ

Abyss2さん
 
ありがとうございます。うまくいきました。恥ずかしながらApplication.OnTimeは知りませんでした。
Application.WaitもSleepもダメでどうすればいいのかわからなかったのですが、こんな手があったとは。

投稿日時: 18/12/03 22:26:08
投稿者: ヒロヒコ

半平太さん
 
ありがとうございます。実はDoEvents(1行だけ)は試してダメだったので「ハズレか」と思っていたのですが、複数書けばうまくいくとは思いもしませんでした。ちなみに私の環境(Windows7Pro、Excel2013とWindows8.1、Excel2013)では2行書けば何度やってもエラーになりませんでした。エクセルのバージョンが上がるほどエラーになりやすいんですかね。
 
あと1日ほどしたら閉じようと思います。

投稿日時: 18/12/04 22:44:55
投稿者: ヒロヒコ

Abyss2さん、半平太さん
 
ありがとうございました。勉強になりました。閉じます。