我有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
?
答案 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