[[20161125205610]] 『VBAのシートモジュールに2つのプロシージャを記香x(たしぷ) ページの最後に飛ぶ

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

 

『VBAのシートモジュールに2つのプロシージャを記載』(たしぷ)

エクセルでマクロを組んでいるのですが、
VBAのページでシートモジュールに2つのプロシージャを記載すると
1つ目は動いてくれますが、2つ目のプロシージャが動いてくれません。

シートモジュールに2つのプロシージャを記載するのはNGなのでしょうか?
教えてください。

< 使用 Excel:unknown、使用 OS:unknown >


 いくつプロシジャを書いてもOKですが、『同じ名前のプロシジャ』は1つしか書けません。

 その1つのプロシジャのなかで、やりたい2つのことを、それぞれ処理できるようにコーディングする必要があります。
(β) 2016/11/25(金) 21:03

ありがとうございます。名前を変えてみてはいますがうまくいきません。
具体的には下記の2つのプロシージャのうち、下段の分が動きません。
似たようなプロシージャになっています。

Private Sub Worksheet_Change(ByVal Target As Range)

 Dim Rng1 As Range
 Dim Rng2 As Range
 Dim Tokuisaki

 Set Rng1 = Columns("E") '得意先コードを入力する列を指定
 Set Rng2 = Worksheets("得意先コード").Range("A1:B500") '得意先コードの範囲を指定

If Target.Count > 1 Then Exit Sub

 If Intersect(Target, Rng1) Is Nothing Then Exit Sub

 Application.EnableEvents = False
 Tokuisaki = Application.VLookup(Target.Value, Rng2, 2, 0)
 If TypeName(Tokuisaki) <> "Error" Then
 Target.Offset(, 1) = Tokuisaki
 Else
 MsgBox "その得意先はありません"
 Target.ClearContents
 Target.Activate
 End If
 Application.EnableEvents = True

 End Sub

Private Sub Worksheet_Change2(ByVal Target As Range)

 Dim Rng1 As Range
 Dim Rng2 As Range
 Dim Hinsyu

 Set Rng1 = Columns("G") '品種コードを入力する列を指定
 Set Rng2 = Worksheets("品種コード").Range("B1:D500") '品種コードの範囲を指定

If Target.Count > 1 Then Exit Sub

 If Intersect(Target, Rng1) Is Nothing Then Exit Sub

 Application.EnableEvents = False
 Hinsyu = Application.VLookup(Target.Value, Rng2, 2, 0)
 If TypeName(Hinsyu) <> "Error" Then
 Target.Offset(, 1) = Hinsyu
 Else
 MsgBox "その得意先はありません"
 Target.ClearContents
 Target.Activate
 End If
 Application.EnableEvents = True

 End Sub

(たしぷ) 2016/11/25(金) 21:23


 これではだめです。

 Worksheet_Change というプロシジャ名は、エクセルVBAで定められたプロシジャ名です。
 そのシート上のセルに変更が加えられた時点で、エクセルVBAは、このプロシジャを動かします。
 動かすプロシジャ名は 『Worksheet_Change』です。『Worksheet_Change2』なんてプロシジャがあっても
 エクセルVBAから見れば、Private Sub 花子(ByVal Target As Range) と書いてあるのと同じ。
 エクセルVBAのイベント処理の対象外の、何かわからないプロシジャ という扱いになります。

 あくまで、『1つの』Private Sub Worksheet_Change(ByVal Target As Range) の中で
 2つの処理を行う必要があります。

 コードの内容は精読していませんが、現在の、それぞれの

 If なんとか なら Exit Sub

 なんとかじゃない場合の処理

 これを

 If なんとかじゃない Then
   なんとかじゃない場合の処理
 End If

 If なんとかじゃない Then
   なんとかじゃない場合の処理
 End If

 といった形で組み合わせます。

 テーマには関係ないのですが、Changeイベントで If Target.Count > 1 Then Exit Sub という処理、
 βとしては、データ不整合の原因になり、書くべきではないと思いますが、これは、そのままにしてあります。

 以下は組み合わせの一例です。コードの中身はそちらのコードのままです。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng1 As Range
    Dim Rng2 As Range
    Dim Tokuisaki
    Dim Hinsyu

    If Target.Count > 1 Then Exit Sub

    Set Rng1 = Columns("E")    '得意先コードを入力する列を指定
    Set Rng2 = Worksheets("得意先コード").Range("A1:B500")    '得意先コードの範囲を指定
    If Not Intersect(Target, Rng1) Is Nothing Then  '★1

        Application.EnableEvents = False
        Tokuisaki = Application.VLookup(Target.Value, Rng2, 2, 0)
        If TypeName(Tokuisaki) <> "Error" Then
            Target.Offset(, 1) = Tokuisaki
        Else
            MsgBox "その得意先はありません"
            Target.ClearContents
            Target.Activate
        End If
        Application.EnableEvents = True

    End If                                          '★1

    Set Rng1 = Columns("G")    '品種コードを入力する列を指定
    Set Rng2 = Worksheets("品種コード").Range("B1:D500")    '品種コードの範囲を指定

    If Not Intersect(Target, Rng1) Is Nothing Then  '★2

        Application.EnableEvents = False
        Hinsyu = Application.VLookup(Target.Value, Rng2, 2, 0)
        If TypeName(Hinsyu) <> "Error" Then
            Target.Offset(, 1) = Hinsyu
        Else
            MsgBox "その得意先はありません"
            Target.ClearContents
            Target.Activate
        End If
        Application.EnableEvents = True

    End If                                          '★2

 End Sub

(β) 2016/11/25(金) 21:51


 もう1つの記述例。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Proc1 Target
    Proc2 Target
 End Sub

 Private Sub Proc1(ByVal Target As Range)

  現在の、そちらの Worksheet_Change プロシジャの中身をそのまま記述

 End Sub

 Private Sub Proc2(ByVal Target As Range)

  現在の、そちらの Worksheet_Change2 プロシジャの中身をそのまま記述

 End Sub

(β) 2016/11/25(金) 21:58


βさま

ご丁寧なアドバイス誠にありがとうございました。
(たしぷ) 2016/11/25(金) 22:07


コメント返信:

[ 一覧(最新更新順) ]


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