VBAで自動化 VBA一覧 アクティブ/非アクティブ セル・シート・ブック操作

【VBA】Worksheet.Activate が実行されない原因と解決方法

Excel VBA を使用して、特定のワークシートをアクティブにする際に Worksheet.Activate メソッドを使用します。しかし、このメソッドが期待通りに動作しないことがあります。この記事では、その主な原因と解決方法を解説します。

Worksheet.Activate が機能しない主な原因

Worksheet.Activate が正しく動作しない場合、以下のような理由が考えられます。

対象のワークシートが非表示になっている

Worksheet.Activate メソッドは、非表示(xlSheetHidden または xlSheetVeryHidden)のシートに対しては動作しません。

【VBA】Visibleプロパティ:(シートやワークブック)表示・非表示

解決方法:

  • 非表示のシートを表示してから Activate を実行します。

Sub ActivateHiddenSheet()

With ThisWorkbook.Sheets("HiddenSheet")

If .Visible = xlSheetHidden Or .Visible = xlSheetVeryHidden Then

.Visible = xlSheetVisible ' シートを表示

End If
.Activate ' シートをアクティブにする

End With

End Sub

ワークブックがアクティブでない

Activate メソッドは、対象のワークブックがアクティブでない場合にはエラーが発生します。

解決方法:

  • ワークブックをアクティブにしてから、シートをアクティブにします。

Sub ActivateSheetInAnotherWorkbook()

Dim wb As Workbook
Set wb = Workbooks("ExampleWorkbook.xlsx")

wb.Activate ' ワークブックをアクティブにする
wb.Sheets("Sheet1").Activate ' シートをアクティブにする

End Sub

シート名が間違っている

指定したシート名が正しくない場合、Activate メソッドはエラーを引き起こします。

解決方法:

  • シート名が正しいかどうか確認します。
  • 事前にシートが存在するかチェックします。

Sub ActivateSheetWithValidation()

Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Sheets("InvalidSheetName")
On Error GoTo 0

If ws Is Nothing Then

MsgBox "指定したシートは存在しません。"

Else

ws.Activate

End If

End Sub

保護されているシートやブック

保護されているシートやワークブックでは、Activate メソッドが正しく動作しない場合があります。

【VBA】Unprotectメソッド:ブック・シートの保護解除

解決方法:

  • 必要に応じて保護を解除してから操作を実行します。

Sub ActivateProtectedSheet()

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("ProtectedSheet")

' 保護解除
If ws.ProtectContents Then

ws.Unprotect Password:="YourPassword"

End If

ws.Activate

End Sub

Worksheet.Activate を適切に使用するポイント

  1. 対象シートが非表示でないことを確認する
    非表示のシートを表示してからアクティブにします。
  2. ワークブックのアクティブ状態を確認する
    他のワークブック内のシートを操作する場合、ワークブックをアクティブにしてから操作します。
  3. シート名のミスを防ぐ
    シート名をコード内でハードコーディングする場合は、ミスを防ぐため事前に存在確認を行います。
  4. シートをアクティブにしない設計を検討する
    可能であれば、ActivateSelect を使用せずに直接シートを操作するコード設計を推奨します。

まとめ

Excel VBA の Worksheet.Activate メソッドが正しく動作しない場合、以下の点を確認してください:

  1. 対象シートが非表示ではないか
  2. 対象ワークブックがアクティブになっているか
  3. シート名が正しいか
  4. シートやワークブックが保護されていないか

また、アクティブ化が必要でない場合は、直接的にシートを操作することで、コードの効率と可読性を向上させることができます。

-VBAで自動化, VBA一覧, アクティブ/非アクティブ, セル・シート・ブック操作