2017-03-20 14 views
0

値が数式でない場合は、別のシートに値を貼り付けるためにマクロを取得(ボタンをクリック)しようとしています。私は以下のエラーは表示されませんが、機能は起動しません。ご協力いただきありがとうございます!インデックス一致に基づく値を貼り付け

Sub Update_Numbers(ByVal Target As Range) 

' Update_Numbers Macro 
' 
' Keyboard Shortcut: Ctrl+j 

On Error GoTo Safe_Exit 
    Application.EnableEvents = False 

Select Case Target.Address(0, 0) 

Case Sheets("Wage Run").Range("B7") 
    If Target.HasFormula = False Then _ 
     Sheets("wage run").Range("B7").Copy 
     Sheets("With Changes").Select 
     Range(Application.WorksheetFunction.Index(Sheets("With Changes").Range("E2:AB138"), Application.WorksheetFunction.Match(Sheets("Wage Run").Range("D1"), Sheets("With Changes").Range("A2:A138"), 0), 1)).Select 
     ActiveSheet.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
End Select 

Safe_Exit: 
Application.EnableEvents = True 

End Sub 

EDIT:以下の提案で変更されましたが、それでも発火しません。 「IF-THEN」構築物は必要ないことに注意してください任意の対応する「END IF」あなたは「その後」次1行に一つだけの文を持っている場合:上記@Scott Cranerさんのコメントに加えて

Sub Update_Numbers(ByVal Target As Range) 
With Sheets("wage run") 
' Update_Numbers Macro 
' 
' Keyboard Shortcut: Ctrl+j 

On Error GoTo Safe_Exit 
Application.EnableEvents = False 

Select Case Target.Address(0, 0) 


Case "B7" 
If Target.HasFormula = False Then 
    Sheets("wage run").Range("B7").Copy 
    Sheets("With Changes").Select 
    Range(Application.WorksheetFunction.Index(Sheets("With Changes").Range("E2:AB138"), Application.WorksheetFunction.Match(Sheets("Wage Run").Range("D1"), Sheets("With Changes").Range("A2:A138"), 0), 1)).Select 
    ActiveSheet.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,  SkipBlanks _ 
    :=False, Transpose:=False 
End If 
End Select 

Safe_Exit: 
Application.EnableEvents = True 

End Sub 
+0

エラーをチェックアウトすると、理由はわかります。ターゲットは何もありません。 –

+0

これを呼び出す別のサブを介してサブ範囲に範囲を指定している場合を除いて、Targetは自動的に設定されないため、何もしません。実現させる。 'Select Case Target.Address(0、0)'ではTargetが何もなく、何もアドレスを持たないので、エラーが発生しています。 'On Error GoTo Safe_Exit Application.EnableEvents = False'という行を取り出してください。エラーコントロールが最後まで送信しているため、現在はすべてをスキップしています。 –

+0

別のワークシートに同様のコードがあるので、私はこれを混乱させます。 'ないApplication.Intersect(対象、範囲( "$ B $ 1:$ C $ 1"))場合Target.Cells.Count> 1は、エラー後藤Safe_Exit Application.EnableEvents = Falseの 上のサブ を終了した場合は、何もありません レンジ( "B8")。式= salaries2 エンド のSelect Case Target.Address(0、0) ケース "B1" Target.Offset(0、1).ClearContents ケース "B8" の場合IsEmpty(Target)Then _ Target.Formula = salaries2' –

答えて

0

。しかし、あなたの場合のように、If構文に複数のステートメントが含まれている場合、コードブロックは "End If"で終わる必要があります。 「Then」の直後に行継続記号(_)があります。このように、代わりにif文を、これを削除してみて、エンドが含まれています。また

Select Case Target.Address(0, 0) 

Case Sheets("Wage Run").Range("B7") 
    If Target.HasFormula = False Then 
     Sheets("wage run").Range("B7").Copy 
     Sheets("With Changes").Select 
     Range(Application.WorksheetFunction.Index(Sheets("With Changes").Range("E2:AB138"), Application.WorksheetFunction.Match(Sheets("Wage Run").Range("D1"), Sheets("With Changes").Range("A2:A138"), 0), 1)).Select 
     ActiveSheet.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    End If 
End Select 
+0

これは助けと思っていますが、式はまだ機能しませんでした。 –

+0

「選択」および「With」(編集後)ステートメントが正しく実装されていません。 (あなたは、ボタンにマクロを接続したいと言っているので、必要なのは技術的にはSubプロシージャであり、関数プロシージャではないと思われます)。 MCFLのガイドライン(https://stackoverflow.com/help/mcve)を参照して、良い答えを得る機会を増やすために質問の言い換えを検討することをお勧めします。 – Egalth

0

を上記の私のコメントに、ここにあなたが求めているものを行うように見える非常に最小限の例ですが、他のコンテキストなし。これは、少なくとも2枚のシートを含むワークブックで動作します。出発点として有用かもしれません。

Sub Macro1() 
' 
' Macro1 Macro 
' 

' Paste a value into another sheet if the value is not a formula. 

    Dim sourcecell As Range 
    Dim targetcell As Range 

    Set sourcecell = Sheets(1).Range("D8") 
    Set targetcell = Sheets(2).Range("D8") 

    If Not sourcecell.HasFormula Then targetcell = sourcecell 

End Sub 
関連する問題