使用vba引用问题

时间:2016-11-03 21:34:57

标签: vba excel-vba excel-formula excel

我有3列,标题为A B& C如图所示,我想检查列A中的值是否等于列B的10%,如果是,我想将其设置为列C的值,如果没有,我想获得列B中10%的值。我在sheet1,我想在sheet2设置一个VBA按钮来运行代码。

以下是代码:

Sub Macro1()
    Dim ws As Worksheet, lastrow As Long
    Set ws = Worksheets("sheet1")
    ws.Activate
    ActiveCell.Formula = "=IF(A2=B2*0.1, A2, B2*0.1)"
    lastrow = Range("A" & Rows.Count).End(xlUp).Row
    Range("C2").AutoFill Destination:=Range("C2:C" & lastrow), Type:=xlFillDefault
End Sub

我的问题是,如果我将鼠标指向C2中的sheet1并且我只是运行vba代码,它就会起作用。如果我在sheet2并按下按钮,它将无效,它只是不显示任何数据。有没有办法根据我的标准将值设置为列C

worksheet

1 个答案:

答案 0 :(得分:2)

要使代码在sheet1上独立于活动工作表运行,您需要将.Range方法完全应用于Worksheets("sheet1")对象。请尝试以下代码:

Sub Macro1()

    Dim lastrow As Long

    With Worksheets("sheet1")
        lastrow = .Range("A" & Rows.Count).End(xlUp).Row
        If lastrow = 1 Then
            MsgBox "No data"
            Exit Sub
        End If
        .Range("C2:C" & lastrow).Formula = "=IF(A2=B2*0.1, A2, B2*0.1)"
    End With

End Sub

为什么不直截了当:始终将值设置为列C等于列B的10%?结果将是相同的。

Sub Macro1()

    Dim lastrow As Long

    With Worksheets("sheet1")
        lastrow = .Range("A" & Rows.Count).End(xlUp).Row
        If lastrow = 1 Then
            MsgBox "No data"
            Exit Sub
        End If
        .Range("C2:C" & lastrow).Formula = "=B2*0.1"
    End With

End Sub