根据索引匹配粘贴值

时间:2017-03-20 19:36:25

标签: excel excel-vba vba

如果值不是公式,我试图获取一个宏(按钮单击)将值粘贴到另一个工作表中。我没有得到以下任何错误,但功能不会被激发。提前感谢您的帮助!

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

编辑:改变了以下建议,但它仍然不会被激发。

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

2 个答案:

答案 0 :(得分:0)

除了@Scott Craner上面的评论:注意" If-Then"构造不需要任何相应的"结束如果"当你在"然后"之后的一行上只有一个陈述时。但是当If构造包含多个语句时(如在您的情况下),代码块必须以" End If"结束。在"然后"之后立即有一个续行符号(_)。尝试删除它并包含一个End 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

答案 1 :(得分:0)

除了上面的评论之外,这里还有一个非常小的例子,似乎可以满足您的要求,但没有任何其他背景。它适用于具有(至少)两张纸的工作簿。也许有用作为起点。

{{1}}