[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『changeイベントを2つ記述したい時はどうすればいいでしょうか』(くまお)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fName As String, pict As Shape
'On Error GoTo ER:
If Target.Address <> "$AZ$9" Then Exit Sub fName = ThisWorkbook.Path & "ファイル保存先" & Target.Offset(0, 1).Text If Dir(fName) = "" Then fName = ThisWorkbook.Path & "表示する画像名" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = "$CU$11" Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(fName, msoTrue, msoFalse, _ .Range("CU11").Left, .Range("CU11").Top, 500, 600) End With
'ER:
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fName As String, pict As Shape
'On Error GoTo ER:
If Target.Address <> "$BG$9" Then Exit Sub fName = ThisWorkbook.Path & "ファイル保存先" & Target.Offset(0, 1).Text If Dir(fName) = "" Then fName = ThisWorkbook.Path & "表示する画像名" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = "$CU$64" Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(fName, msoTrue, msoFalse, _ .Range("CU64").Left, .Range("CU64").Top, 500, 600) End With
'ER:
End Sub
上記2つのVBAを作成し、個別では動作するのですが
Private Sub Worksheet_Change(ByVal Target As Range)
実行文 実行文 end sub
となるように試行錯誤しておりますが
うまく組み合わせることができず困っております。
どのように記述をすればよろしいのでしょうか。
ご教授願います。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
動くかどうかは試していませんけど、 シートモジュールですよね? これだけのコードが書けるトピ主さんなのでまさかとは思いますが、 アドレスで分岐させるだけでいいような??? 後、分岐が多いようなら Select Case がいいと思います。 それから、必要に応じて適時↓も必要になってくるかと思います。
Application.EnableEvents = False Application.EnableEvents = True
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim fName As String, pict As Shape 'On Error GoTo ER: If Target.Address(0, 0) = "AZ9" Then ' Exit Sub fName = ThisWorkbook.Path & "ファイル保存先" & Target.Offset(0, 1).Text ' If Dir(fName) = "" Then ' fName = ThisWorkbook.Path & "表示する画像名" ' End If ' With Me 'ActiveSheet ' For Each pict In .Shapes ' If pict.TopLeftCell.Address(0, 0) = "CU11" Then ' pict.Delete ' Exit For ' End If ' Next pict ' Set pict = .Shapes.AddPicture(fName, msoTrue, msoFalse, _ ' .Range("CU11").Left, .Range("CU11").Top, 500, 600) ' End With
ElseIf Target.Address(0, 0) = "BG9" Then fName = ThisWorkbook.Path & "ファイル保存先" & Target.Offset(0, 1).Text ' If Dir(fName) = "" Then ' fName = ThisWorkbook.Path & "表示する画像名" ' End If ' With Me 'ActiveSheet ' For Each pict In .Shapes ' If pict.TopLeftCell.Address(0, 0) = "CU64" Then ' pict.Delete ' Exit For ' End If ' Next pict ' Set pict = .Shapes.AddPicture(fName, msoTrue, msoFalse, _ ' .Range("CU64").Left, .Range("CU64").Top, 500, 600) ' End With End If
Select Case Target.Address(0, 0) Case "AZ9" MsgBox Target.Address(0, 0) Case "BG9" MsgBox Target.Address(0, 0) Case Else MsgBox "それ以外です。" & vbCrLf & _ Target.Address(0, 0) End Select 'ER: End Sub (SoulMan) 2018/02/19(月) 20:20
めんどくさければ、
Private Sub Worksheet_Change(ByVal Target As Range)
↓
Private Sub マクロ1(ByVal Target As Range)
Private Sub Worksheet_Change(ByVal Target As Range)
↓
Private Sub マクロ2(ByVal Target As Range)
って直して、別途
Private Sub Worksheet_Change(ByVal Target As Range)
Call マクロ1(Target)
Call マクロ2(Target)
End Sub
でも動いてしまうかも・・・
(もこな2) 2018/02/19(月) 23:08
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.