| 
    
     |  | ちょっと改良します。Static i As Integer と、プロシージャレベルで変数の値を 保存してしまうと、シートアクティブで戻ったときも値が加算されたままになっいて
 順序が狂います。そこで標準モジュールの先頭に移し、グローバル変数にしてみました。
 今度は順番どおりに表示されるようです。
 なおシートアクティブイベントは、一度他のシートを選択してから戻ったときに
 発生します。ご存知かと思いますが、念のため。
 
 [シートモジュール]
 Private Sub Worksheet_Activate()
 Dim Wp As Single, Hp As Single
 Const FPic As String = _
 "C:\Documents and Settings\UserName\My Documents\My Pictures\001.jpg"
 
 With ActiveWindow.VisibleRange
 Wp = .Width - 10: Hp = .Height - 10
 End With
 Application.ScreenUpdating = False
 With Me.Pictures
 If .Count > 0 Then .Delete
 With .Insert(FPic)
 .Left = 0: .Top = 0
 .Width = Wp: .Height = Hp
 .OnAction = "Pic_Change"
 End With
 End With
 Application.ScreenUpdating = True: Cnt = 0
 End Sub
 
 [標準モジュール]
 Public Cnt As Integer
 
 Sub Pic_Change()
 Dim x As Variant, Ary As Variant
 Dim Wp As Single, Hp As Single
 Const Ph As String = _
 "C:\Documents and Settings\UserName\My Documents\My Pictures\"
 
 x = Application.Caller
 If VarType(x) <> 8 Then Exit Sub
 If InStr(1, x, "図") = 0 Then Exit Sub
 Ary = Array("001", "002", "008")
 If Cnt = UBound(Ary) Then
 Cnt = 0
 Else
 Cnt = Cnt + 1
 End If
 With ActiveWindow.VisibleRange
 Wp = .Width - 10: Hp = .Height - 10
 End With
 Application.ScreenUpdating = False
 With ActiveSheet
 .Pictures(x).Delete
 With .Pictures.Insert(Ph & Ary(Cnt) & ".jpg")
 .Left = 0: .Top = 0
 .Width = Wp: .Height = Hp
 .OnAction = "Pic_Change"
 End With
 End With
 Application.ScreenUpdating = True: Erase Ary
 End Sub
 
 
 |  |