我试图将行列值传递给将调用函数来计算某些逻辑的子。
在写一个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
答案 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