ロゴ(青) Excel/VBA Tips ロゴ(緑)

Tips24: Excel2013でエクセル終了時に空ウィンドウが残る

        ( 2016/3/24 : 初版 , 3/25〜27 : 過去事例 (3) 〜 (5) を追記 , 3/30 : 7 項を追記 , 4/4 : 8 項を追記 , 5/11 : 番外を追記 ) 
        ( 2016/6/7 : 9 項を追記 )

1. トラブル 発生
2. 過去事例の調査
3. 今回の症例の原因想定
4. 想定シナリオの検証テスト
5. 空 ウィンドウの回避方法
6. kt関数 リボンアタッチメント アドイン に対する対処
7. 条件追加で クラッシュ することも・・・
8. 真の原因は・・・
9.アドイン登録と読込順
(番外) オープン時に DoEvents を繰り返すアドインブック があると、ワークブック が ダブルクリックで開かない
        (この内容は、このページで取り扱っている不具合とは関係ありません)

2016/7/11  本件の KB が リリース されました。
[ KB 3157115 ]
Excel 2013 以降のバージョンで、複数のアドインが設定されている状態でファイルを開くと空白の Excel ウィンドウが表示される



[ この場所へのリンク ]

1.トラブル発生

先日、私が昔から公開している kt関数アドイン( xla / xlam 両形式があるが、共にメニューは旧来の
CommandBar
) というソフトに リボンUI を追加する kt関数リボンアタッチメント アドイン をリリース
しました。



暫くして、その kt関数リボンアタッチメント アドイン を使って貰っている Excel2013ユーザーから
「トラブル発生」の一報が…… 。 その内容が
  ( 注 ) この障害報告は Ver 1.10 時のものです。現在は対処を施した Ver 1.20 です。

  kt関数アドインだけ使っていた時には何も問題なかったが、リボンアタッチメント を一緒に
  使うようになってから 『空のウィンドウ』が残る ようになった。

  開いたワークブックの「閉じるボタン」だけではエクセルが終了せず、空ウィンドウ の「閉じる
  ボタン」もクリックしないとエクセルが終了しないので煩わしい。

  kt関数アドイン のみ or kt関数リボンアタッチメント のみ の場合には、このような不具合は
  発生しない。

  また、この症状(空ウィンドウが残る)が出るのは、
        [ ダブルクリック ] or [ 右クリックメニュー ⇒ 開く ]
  でワークブックを開いた場合に限り、
        [ プログラム ⇒ Excel2013 ] でエクセルを起動してから [ 開く ] コマンド
  でワークブックを開いた場合には、そのワークブックの閉じるボタンのクリックでエクセルが
  終了する(空ウィンドウが残る事はない)。
というものでした。

空のウィンドウ というのは、こういうものですね。


Excel2013 から SDI ( Single Document Interface ) になった為、個々のワークブックで其々にウィン
ドウができます。ワークブックひとつだけなら、そのウィンドウの「閉じるボタン」をクリックすれば、エク
セル自体も終了しますが、二つ以上だと其々の「閉じるボタン」を全部クリックして漸くエクセルが終了
します。

ユーザーが開いたワークブックのウィンドウの他に、どこからか降って湧いたような「空のウィンドウ」
ができているのであれば、原因はともかく、確かに両方の「閉じるボタン」をクリックしないとエクセル
が終了しないでしょう。

リボンアタッチメント アドインは単に リボンUI の定義を行なっているだけで、ワークブックに対して
何か処理を行なっているという事はありません。また、kt関数アドインを外して、リボンアタッチメント
のみにした場合には「空ウィンドウが残る」という事はないそうですので、やはり リボンアタッチメント
そのものに起因する障害ではないと判断できます。何か他の複合条件が重なった場合に限り発生
するような障害なのだろうと想定できます。

先ずは、ネット検索して、「空ウィンドウが残る」という不具合が報告されていないか調査です。


[ この場所へのリンク ]

2. 過去事例の調査

