前の記事「Excel 2016で選択したアクティブセルが太枠表示されない原因と解決方法」で、Windows10になってから、Excel 2016でアクティブセルが太枠表示されないことがハードウェアアクセラレータを無効にすることで解決できましたと書きました。
ところが、100%解決できていないことがわかりました。
ハードウェアアクセラレータを無効にすることでアクティブセルが太枠表示されなくなることはなくなったと思っていたのですが、まれに表示されなくなる現象が残っていたのです。
そこで、マイクロソフトのVisual Studio Community 2019に付属しているツールSpyxx.exeを使用し原因の特定を試みてみました。
※Visual Studio Community 2019のダウンロード(無料)
Visual Studio Community 2019をインストールすると、下記のパスに入ってます。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\spyxx.exe
実行すると下記の画面になります。
実際の使い方は次の記事で載せるとして、本記事ではまれに発生するExcel 2016で選択したアクティブセルが表示されなくなった直前のメッセージログを取って解析してみます。
以下がアクティブセルが表示されなくなる現象を再現する可能性が高い手順です。
①Excel2016でxlsxファイルを2つ開き、片方のウィンドウでテキストセルを選択後、右クリックでコピーします。
②もう一方のウィンドウにマウスを移動し任意のセルを選択(太枠が表示される)、右クリックします。
③マウス周辺に半透明のポップアップメニューウィンドウが表示されその中に貼り付け方法の選択肢が表示されます。
④その状態でマウスを貼り付け(テキスト貼り付けなど任意)のボタンの上に持っていきます(マウス左クリックはしません)。
⑤数秒ほっておくと、数回に1回は選択していたセルの太枠が消えます。
⑥マウスを半透明のメニューウィンドウから外に移動すると、メニューウィンドウが消えます。
セルの太枠が消えたままの時と、再度表示される時があるのですが、下記のメッセージログはセルの太枠が消えたままの時のものです。
※下記メッセージログ部分は横スクロールをかけている(SHIFT+マウスホイールスクロール可能)のでPCブラウザモードでご覧ください。
--------------ここが④の時点です。-------------- <07463> 00240A90(EXCEL) S WM_DESTROYCLIPBOARD wParam:00000000 lParam:00000000 <07464> 00240A90(EXCEL) R WM_DESTROYCLIPBOARD lResult:00000001 <07465> 00040E7E(EXCEL) S WM_DESTROYCLIPBOARD wParam:00000000 lParam:00000000 <07466> 00020380(TOMOCLIP) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07467> 00080306(ONEDRIVE) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07468> 00040E7E(EXCEL) R WM_DESTROYCLIPBOARD lResult:00000000 <07469> 00020380(TOMOCLIP) P WM_CLIPBOARDUPDATE wParam:0000001E lParam:00000000 <07470> 00080306(ONEDRIVE) P WM_CLIPBOARDUPDATE wParam:0000001E lParam:00000000 <07471> 00040E7E(EXCEL) S WM_RENDERFORMAT uFormat:CF_UNICODETEXT [wParam:0000000D lParam:00000000] <07472> 00040E7E(EXCEL) R WM_RENDERFORMAT lResult:00000000 <07473> 00040E7E(EXCEL) S WM_RENDERFORMAT uFormat:C00E [wParam:0000C00E lParam:00000000] <07474> 00040E7E(EXCEL) R WM_RENDERFORMAT lResult:00000000 <07475> 000B1994(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07476> 004911E4(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07477> 000B1994(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07478> 004911E4(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07479> 000B1994(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07480> 004911E4(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07481> 000B1994(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:0000001E lParam:00000000 <07482> 004911E4(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:0000001E lParam:00000000 <07483> 000B1994(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07484> 004911E4(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07485> 000B1994(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07486> 004911E4(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07487> 000B1994(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07488> 004911E4(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:00000000 lParam:00000000 <07489> 000B1994(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:0000001E lParam:00000000 <07490> 004911E4(OUTLOOK) P WM_CLIPBOARDUPDATE wParam:0000001E lParam:00000000 --------------ここが⑥の時点です。--------------
上記メッセージログのカッコ()の中はプロセス名(プログラム名)です。
この部分だけ後から追記しました。
④⑤を繰り返すと、あるタイミングでログの<07471>~<07474>のWM_RENDERFORMATメッセージが発生することがあり、このメッセージが発生すると以降、太枠が消えるという関連が見えました。
WM_RENDERFORMATメッセージはディレイドレンダリングといって、他のプロセス(プログラム)へ貼り付け動作を行った時に初めてデータをセットする必要がある場合発生するメッセージです。
通常、他のプロセスへ貼り付け動作を行うとその中でGetClipboardData()が呼び出され、データの要求があったのでクリップボードオーナにWM_RENDERFORMATメッセージが送信されます(クリップボードオーナはその時点でデータをクリップボードにセットします)。
しかし、上記④~⑥の操作では明示的に他のプロセスへ貼り付け動作を行っていません。
直前のイベント<07465>~<07470>の結果、暗黙的に貼り付け動作が発生した可能性があります。
<07465>~<07470>のイベントでEXCEL以外のプロセスにポストされているWM_CLIPBOARDUPDATEメッセージが怪しいということになります。
WM_CLIPBOARDUPDATEメッセージをポストされているプロセスはTOMOCLIPとONEDRIVEです。
どちらもクリップボードからデータを取得し貼り付ける可能性があるプロセスです。
※ToMoClip(TOMOCLIP)は、フリーソフトのクリップボード活用ユーティリティ。
※Microsoft OneDrive(ONEDRIVE)は、Windowsにバンドルされたオンラインファイル共有プログラム。
試しにToMoClipを停止してみたところ、WM_RENDERFORMATメッセージは全く発生しなくなり、アクティブセルが太枠表示されなくなることは100%なくなりました。(^^)
ここまでまとめますと以下になります。
■ハードウェアアクセラレータを無効にすることでアクティブセルが太枠表示されなくなる確率は少なくなる。
■明示的な貼り付けをしないのに発生するWM_RENDERFORMATメッセージの直前にWM_CLIPBOARDUPDATEメッセージをポストされているプロセスが根本原因の可能性が高い。
Spyxx.exeを使用して原因を特定するまでの手順を「(続)Excel 2016で選択したアクティブセルが太枠表示されない原因と解決方法3」に載せましたのでご覧ください。
またSpyxx.exeを使用せず、原因となるプロセスを簡単に特定するためのツールを作ってみました。
詳しくは「Excel 2016で選択したアクティブセルが太枠表示されない原因調査ツールリリース」をご覧ください。
↑VisualStudioを使用したことがない方にお勧めです。(^^)