Excel宏在修改后不会更新

时间:2019-03-10 03:29:36

标签: excel vba if-statement

请参阅附加的文件:the excel file 我在Sheet1中有一张桌子。在每一行的末尾,我想为按钮分配一个宏,如果该行的第一个单元格等于“ Sheet2”,它将把该行的数据填充到Sheet2的某些单元格中。 如果第一行显示为“ Sheet3”,则它将来自该行的数据填充到Sheet3中的某些单元格中。 所以我要做的是先记录一个如下的宏:

Sub fill()
'
' fill Macro
'
    Sheets("Sheet2").Select
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
    Range("D3").Select
    Sheets("Sheet1").Select

End Sub

然后我尝试将其设置为:

Sub fill()
'
' fill Macro
'
If Sheet1.Range("A1").Value = "Sheet2" Then
    Sheets("Sheet2").Select
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=Sheet1!R[-1]C"
    Range("D3").Select
    Sheets("Sheet1").Select
    End If
End Sub

但是问题是if子句没有执行!不管A1的值是多少,它都会像没有条件一样不断填写Sheet2!我也保存并运行。请告诉我我误解的地方。谢谢。

1 个答案:

答案 0 :(得分:1)

使用ActiveSheet.Buttons(Application.Caller).TopLeftCell会告诉您您刚刚单击按钮的范围。 从那里,您可以在A列中获取工作表名称,并将信息发送到那里。

代码

Sub Rng_Butn_Clicked()
    Dim BtRng As Range, sh As Worksheet, rw As Long

    Set BtRng = ActiveSheet.Buttons(Application.Caller).TopLeftCell

    MsgBox BtRng.Address    'remove later
    MsgBox Cells(BtRng.Row, 1).Value    'remove later

    Set sh = Sheets(Cells(BtRng.Row, 1).Value)

    With sh
        rw = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
        .Cells(rw, 2).Value = Cells(BtRng.Row, 2).Value
        .Cells(rw, 3).Value = Cells(BtRng.Row, 3).Value
        .Cells(rw, 4).Value = Cells(BtRng.Row, 4).Value
    End With

End Sub

将“表单”工具箱中的按钮添加到第一个单元格中,然后将宏分配给该按钮。您可以在第一个单元格中进行操作,然后将其向下拖动以复制按钮。

enter image description here enter image description here

单击按钮,代码将把数据发送到正确的工作表。 该代码有两个msgbox,您可以将其删除,只是为了向您展示发生了什么