|
ちょっと改良します。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
|
|