[[20180219190653]] 『changeイベントを2つ記述したい時はどうすればい』(くまお) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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

SoulManさんの仰るような方法が正攻法だと自分もおもいますけど、

めんどくさければ、
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


SoulMan様、もこな2様
お二方の助言により
無事動作を確認することができました。
この度は貴重なお時間を割いていただきまして
誠にありがとうございました。
(くまお) 2018/02/20(火) 12:26

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.