为子VBA Excel提供值的动态范围

为子VBA Excel提供值的动态范围,vba,excel,Vba,Excel,我试图将行-列值传递给将调用函数以计算某些逻辑的sub 在编写sub之前,我只定义了一个函数,并手动将值传递给该函数,然后拖动到所需的列 但现在我想创建一个可以自动将公式应用于一系列列的东西 这就是我正在尝试的代码,也许这不是最好的方法,但可以接受建议 Function addDiscount(Qty, Price) ' ' addDiscount Macro ' adds Discount to given price and quantity ' ' Keyboard Shortcut: C

我试图将行-列值传递给将调用函数以计算某些逻辑的sub

在编写sub之前,我只定义了一个函数,并手动将值传递给该函数,然后拖动到所需的列

但现在我想创建一个可以自动将公式应用于一系列列的东西

这就是我正在尝试的代码,也许这不是最好的方法,但可以接受建议

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