=== 過去事例 (1) ===
〜エクセル終了時に空ウィンドウが残る〜
この症状自体は昔(Excel2000当時)から質問に挙がっているみたいで、検索すると沢山
ヒットします。その原因/対策としては
      【 XLSTART の Personal.xls を消す/作り直す
というのが定番みたいです。


=== 過去事例 (2) ===
最近、Excel2013になってから、同じ症状ではありますが、(1)とは別原因
    【 Windows7 以降でのエクスプローラーでのプレビュー機能
に依るものも下記で報告されています(プレビュー機能を解除すれば症状が出なくなります)。
なお、下記記事によれば、MS報告済のようです。

    徒然草/EXCELが二重起動する(空のEXCELが起動する)

「エクスプローラーのプレビュー機能でエクセルワークブックの内容を閲覧できる」という事から、
直ぐにピンときました。以前、他のHPで読んだ記事に原因のヒントがあると!
    Excelでお仕事/Excel2013はどう変わったか
        " …… Excel2013では、手動で別インスタンスで立ち上げても
                      直ぐに、ひとつのタスクにまとめられてしまうらしい。…… "

二つの記事を合わせて読んでみれば、
        プレビュー用にバックグラウンドで立ち上がっている Excel タスクが、ユーザーの
        起動した Excel タスクに吸い込まれてひとつになるが、SDI のせいで別ウィンドウ
        として捕まってしまった。
という、原因らしきシナリオが見えて来ました。


=== 過去事例 (3) ===    ( 2016/3/25 追記 )
海外: MrExcel.com [ Excel 2013 Issue - Opening a worksheet, opens a new blank worksheet too ]
ここには、本件と同じ症例に関する レス も投稿されています。

Page2/ chuckgcs ( Jul 1st, 2015, 06:27 AM ) によるレス

  1. The blank-extra workbook only appears when Excel is started by double clicking
      an existing workbook file, NOT in a new workbook when Excel is started from
      the application shortcut.
  2. If the blank-extra workbook is closed first it also closes the other (real) workbook.
  3. The issue only occurs if ASAP Utilities is one of multiple Add-Ins that are enabled.
  4. The issue is NOT present if ASAP Utilities is the ONLY Add-In enabled.
  5. The issue is NOT present if ASAP Utilities is THE FIRST Add-In enabled of several.


発生条件については、後述で解説しているものと同じで核心
    ・ダブルクリックでオープン時のみ
    ・有効になっているアドインのひとつにASAP Utilities がある
    ・ASAP Utilities のみ有効の場合には起きない
    ・ASAP Utilities が有効アドインの先頭の場合には起きない
を突いていますが、'ASAP Utilities' という商用ソフト固有の問題という段階で終わっていますね。


=== 過去事例 (4) ===    ( 2016/3/26 追記 )
海外: Microsoft Answers [ Excel 2013 starts up with blank screen when opened from explorer ]
( February 28, 2013 to March 22, 2016 , and it is still active )

Page1/ Vijay A. Verma ( August 1, 2014 ) によるレス
  - Option 1 -
  Please look into C:\Users\User_Name\AppData\Roaming\Microsoft\Excel\XLSTART
  (replace user name with your user name) and see if is contains few files.
  Move those files to some other location (i.e create a backup of those files
  and delete all files from here). Hence, make XLSTART folder blank.

  - Option 2 -
  Few users have faced problem because of .xlb file.
  Go to C:\Users\User_Name\AppData\Roaming\Microsoft\Excel as in Option 1
  (This path is one level up of XLSTART) and change the extension of .xlb
  file(s) to omething else say .xlb1.
  Close Excel and restart Excel again.
  Your old .xlb file will be there in the folder so that in case you need it in future.

  - Option 3 -
  One user reported - I was also having this intermitttent issue and I found out
  that it is related to the Explorer preview pane.
  It only occurs if the preview pane is open and the xls file was never selected.
  Double clicking on the xls file opens 2 instances of excel (one empty).
  The second instance is probably the one used to show the file in the preview pane.
  Once the file have been seen at least once in the preview pane (during the current
  session) the issue does not occurs, anymore (until reboot and/or some time has
  elapse. I guess there is some sort of caching).
  TURN OFF THE PREVIEW PANE IN WINDOWS EXPLORER.
  If the preview pane is a must, you can right click and 'open' the document and
  not get the issue.

  - Option 4 -
  Look if in recent past, you had installed any Add-In.
  Disable that and see.
  To disable, File > Options > Add-Ins and you can manage Add-ins here.
  http://office.microsoft.com/en-us/support/why-cant-i-start-my-office-2013-application-HA104011864.aspx

