VBA-未正确引用函数

VBA-未正确引用函数,vba,excel,Vba,Excel,我是VBA新手,不知道我的函数是否被正确使用,或者函数本身是否有缺陷 我的子流程如下: Sub InsertEquitiesBonds() Dim ws As Worksheet, i As Integer Set ws = Worksheets("PnL") ws.Range("B3").Value = "Equities" Worksheets("SummaryEquities").Range("MarketsEquities").Copy ws.Range

我是VBA新手,不知道我的函数是否被正确使用,或者函数本身是否有缺陷

我的子流程如下:

 Sub InsertEquitiesBonds()
    Dim ws As Worksheet, i As Integer
    Set ws = Worksheets("PnL")
    ws.Range("B3").Value = "Equities"
    Worksheets("SummaryEquities").Range("MarketsEquities").Copy ws.Range("C4")

    Dim LastUsedCell As Range
    Set LastUsedCell = ws.Cells(ws.Rows.Count, "C").End(xlUp)

    LastUsedCell.Offset(1, -1).Value = "Bonds"
    Worksheets("SummaryBonds").Range("MarketsBonds").Copy LastUsedCell.Offset(2, 0)  
    For i = 4 To ws.Range("C" & Rows.Count).End(xlUp).Row
    ws.Cells(i, 4).Value = OurFees(Range("C" & i))
    Next i
    Range("A1").Select
    End Sub
InsertEquitiesBonds()
中所述,在我不得不使用它实际上忽略的函数
OurFees
之前,代码一直有效。这就引出了一个问题:我是否没有正确地引用我的函数,或者如果我是,函数是否不可避免地存在缺陷

OurFees()
函数描述如下:

Function OurFees(rng As Range)
If rng.Value.IsEmpty = True Then
OurFees = ""
Else
    Dim BasisPoint, VolMin, VolDistr As Range
    If Columns("B").Find("Bonds").Row < rng.Row Then
        With Worksheets("CheatSheet_Bonds")
            BasisPoint = Application.WorksheetFunction.Index(Range("A5:E6"), Application.WorksheetFunction.Match(rng, Range("C5:C6"), 0), 3)
            VolMin = Application.WorksheetFunction.Index(Range("A5:E6"), Application.WorksheetFunction.Match(rng, Range("D5:D6"), 0), 4)
        End With
        With Worksheets("SummaryBonds")
            VolDistr = Application.WorksheetFunction.Index(Range("B12:C50"), Application.WorksheetFunction.Match(rng, Range("B12:B50"), 0), 2)
            OurFees = Application.WorksheetFunction.Max(Range("D9") * BasisPoint, VolMin) * Range("D8") * VolDistr
        End With
    Else
        With Worksheets("CheatSheet_Equities")
            BasisPoint = Application.WorksheetFunction.Index(Range("A4:D21"), Application.WorksheetFunction.Match(rng, Range("B4:B21"), 0), 3)
            VolMin = Application.WorksheetFunction.Index(Range("A4:D21"), Application.WorksheetFunction.Match(rng, Range("B4:B21"), 0), 4)
        End With
        With Worksheets("SummaryEquities")
            VolDistr = Application.WorksheetFunction.Index(Range("B12:C40"), Application.WorksheetFunction.Match(rng, Range("B12:B40"), 0), 2)
            OurFees = Application.WorksheetFunction.Max(Range("D9") * BasisPoint, VolMin) * Range("D8") * VolDistr
        End With
    End If
End If
End Function
功能费用(rng As范围)
如果rng.Value.IsEmpty=True,则
OurFees=“”
其他的
Dim基本点、VolMin、VolDistor作为范围
如果列(“B”)查找(“债券”)行
试试下面的

For i = 4 To ws.Range("C" & Rows.Count).End(xlUp).Row
    ws.Cells(i, 4).Value = OurFees(Range("C" & i))
Next i

1) 我想,如果你进行了适当的详细说明,那么函数定义将是
function-OurFees(rng-as-Range)
2)(假设1),那么你的函数需要一个对象(即
Range
object)参数,而
OurFees(Cells(I,3).Value)
提供了一个变量。->您应该使用
OurFees(单元格(i,3))
但给定的详细信息不足以知道它是否是最后一个词……好的,我将扩展函数,然后我确认:将
OurFees(单元格(i,3).Value)
更改为
OurFees(单元格(i,3))
。但您最好也将该范围限定在其工作表中(例如:
OurFees(ws.Cells(i,3))
。您必须在
Else
子句中的某个地方设置
OurFees=…
。。我认为真正的问题在于函数,也就是说,
Match
是否有可能不能在vba中使用?@user9078057,在进入函数时逐步检查代码(在
ws.Cells(I,4)处放置一个断点-F9-at).Value=OurFees(范围(“C”&i)
代码行),逐行按F8键并使用即时窗口(CTRL-G弹出)查询相关变量值(例如:键入
?Application.WorksheetFunction.Match(rng,范围(“B12:B40”),0)
在代码执行之前查看匹配操作的结果)