マクロ家計簿77の不具合(翌月分シート作成)の原因は Excel2013の新機能にあった

  • このブログは、購入(2014年1月)時 Windows8+Microsoft Office2013付きのノートパソコンで書いている。不具合から休眠状態にあるデスクトップ機のディスプレイを外し、マルチウィンドウにしている。スピーカーやスキャナー,USD-HDDがぶら下がっており、デスクトップ機の代役を果たしている‥‥ と云える。
  • Excel2013を本格的に使いだしたのは昨年10月の頃からである。Excel2013を使いたいから使いだしたのではない。Excel2010の機能で十分&経験からアッパーコンパチのはずなので、どこが変わったかは全く調べてない。
  • マクロ家計簿77の[翌月分シート作成]の動作がチョッとおかしい‥‥ と気が付いたのは今年に入ってからかなぁ〜
    家計簿77利用ユーザーからも、そのような情報は上がって無かったしぃ...
     月一のチャンスで、試行錯誤&ネット検索していた...
  • 有益な情報がヒットしたのは今月に入ってから。
     切っ掛けは、翌月分シートが閉じる([×])ボタンで閉じれないことが判ってから。
    「こりゃ、マクロ(VBA)の所為ではない!」とわかってから、検索キーワードが変わった‥‥
    • Excel 2013 でモーダル ダイアログから開かれたブックのメニューバーやリボンの操作ができずウィンドウを閉じることができないMicrosoftサポート 最終更新日:2016/09/29)
      原因
       Excel 2013 からウィンドウの管理方法が SDI (Single Document Interface) に仕様変更されました。
      複数のブックを開いた場合、ブックごとに独自の最上位ウィンドウを持つ管理方法に仕様変更された影響で、モーダル ダイアログからブックを開くと、Excel 内部のアクティブ ウィンドウ管理状態が適切に更新されないことが原因で発生します。
    • Excel2013,2016はどう変わったかExcelでお仕事 - Last Update:06/19/2016)
      SDI(SingleDocumentInterface)になってしまいました
       まず「おさらい」です。Microsoft Office は黎明期から2010までは全て「MDI(MultiDocumentInterface)」でした。「MDI(MultiDocumentInterface)」というのは、Windows上ではExcelのウィンドウは1つだけですが、そのExcelのウィンドウの中に複数のドキュメントを開くことができる構造のユーザーインタフェースを指します。
       なぜ「SDI(SingleDocumentInterface)」にする必要があったのかですが、おそらくタブレットでは「MDI(MultiDocumentInterface)」のままでは実行できないのでしょう。先にコラムに書いたことですが「どうして従来モードを残さないのだろう」「どうして従来インタフェースを平気で切り捨てられるのだろう」という疑問がついて回ります。
       閉じる操作については、単純にはExcel全体を一気に閉じるということができなくなりました。「Book1」「Book2」等の全てのウィンドウを閉じることでExcelそのものも閉じられるようです。 複数のワークブックを開いている状態から一気にすべてのウィンドウを閉じる場合は、シフトキーを押しながら閉じる[×]ボタンをクリックすれば良いということです。


なんだ!カンタン!Excel塾より引用

  • そう言えば、Excel2013には、Excel2010にあった「ブックウィンドウの操作ボタン」(右図)が無い‥‥ ことに気が付いた。
    • MAPS-TAで行っている「今すぐ使えるかんたんExcel2013」第1章 Section02「Excel2013の新機能」には、次のように記されている。
      5 ブックごとにウィンドウが開く
       Excel2010までは、1つのウィンドウで複数のブックが開きましたが、Excel2013では、ブックごとにウィンドウが開くようになりました。2つのブックを並べて、同時に作業することも簡単にできるので便利です。
      • これからでは、マクロ家計簿77に影響する‥‥ とは、お天道様でも判らない...

マクロ家計簿77の改修は‥‥

 上記 Microsoftサポートには

回避策


 2つの回避策があります。どちらの方法でも、Excel 内部で持つアクティブ ウィンドウのハンドルがを適切に切り替わり、現象を回避できます。

方法1

 ユーザー フォームをモードレス ダイアログで表示し、UserForm_Layout イベントで、一度フォーム自身を非表示に設定してから、再度、モーダル ダイアログとして表示します。 (UserForm_Layout イベントは、フォームの新しい位置の算出と画面の再描画を行うイベントで、フォームにフォーカスがある際に発生するイベントです。)

方法2

 フォーム上のボタンがクリックされた場合に、1 秒後にフォームをアンロードし、ウィンドウの最小化を行い、元の画面サイズに戻す処理を順に行います。


 方法1は理解できないので、方法2を試行‥‥ したが、改善されない。このページのタイトル『Excel 2013 でモーダル ダイアログから開かれたブックのメニューバーやリボンの操作ができずウィンドウを閉じることができない』が家計簿77の状況と一致しない‥‥ と思われる...


 仕方ないので方法1にあるコードをそのままコピペした。

  1. UserForm をモードレス ダイアログで表示するように変更します。
       >
  2. UserForm コード内に以下の内容をコピーして貼り付けます。Private Sub UserForm_Layout()
       

確かに改善されたが、この先が思いやられる。