一般的な解決策を一通り網羅していますね。
Option 1 & 2 : XLSTART
Option 3 : エクスプローラーのプレビュー機能
Option 4 : 何らかのアドインによる影響


=== 過去事例 (5) ===    ( 2016/3/27 追記 )
Microsft KB [ ダブルクリックでワークブックを開くと空ウィンドウが出るトラブルへの対処法 ( 原文 ) ]

一般的な解決策を一通り網羅しています。
  -- 方法 5: アドインをオフにする --
  使っているアドインを、ひとつずつ無効/有効にして不具合の発生を確認し、問題のあるアドインが
  見つかったら、そのアドインを取り外す。


=== 2016/7/11  本件の KB が リリース されました ===
[ KB 3157115 ]
Excel 2013 以降のバージョンで、複数のアドインが設定されている状態でファイルを開くと空白の Excel ウィンドウが表示される



[ この場所へのリンク ]

3. 今回の症例の原因想定

過去事例(2)の想定シナリオを考察している過程で、今回の症例についても、「原因シナリオとしては
充分にありえる」というものに思い至りました。 それは ・・・・
        kt関数アドイン で行なっている 【一時的なアドイン解除処理】


〜〜〜 アドイン解除が必要な訳 〜〜〜
kt関数には多くのサブルーチン・関数を収録しています(サブルーチン:16 , 関数:58)。これらの
関数には、関数挿入ダイアログ( fx ボタン ) で使い易いように、専用カテゴリへの収録 および 注釈
の設定
を行なっています。


その専用カテゴリへの収録 および 注釈の設定 を行なうマクロが Application.MacroOptions
メソッド
というものです。なお、MacroOptions メソッドは、アドインブックを開いた直後から設定済
となっているように、Workbook_Open イベントで行なう必要があります

この MacroOptions メソッド には、実行に際して、制約がひとつあります。それは、
      表示されている有効なワークシートが必要
というものです。ワークシートが表示されていない状態では「 fx ボタン が Un Enable となる」という
事から想像するに、『ワークシートが何も表示されていない状態では、関数群の管理オブジェクトに
アクセスできない』という理由があるものと推察できます。

ところが、アドインブック(アドイン属性 [ IsAddin=True ] を持つワークブック)では、ワークシートが
非表示
になります。また、アドイン登録されたアドインブックは、エクセル起動の際、通常ブックよりも
先に読み込まれます。

つまり、未だワークシートが何も表示されていない状態で、非表示ワークシートを持つアドインブック
が読み込まれる訳ですが、これでは、上記の制約に引っ掛かって、MacroOptions メソッドが実行時
エラーとなります。

これに対処するために、【一時的なアドイン解除】を行なって、MacroOptions メソッドの実行時点では
ワークシートが表示されているという状態を作り出しています(なお、それが視えてしまっては拙いので
ScreenUpdating で画面更新を止めています)。

  ---- ThisWorkbook モジュール ----
  Private Sub Workbook_Open()
      Application.ScreenUpdating = False    '画面更新の停止
      ThisWorkbook.IsAddin = False         'アドイン解除

      Application.MacroOptions _
          Macro:="TestFunc2a", _
          Description:="テスト関数。受けたものを、そのまま返すだけ", _
          Category:="NewCategory"

      ThisWorkbook.IsAddin = True          'アドイン復帰
      ThisWorkbook.Saved = True            '終了時の保存処理の回避
      Application.ScreenUpdating = True    '画面更新の再開
  End Sub



〜〜〜 一時的アドイン解除を要因とした想定シナリオ 〜〜〜
画面更新を止めていますので判らないでしょうが、アドインを解除したら何が起こるかというと……。
当然ですが、アドインブックのワークシートが表示されます

