|
▼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
ヘルプを見たのですが上記のようにしか書かれていませんでした。
発生しないのと、実行しないとではどう違うのでしょうか?
|
|