为子VBA Excel提供值的动态范围
我试图将行-列值传递给将调用函数以计算某些逻辑的sub 在编写sub之前,我只定义了一个函数,并手动将值传递给该函数,然后拖动到所需的列 但现在我想创建一个可以自动将公式应用于一系列列的东西 这就是我正在尝试的代码,也许这不是最好的方法,但可以接受建议为子VBA Excel提供值的动态范围,vba,excel,Vba,Excel,我试图将行-列值传递给将调用函数以计算某些逻辑的sub 在编写sub之前,我只定义了一个函数,并手动将值传递给该函数,然后拖动到所需的列 但现在我想创建一个可以自动将公式应用于一系列列的东西 这就是我正在尝试的代码,也许这不是最好的方法,但可以接受建议 Function addDiscount(Qty, Price) ' ' addDiscount Macro ' adds Discount to given price and quantity ' ' Keyboard Shortcut: C
Function addDiscount(Qty, Price)
'
' addDiscount Macro
' adds Discount to given price and quantity
'
' Keyboard Shortcut: Ctrl+h
If (Qty >= 10 Or Price >= 200) Then
addDiscount = 30 * 0.01
Else
addDiscount = 0
End If
addDiscount = Application.Round(addDiscount, 2)
End Function
Sub insertAddDiscount()
Sheets("Sheet1").Select
Range("F9:F30").Select
Dim i As Integer
For i = 9 To 30
Selection.Formula = "=addDIscount($G$i,$E$i)"
Selection.Columns.AutoFit
Next i
End Sub
由于在公式中使用变量
i
,因此需要将其置于“
之外
替换您的线路:
Selection.Formula = "=addDIscount($G$i,$E$i)"
与:
但是,让我建议一个解决方案,您不需要依赖选择来定义范围,以后使用选择,而是依赖完全限定的范围对象(这也将缩短代码的运行时间)
Range
调用前应加一个点
以使其明确。谢谢Shai Rado,解决方案奏效了。正是我想要的方式。
Selection.Formula = "=addDIscount($G" & i & ",$E" & i & ")"
Sub insertAddDiscount()
Dim i As Long
With Sheets("Sheet1")
For i = 9 To 30
.Range("F" & i).Formula = "=addDIscount($G" & i & ",$E" & i & ")"
Next i
.Range("F9:F30").Columns.AutoFit
End With
End Sub