ここに SDI ( Single Document Interface ) が絡んできます。
(以下は私の個人的な想定です。真実かどうかは判りません)

  読込順が1番目のアドインブックで「一時的アドイン解除」を行なった場合
      ・ 先ずは、起動したエクセル本体のウィンドウができる。
      ・ 次に、アドインブックが、エクセルウィンドウのバックグラウンドで読み込まれる。
      ・ アドイン属性の解除によって、アドインブックがワークブックとしての独立ウィンドウを
        持とうとするが、未だエクセルウィンドウが空なので、そこに収容される。
      ・ アドイン復帰によって、再びバックグラウンドに戻り、エクセルウィンドウが空になる。
      ・ 通常ブックが読み込まれて、空いているエクセルウィンドウに収容される。
      ・ 通常ブックのウィンドウを閉じると、他にウィンドウが無いのでエクセルも共に終了する。

  読込順が2番目のアドインブックで「一時的アドイン解除」を行なった場合
      ・ 先ずは、起動したエクセル本体のウィンドウができる。
      ・ 次に、1番目のアドインブックが、エクセルウィンドウのバックグラウンドで読み込まれる。
      ・ 続けて、2番目のアドインブックが、エクセルウィンドウのバックグラウンドで読み込まれる。
      ・ アドイン属性の解除によって、2番目のアドインブックがワークブックとしての独立ウィン
        ドウを持とうとする。ここで、1番目のアドインが塞いでいるのか、未だ空の筈のエクセル
        ウィンドウには収容して貰えず、独立ウィンドウが立ち上がって、そこに収容される事と
        なる。
      ・ アドイン復帰によって、再びバックグラウンドに戻り、独立ウィンドウは空の状態になるが、
        そのウィンドウが何故か閉じられることなく残ってしまう
      ・ 通常ブックが読み込まれて、空いているエクセルウィンドウに収容される。この時、空の
        独立ウィンドウも依然として残っている。
      ・ 通常ブックのウィンドウを閉じると、残っていた空のウィンドウが前面に出て来る

  参考: §8. 真の原因は ・・・
 

ただし、この説明では納得できない部分もあります。
    ・ 上記の通りだとすると 「エクセルを起動してから、[開く] コマンドで通常ブックを開いた
      場合でも、空ウィンドウが残る筈です。
    ・ [ダブルクリック] or [右クリック+開く] でのみ症状が出て、[先にエクセルを起動] の場合
      には症状が出ないのはおかしい。
まぁ、その点に関しては目をつぶって(他に何かの要因があるのでしょう)、先ずは、
    アドイン解除 と アドインブックの読込順
の点について検証してみましょう。


[ この場所へのリンク ]

4. 想定シナリオの検証テスト

