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

时间:2017-06-23 09:05:55

标签: excel vba excel-vba

我试图将行列值传递给将调用函数来计算某些逻辑的子。

在写一个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

1 个答案:

答案 0 :(得分:3)

由于您在公式中使用变量i,因此需要将其置于"之外。

替换你的行:

Selection.Formula = "=addDIscount($G$i,$E$i)"

使用:

Selection.Formula = "=addDIscount($G" & i & ",$E" & i & ")"

然而,让我建议一个解决方案,您不需要依赖Select范围,以及稍后使用Selection,但依赖在完全限定的Range对象上(这也会缩短您的代码的运行时间。)

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