86666
Windows11/Excel2019/Macro

それぞれのシートの”A1”の値が0.2以下であればそのシートタブを青色にし、0.1以上0.2未満であれば緑色にし、0.1未満0.01以上であればオレンジ色にし、最終的にそれ未満の場合には初期設定の色にするイベントを”ThisWorkbook”に”SheetChange”として下記の通り保存しました。

```

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        If Sh.Range("A1") >= 0.2 Then
            Sh.Tab.Color = RGB(0, 0, 255) 'BLUE
        ElseIf Sh.Range("A1") < 0.2 And Sh.Range("A1").Value >= 0.1 Then
            Sh.Tab.Color = RGB(0, 255, 0) 'GREEN
        ElseIf Sh.Range("A1") < 0.1 And Sh.Range("A1").Value >= 0.01 Then
            Sh.Tab.Color = RGB(255, 165, 0) 'ORANGE
        Else
            Sh.Tab.ColorIndex = xlColorIndexNone 'None
        End If
    End Sub
    
```

上記は作用しましたが、次にブックを開けたときに作用させたいと考えて全く同じイベントを"Open"で保存して見ましたが下記エラーが出てうまくいきませんでした。

```

    Private Sub Workbook_Open()
        If Sh.Range("A1") >= 0.2 Then
            Sh.Tab.Color = RGB(0, 0, 255) 'BLUE
        ElseIf Sh.Range("A1") < 0.2 And Sh.Range("A1").Value >= 0.1 Then
            Sh.Tab.Color = RGB(0, 255, 0) 'GREEN
        ElseIf Sh.Range("A1") < 0.1 And Sh.Range("A1").Value >= 0.01 Then
            Sh.Tab.Color = RGB(255, 165, 0) 'ORANGE
        Else
            Sh.Tab.ColorIndex = xlColorIndexNone 'None
        End If
    End Sub
    
```

**エラー "Compile error: Variable not defined"**

なぜでしょうか？どこを直せば意図したような結果が得られるかご教授いただきたいです。
CC BY-SA 4.0
2022-03-03T05:39:48.863
86665
2022-03-03T06:17:11.203
2022-03-03T06:17:11.203
9820
51310
question
vba excel
同じイベントを"SheetChange"として保存したときと"Open"として保存したときに”Open”として保存した方にだけエラーが出る
`Workbook_SheetChange`では、引数として`ByVal
Sh`が渡されていますが、`Workbook_Open`では`Sh`が渡されていないことが、「コンパイルエラー:
変数が定義されていません」エラーが出る原因です。  
`Sh`を宣言して、アクティブシートなどを代入してください。

```

    Private Sub Workbook_Open()
        Dim Sh As Worksheet
        Set Sh = ActiveSheet
    
        If Sh.Range("A1") >= 0.2 Then
            Sh.Tab.Color = RGB(0, 0, 255) 'BLUE
        ElseIf Sh.Range("A1") < 0.2 And Sh.Range("A1").Value >= 0.1 Then
            Sh.Tab.Color = RGB(0, 255, 0) 'GREEN
        ElseIf Sh.Range("A1") < 0.1 And Sh.Range("A1").Value >= 0.01 Then
            Sh.Tab.Color = RGB(255, 165, 0) 'ORANGE
        Else
            Sh.Tab.ColorIndex = xlColorIndexNone 'None
        End If
    End Sub
    
```
CC BY-SA 4.0
2022-03-03T06:16:37.273
86666
2022-03-03T06:16:37.273
9820
86665
answer