検証テスト用に以下のアドインブックを用意しました。
解凍後、各ファイルを[プロパティ/ブロック解除] した上でアドインフォルダに保存します。
      AddinTest1.xlam  …… MacroOptions 無し , IsAddin=False 無し
      AddinTest2a.xlam …… MacroOptions 有り , IsAddin=False 有り
      AddinTest2b.xlam …… MacroOptions 無し , IsAddin=False 有り
      AddinTest3.xlam  …… MacroOptions 無し , IsAddin=False 無し
      [ XL2013_EmptyWindowBug_Test.zip ]


 【 AddinTest1.xlam 】  ファイルのプロパティ/タイトル: AddinTest1

  ---- ThisWorkbook モジュール ----
  Private Sub Workbook_Open()
      Debug.Print "AddinTest1_Open " & Format(Now, "hh:mm:ss")
  End Sub

  ---- 標準モジュール ----
  Public Function TestFunc1(arg As Variant) As Variant
      TestFunc1 = arg
  End Function


  【 AddinTest2a.xlam 】  ファイルのプロパティ/タイトル: AddinTest2a

  ---- ThisWorkbook モジュール ----
  Private Sub Workbook_Open()
      Debug.Print "AddinTest2a_Open " & Format(Now, "hh:mm:ss")

      Application.ScreenUpdating = False
      ThisWorkbook.IsAddin = False

      Application.MacroOptions _
          Macro:="TestFunc2a", _
          Description:="テスト関数。受けたものを、そのまま返すだけ", _
          Category:="NewCategory"

      ThisWorkbook.IsAddin = True
      ThisWorkbook.Saved = True
      Application.ScreenUpdating = True
  End Sub

  ---- 標準モジュール ----
  Public Function TestFunc2a(arg As Variant) As Variant
      TestFunc2a = arg
  End Function



  【 AddinTest2b.xlam 】  ファイルのプロパティ/タイトル: AddinTest2b

  ---- ThisWorkbook モジュール ----
  Private Sub Workbook_Open()
      Debug.Print "AddinTest2b_Open " & Format(Now, "hh:mm:ss")

      Application.ScreenUpdating = False
      ThisWorkbook.IsAddin = False

      ThisWorkbook.IsAddin = True
      ThisWorkbook.Saved = True

      Application.ScreenUpdating = True
  End Sub

  ---- 標準モジュール ----
  Public Function TestFunc2b(arg As Variant) As Variant
      TestFunc2b = arg
  End Function



  【 AddinTest3.xlam 】  ファイルのプロパティ/タイトル: AddinTest3

  ---- ThisWorkbook モジュール ----
  Private Sub Workbook_Open()
      Debug.Print "AddinTest3_Open " & Format(Now, "hh:mm:ss")
  End Sub

  ---- 標準モジュール ----
  Public Function TestFunc3(arg As Variant) As Variant
      TestFunc3 = arg
  End Function


エクセル起動時のアドイン読込順が [ 1 ⇒ 2a ⇒ 2b ⇒ 3 ] となるように、ファイルのプロパティに
ある「タイトル」属性を上記の通りにしています。
(補) エクセル起動時のアドイン読込順は、アドインダイアログのリスト順です。この並びはファイルの
      プロパティ [タイトル] の順になります(タイトルが未記入の場合はファイル名)。
      例外事項がありますので、「9. アドイン登録と読込順」も参照の事



〜〜〜 テスト 手順 〜〜〜
( 1 ) 白紙の新規ブックを作成して保存します(Book1.xlsx など)。
      エクセルで現在有効になっているアドインを全て解除する。

( 2 ) 以下の作業を ( 3 ) に書いた組み合わせでテストします。
      尚、テスト開始前に全てのアドインを解除してください。
      @ エクセルを起動し、指定のアドインのみ有効にして、エクセルを終了する。
          『A 〜 C』の後で白紙ブックの他に空ウィンドウが出来ていないか確認する。
          (注) アドイン登録は、前回使用したアドインを全て解除し、エクセル終了/
                 再起動の後で行なって下さい( 9. アドイン登録と読込順 参照 )。
      A 白紙ブックをダブルクリックで開く。
      B 白紙ブックを[右クリック/開く]で開く。
      C エクセルを起動してから「開く」コマンドで白紙ブックを開く。

( 3 ) アドインの組み合わせ
      ( a ) AddinTest1 のみ
      ( b ) AddinTest2a のみ
      ( c ) AddinTest2b のみ

  --- MacroOptions/IsAddin=False 無し同士を2つ ---
      ( d ) AddinTest1 と AddinTest3

  --- MacroOptions/IsAddin=False 無し と 有り ---
      ( e ) AddinTest1 と AddinTest2a
      ( f ) AddinTest2a と AddinTest3

  --- MacroOptions/IsAddin=False 無し と IsAddin=Falseのみ有り ---
      ( g ) AddinTest1 と AddinTest2b
      ( h ) AddinTest2b と AddinTest3

      ( e ) vs ( f ) および ( g ) vs ( h ) は読込順の違いによる影響の確認です。

      ( e ) & ( f ) vs ( g ) & ( h ) は MacroOptions に起因するのかの確認です。
      ( IsAddin = False のみが原因か否か )

