ExcelVBA 行を非表示にするとボタンが消える
Excel2016です。調べても解決できなかったので,初めて質問させていただきます。
マクロで行を非表示にしたらコマンドボタンやチェックボックスが消えてしまいます。非表示にする行にはかからないようにオブジェクトを設置していますが,消えてしまいます。コントロールの書式設定で「セルにあわせて移動やサイズ変更をする」「セルにあわせて移動するが変更はしない」「セルにあわせて移動やサイズを変更しない」のいずれに設定しても消えてしまいます。一部消えない(見えている)オブジェクトもありますが,シートやオブジェクトをクリックしたり,画面を切り替えたりすると消えてしまいます。
しかし,「オブジェクトの選択と表示」で確認すると,消えたオブジェクトは全て残っています。
この状態で上書き保存をし,一旦ブックを閉じて再度開くと,オブジェクトは表示されており,機能します。
オブジェクトを配置した位置は,非表示処理をする14~35行より上と,それより下ですが,全て消えてしまいます。全てのオブジェクトを14行目より上に配置しても消えてしまいます。
しかし,別のシート(B)で全てのオブジェクトを非表示する行より上に配置して同様の処理をした場合は,消えません。
※問題のシート(A)は,元々シートBをコピーして,更に別の処理を加えたりしたものなので,基本的には同じ処理を行っています。
また,その他の確認できた現象として,Ctrl+Wでブックを閉じた場合,通常はウィンドウの位置は変わりませんが,シートAでマクロ実行後に閉じた場合はなぜかウィンドウの位置がずれます(移動します)。ブックを開いて,何もせずにCtrl+Wで閉じた場合は移動しません。
念のため,オブジェクトの高さ等が0になってしまっているのかもしれないと思い,行を非表示にした後にオブジェクトの高さ・幅を変更するコードを追加してみてもやはり消えたままでした。
また,マクロを使用せずに手動で行を非表示にした場合は,オブジェクトは消えませんでした。
このオブジェクトが消える問題を解決する方法を教えていただきたいです。よろしくお願いいたします。
<コードの一部>
Dim i As Integer
For i = 14 To 35 Step 3
If Len(Cells(i, 9)) = 0 Then Range(Cells(i - 1, 9), Cells(i + 1, 9)).EntireRow.Hidden = True
Next i
なお,
Range(Cells(i - 1, 9), Cells(i + 1, 9)).EntireRow.Hidden = True
を
Rows(i - 1).Hidden = True
Rows(i).Hidden = True
Rows(i + 1).Hidden = True
に変えてみてもオブジェクトは消えます。