|
▼vbaビギナー さん:
こんばんは
運用保守を考えると、↑でアップした方法より以下がいいかと思い直しました。
隠しシート(非表示でもOK)を用意し、そこに【元の図の位置】を格納しておきます。
1.各図をしかるべき【元の位置】に配置した状態で、StoreOriginal を実行してください。
これは、元の図の位置を変更したら、その時にも実行してください。
2.シート上の操作は従来と同じです。
コードは、逆にシートモジュール一本にしました。
標準モジュールやThisWOrkbookモジュールのコードは消去してください。
なお、隠しシート名を仮に "SHeet2" にしてあります。
いずれかの図がA列のそばに移動している状態で保存しますと、次回、開いた際にも
移動したままで表示されますが、他の図を選ぶと、元の位置にもどります。
(シートモジュール)
Option Explicit
Const SHN As String = "Sheet2" '隠しシート名
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub
If Target.Count <> 1 Then Exit Sub
ResetOriginal
Select Case Target.Value
Case "みかん"
Shapes(1).top = Target.top
Shapes(1).left = Target.Width
Case "りんご"
Shapes(2).top = Target.top
Shapes(2).left = Target.Width
Case "さかな"
Shapes(3).top = Target.top
Shapes(3).left = Target.Width
Case "牛乳"
Shapes(4).top = Target.top
Shapes(4).left = Target.Width
Case "こおり"
Shapes(5).top = Target.top
Shapes(5).left = Target.Width
End Select
End Sub
Sub StoreOriginal()
With Sheets(SHN)
.Range("A1").Value = Shapes(1).left
.Range("A2").Value = Shapes(1).top
.Range("A3").Value = Shapes(2).left
.Range("A4").Value = Shapes(2).top
.Range("A5").Value = Shapes(3).left
.Range("A6").Value = Shapes(3).top
.Range("A7").Value = Shapes(4).left
.Range("A8").Value = Shapes(4).top
.Range("A9").Value = Shapes(5).left
.Range("A10").Value = Shapes(5).top
End With
End Sub
Sub ResetOriginal()
With Sheets(SHN)
Shapes(1).left = .Range("A1").Value
Shapes(1).top = .Range("A2").Value
Shapes(2).left = .Range("A3").Value
Shapes(2).top = .Range("A4").Value
Shapes(3).left = .Range("A5").Value
Shapes(3).top = .Range("A6").Value
Shapes(4).left = .Range("A7").Value
Shapes(4).top = .Range("A8").Value
Shapes(5).left = .Range("A9").Value
Shapes(5).top = .Range("A10").Value
End With
End Sub
|
|