( 4 ) Excel コミュニティの方々に協力して貰ってテストした結果が下記になります。
      (空ウィンドウの有無)
    ( a ) : A 無    B 無    C 無
    ( b ) : A 無    B 無    C 無
    ( c ) : A 無    B 無    C 無
    ( d ) : A 無    B 無    C 無
    ( e ) : A     B     C 無
    ( f ) : A 無    B 無    C 無
    ( g ) : A     B     C 無
    ( h ) : A 無    B 無    C 無

    --- 空ウィンドウの発生条件 ( 結論 ) ---
      ・ エクセルに、2つ以上のアドインが登録されている。
      ・ アドインブックのオープン順で、2つ目以降のアドインに『IsAddin プロパティの一時解除』
        処理が組み込まれている。
      ・ MacroOptions メソッド自体 は不具合の発生条件ではない。
      ・ ダブルクリック または 右クリック/開く でワークブックを開く場合に限る。


[ この場所へのリンク ]

5. 空ウィンドウの回避方法

このテストに限れば ( e ) ( g ) ケースでの空ウィンドウ発生を回避する方法はあります。
    ( e ) AddinTest1 と AddinTest2a
    ( g ) AddinTest1 と AddinTest2b

前述したように、エクセル起動時にアドインが読み込まれる順番はアドインダイアログのリスト順です。
例外事項がありますので、「9. アドイン登録と読込順」も参照の事
そして、アドインダイアログのリストは、ファイルのプロパティにある「タイトル」(未記入の場合は
ファイル名)の大小順で並んでいます。

AddinTest2a.xlam / AddinTest2b.xlam の プロパティ/タイトルは、各々
      "AddinTest2a" / "AddinTest2b"
になっています。 これは "AddinTest1" の後になりますので、AddinTest2a.xlam /AddinTest2b.xlam
は2番目に読み込まれ、その結果として空ウィンドウが出ます。

エクスプローラーにて、AddinTest2a.xlam / AddinTest2b.xlam のファイルのプロパティ [タイトル] を
下記 ( t と 2 の間に空白を挿入)のように変更します。
      "AddinTest2a" ⇒ "AddinTest 2a"
      "AddinTest2b" ⇒ "AddinTest 2b"
この変更によって大小順が入れ替わるので、AddinTest2a.xlam / AddinTest2b.xlam の読込順が
1番目
となり、その結果として空ウィンドウが出なくなります


しかし、この方法で不具合回避を試みても、
      ・ 将来、他のアドインが追加された際に、その追加されたアドインが1番目になる
      ・ [ IsAddin = False ] 処理を持つアドインが他にも有る(計 2つ以上)
という場合には、再び空ウィンドウが出る不具合が再現してしまいます。

今回の再現テストで言えば、AddinTest2a と AddinTest2b の2つ共をアドイン登録する事です。
この場合、如何なる方法でも不具合を回避できません( 2a / 2b の何れかが2番目以降になる為)。

故に、この方法は完全な回避方法とはいえません。

私自身、[ IsAddin = False ] 処理を持つ 『kt関数アドイン』 & 『kt電話郵便アドイン』 という 2つの
アドインを公開しています。この2つとも使っていれば不具合の回避はできない事になります。


[ この場所へのリンク ]

6. kt関数リボンアタッチメント アドイン に対する対処

kt関数リボンアタッチメント アドイン(Ver1.10)では、ファイルのプロパティ「タイトル」の内容を
    "kt関数 リボン アタッチメント(Ver1.10)"    [ 数 と リ ]  [ ン と ア ] の間に半角空白
としていました。

これが、kt関数アドインの「タイトル」 "kt関数Addin" と比べると
    "kt関数 リボン アタッチメント(Ver1.10)"
    "kt関数Addin"
の順になる為に kt関数アドインが2番目になり、結果として 空ウィンドウ が出ました。

今回、「タイトル」から半角空白を除いた "kt関数リボンアタッチメント(Ver1.20)" に修正して
再リリース( Ver1.20 , 機能変更は無し )しました。これにより
    "kt関数Addin"
    "kt関数リボンアタッチメント(Ver1.20)"
