現象
Microsoft Excel 2013 および Excel 2016 の VBA で、数式バーを非表示にし、画面表示を更新しない状態 (Application.ScreenUpdating プロパティを False に設定した状態) で行の追加または削除を実行すると、セルへの入力ができなくなります。
回避策
以下のいずれかの方法で回避します。
方法 1 : 数式バーを表示する
数式バーを表示した状態で VBA を実行します。
数式バーを表示する構成にできない場合は、行の追加または削除処理の最後に、以下のような数式バーを一旦表示し、再度非表示にする処理を追加します。
Application.DisplayFormulaBar = True
Application.DisplayFormulaBar = False
方法 2 : Application.ScreenUpdating = False をコメントアウトする
方法 3 : ActiveX コントロールではなくフォーム コントロールを使用する
状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
詳細
問題の再現手順
-
Excel 2013 または Excel 2016 で空白のブックを作成します。
-
B5:E5 のセル範囲を選択して、Ctrl + Shift + F キーを押下し、セルの書式設定ダイアログを表示します。
-
[保護] タブの [ロック] のチェックをはずして [OK] をクリックします。
-
[開発] タブの [挿入] から [ActiveX コントロール] の「コマンド ボタン」を 2 つ挿入します。
ここでは、1 ~ 2 行目に収まる位置に挿入します。 -
コマンド ボタン 1 のクリックイベントに以下のコードを記述します。
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
With ActiveWorkbook.Sheets(1)
.Unprotect
.Rows(5).Copy
.Rows(6).Insert
.Protect
End With
End Sub -
コマンド ボタン 2 のクリックイベントに以下のコードを記述します。
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
With ActiveWorkbook.Sheets(1)
.Unprotect
.Rows(6).Delete
.Protect
End With
End Sub -
Workbook の Open イベントに以下のコードを記述します。
Private Sub Workbook_Open()
Application.DisplayFormulaBar = False
ActiveWorkbook.Sheets(1).Protect
End Sub -
ブックを保存して一旦閉じます。
-
作成したブックを開き、[コンテンツの有効化] をクリックします。
-
このとき、手順 2 で、セルのロックを解除した範囲 (B5:E5) には値を入力できることを確認します。
-
コマンド ボタン 1 をクリックします。
結果
手順 2 で、セルのロックを解除した範囲 (B5:E5) に値を入力することができません。
コマンド ボタン 2 をクリックした場合も、同じ状況となります。