| 
    
     |  | ▼kobasan さん: お世話になります。私用と検証で時間が返事が遅れ申し訳ありませんでした。
 Application.EnableEventsの位置を変え、Goto文を入れてみたのですが、
 「今度は型が一致しません」というエラーが出ます。
 出る位置はどういう法則か分かりませんが1.、2.の2か所です。
 Goto文でJump_Exit:まで移動しているはずなのですが・・・
 
 Private Sub Worksheet_Change(ByVal Target As Range)
 
 '[[ 部品内訳入力画面 Macro ]]
 
 ''すべての行の見積単価を検索
 
 '''品名に合わせたリストを選択し表示させる
 Application.EnableEvents = False
 If Not Intersect(Target, Range("C7:C26")) Is Nothing Then
 'On Error Resume Next 'エラーを無視する
 'イベントプロシージャーの実行を回避する
 
 If Target.Value = Enpty Then ←1.デバックで黄色表示
 Range(Target.Offset(, 1), Target.Offset(, 9)).ClearContents
 GoTo Jump_Exit
 Else
 
 '名前を付け
 名前 = ActiveCell.Value
 '品目を選択した行の右隣のリストを名前付けしたものに変更
 With Selection.Offset(0, 1).Validation
 .Delete
 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
 xlBetween, Formula1:="=" & "部品_" & 名前
 .IgnoreBlank = True
 .InCellDropdown = True
 .IMEMode = xlIMEModeNoControl
 .ShowInput = True
 .ShowError = True
 End With
 End If
 Application.EnableEvents = True
 End If
 
 '''品名が変更されたら見積金額を変更
 If Not Intersect(Target, Range("D7:D26")) Is Nothing Then
 MsgBox Target.Address
 'On Error Resume Next 'エラーを無視する
 ''支給品かどうかの判定
 If Target.Offset(, -2).Value <> True Then  ←2.デバック
 '仕入単価を検索
 Set 範囲 = Worksheets("部品T").Range("C5:H99")
 列番号 = 4
 検索値 = ActiveCell.Value
 仕入 = Application.WorksheetFunction. _
 VLookup(検索値, 範囲, 列番号, False)
 ActiveCell.Offset(, 2).Value = 仕入
 数量 = ActiveCell.Offset(, 1)
 仕入金額 = 仕入 * 数量
 ActiveCell.Offset(, 3).Value = 仕入金額
 '見積原価を検索
 Set 範囲 = Worksheets("部品T").Range("C5:H99")
 列番号 = 5
 検索値 = ActiveCell.Value
 見積原価 = Application.WorksheetFunction. _
 VLookup(検索値, 範囲, 列番号, False)
 ActiveCell.Offset(, 4).Value = 見積原価
 原価金額 = 見積原価 * 数量
 ActiveCell.Offset(, 5).Value = 原価金額
 '見積金額を定価とし検索
 Set 範囲 = Worksheets("部品T").Range("C5:H99")
 列番号 = 3
 検索値 = ActiveCell.Value
 定価 = Application.WorksheetFunction. _
 VLookup(検索値, 範囲, 列番号, False)
 見積金額 = 定価 * 数量
 ActiveCell.Offset(, 6).Value = 見積金額
 End If
 End If
 
 '''数量が変更されたら各合計金額を変更
 If Not Intersect(Target, Range("E7:E26")) Is Nothing Then
 '入力後にセルを移動しない()
 Application.MoveAfterReturn = False
 'On Error Resume Next 'エラーを無視する
 '支給品かどうかの判断
 If Target.Offset(, -3).Value <> True Then
 数量 = Target.Offset(, 0).Value
 仕入単価 = Target.Offset(, 1).Value
 Target.Offset(, 2).Value = 仕入単価 * 数量
 原価単価 = Target.Offset(, 3).Value
 原価金額 = 原価単価 * 数量
 Target.Offset(, 4).Value = 原価金額
 '見積金額を定価とし検索
 Set 範囲 = Worksheets("部品T").Range("C5:H99")
 列番号 = 3
 検索値 = Target.Offset(, -1).Value
 定価 = Application.WorksheetFunction. _
 VLookup(検索値, 範囲, 列番号, False)
 Target.Offset(, 5).Value = 定価 * 数量
 End If
 End If
 
 '''仕入金額が変更されたら仕入合計を変更
 If Not Intersect(Target, Range("I7:I26")) Is Nothing Then
 Sheets("メイン").Range("J13").Value = Range("G27").Value
 Sheets("メイン").Range("Q13").Value = Range("I27").Value
 Sheets("メイン").Range("X13").Value = Range("J27").Value
 End If
 
 Jump_Exit:
 Application.MoveAfterReturn = True
 End Sub
 
 >を入れれば、それ以降のイベントが発せ発生しませんが、それ以後のコードを実行しないということではありません。
 >
 >Application.EnableEvents = False の意味をよく理解しておいてください。
 >(ヘルプを見ておくと良いでしょう)
 
 次の使用例は、BeforeSave イベントが発生しないように、ファイルを保存する前にイベントを無効にします。
 
 Visual Basic for Applications
 Application.EnableEvents = False
 ActiveWorkbook.Save
 Application.EnableEvents = True
 
 ヘルプを見たのですが上記のようにしか書かれていませんでした。
 発生しないのと、実行しないとではどう違うのでしょうか?
 
 |  |