の順となるので、この2つのみを使っている限りにおいては、空ウィンドウが出る事はありません。
例外事項がありますので、「9. アドイン登録と読込順」も参照の事


[ この場所へのリンク ]

  残念ながら、完全な障害回避は、Excel2013自体の改修がなされない限りは不可能です。


  現時点で、唯一確実な [ 空ウィンドウ ] の回避方法は、エクセルを起動してから
  [ メニュー / 開く ] でワークブックを開く ことです。


      下記の技術文書に記載されている方法で 「 /e スイッチ を持つ ショートカット 」 を作成すれば、
      起動画面および空白ワークブック を表示せずに Excel2013 を起動することができます。
      また、クイックアクセスツールバー に [ 開く ] コマンド を組み込んでおけば、いちいち バックステージ
      ビュー( ファイル タブ ) を開く手間も無くなります。
          Excel の コマンド ライン スイッチ  ,  クイック アクセス ツールバーをカスタマイズする

       


本件は、2016/3/25 に Microsoft テクニカルサポート へ報告済みです。


[ この場所へのリンク ]

7. 条件追加で クラッシュ することも ・・・   ( 2016/3/30 追記 )

「空ウィンドウが残る」という不具合のトリガーであると指摘した【IsAddin プロパティの一時解除】
ですが、そこに更に条件が加わると Excel がクラッシュ するという報告が挙がっています。
      -- Microsoft Answers --
      Excel 2013でシートを保護したアドインの IsAddin プロパティ を False にすると Excel が動作停止する

これも、障害原因の根っこの部分は同じでしょう。
当然、このケースでも空ウィンドウが出来る筈ですが、別ウィンドウを作成してアドインブックのシート
を表示しようとした過程のどこかで『シート保護』が邪魔をして異常を生じさせたのでしょう。

(補) kt関数アドイン/kt関数リボンアタッチメントアドイン/kt電話郵便アドイン/ktMsgBoxアドイン
      ではアドインブックに『シート保護』は行なっていません。


[ この場所へのリンク ]

8. 真の原因は ・・・   ( 2016/4/4 追記 )

2016/7/11  本件の KB が リリース されました。
[ KB 3157115 ]
Excel 2013 以降のバージョンで、複数のアドインが設定されている状態でファイルを開くと空白の Excel ウィンドウが表示される



[ IsAddin = False ] の代わりに下記の処理(一時的なブックの追加)でも同じ症状が出るそうです。

  Private Sub Workbook_Open()
  Dim newbk As String
      Workbooks.Add
      newbk = ActiveWorkbook.Name
      Workbooks(newbk).Close
  End Sub


どちらの処理でも共通しているのは
    「SDI 環境下では、新しいウィンドウが作られて、そこにブックが表示される」
という事ですね。そして、その時に一緒に起きる事は
    ActiveWindow が切り替わる(新しく出来たウィンドウが前面に出る
という事です。

加えて【一時的】ですから、処理が終わったら直ぐに消しています(非表示 or 削除)。この時にも、
    ActiveWindow が切り替わる(元のウィンドウが前面に出る
となりますね。

この立て続けに要求される【ActiveWindow の遷移が、他の様々な条件とも合わさって、上手く
期待通りに機能していないようで、これが原因となって、本件の「空ウィンドウ」に限らず、様々な不
具合を起こしているようです。

簡単にアッサリと書きましたけど、これ実は大変な事です。

ActiveWindow の遷移 というのは、SDI の肝中の肝です。中核です。根っこです。

素人考えでも、こんなバグの直しなんて手を出したくありませんね。一度手を入れたら、その
直しがどこまで広がって行くのか怖くなります。「全部直し切った!」と思った傍から、隠れて
いた細〜い根っこが伸びた先の思わぬところの地面から、ニョキっと芽(バグ、デグレード)が
出て来そうです(いや、絶対に出る!)。

これはもう、一から(というかゼロから)作り直すくらいの気概でいかないと・・・
Excel2013 も既にSP1、更にはExcel2016までリリースされているのに未だに修正されてい
ないところからすると、このバグの修正は「待つだけ無駄」かもしれませんね。
『再設計され新しくなった Office202X 新登場』くらいまで待たないと駄目かも?  ┐('〜`;)┌


ということで、もう一度 提示します。これしかありません

  唯一確実な [ 空ウィンドウ ] の回避方法は、エクセルを起動してから
  [ メニュー / 開く ] でワークブックを開く ことです。


      下記の技術文書に記載されている方法で 「 /e スイッチ を持つ ショートカット 」 を作成すれば、
      起動画面および空白ワークブック を表示せずに Excel2013 を起動することができます。
      また、クイックアクセスツールバー に [ 開く ] コマンド を組み込んでおけば、いちいち バックステージ
      ビュー( ファイル タブ ) を開く手間も無くなります。
          Excel の コマンド ライン スイッチ  ,  クイック アクセス ツールバーをカスタマイズする

       



[ この場所へのリンク ]

9. アドイン登録と読込順   ( 2016/6/7 追記 )

前項までで、下図に示すルールでアドインが読み込まれると解説してきました。


調べ直したところ、以下のルールであると判明しました。

(1) アドインダイアログ内で一度に複数のアドインをチェックした場合、そのアドインに関しては
    「アドインダイアログの並び順」で読み込まれます。

(2) 同じエクセル起動中に、アドインダイアログを複数回開いて、その度に幾つかのアドインを
    チェックした場合、そのアドインに関しては「アドインダイアログの並び順」で読み込まれます。

(3) エクセル起動⇒アドインを1つ登録⇒エクセル終了/再起動⇒アドインを1つ登録⇒……
    という風に行なった場合、そのアドインに関しては「アドインダイアログの並びには関係なく、
    登録した順番」で読み込まれます。

    一般的な例をいえば
          昔、TEST.xlam をアドイン登録し、今日まで、ず〜っと使っており、
          今日新たに ABC.xlam をアドイン登録した
    というようなケースです。名前順では ABC.xlam ⇒ TEST.xlam ですが、この場合で読み込まれる
    順番は TEST.xlam ⇒ ABC.xlam となります。


したがって、kt関数リボンアタッチメント(Ver1.20) にて、プロパティ変更による障害回避策を
施しましたが、
    ・ kt関数リボンアタッチメント(Ver1.20) のみを先にアドイン登録
    ・ エクセルを再起動後に kt関数アドイン をアドイン登録
という手順でアドイン登録を行なうと、kt関数アドインが2番目になる為に、再び「空ウィンドウ」
の症状が現われます。




[ この場所へのリンク ]

( 番外 ) オープン時に DoEvents を繰り返すアドインブック があると、
          ワークブック が ダブルクリックで開かない
   ( 2016/5/11 追記 )

これは、本ページで解説している 「SDI 絡みで空ウィンドウが残る」という不具合とは関係ありません。

-- Microsoft Answers --
  .xlamのWorkbook_OpenでForループを使うと、
  エクスプローラーからの.xlsxダブルクリックでの起動に失敗する
  https://answers.microsoft.com/thread/04efc73d-4b67-4ada-886b-54a961d3b785

当初、上記スレッドが「本ページの不具合に似ている?」と思い回答したのですが、検証および調査を
行なった結果、
    アドインブックの Workbook_Open イベント内で、DoEvents を連続して複数回実行すると、
    通常ブックをダブルクリック(右クリック/開く も同様)で開く事が出来ず、エクセルの空ウィンドウ
    のみが立ち上がる
という異なる不具合に依るものでした。

尚、この不具合が発症する DoEvents の繰り返し回数は実行環境に依って異なります(「PCの性能」
・「バージョンごとのエクセル自体の起動時の負荷の違い」等)。

また、この不具合は Excel2000以来のもので、未だに(Excel2016でも)修正されていません。
KB414321 : DoEvents 関数が何度も実行されるとダブルクリックで Excel ファイルを開けない





 Home   Back Page   Next Page

ロゴ(ゴールド)   ロゴ(ゴールド)

角田 桂一 Mail:addinbox@h4.dion.ne.jp CopyRight(C) 2016 Allrights Reserved.