VBA Sub返回函数的输出

问题描述 投票:0回答:1

嗨大家我是VBA的新手,我正在尝试运行下面的代码,但我遇到了困难。 当我运行代码时没有任何反应。我没有输出。

我有三个专栏:FTcostweight。 我想要做的是在IF列中运行Ft语句以获取ST,然后将costweight列中的数字乘以st。 例如:低于7 * 10然后返回O列中的数据。

我已将IF语句返回的数据保存在数组中,然后尝试将它们复制到O列中,但它无法正常工作。但是,当我从Excel单元格运行该函数时,它可以正常工作。

非常感谢您的帮助。

FT

ST

电子商务

成本

7

5

重量

10

8

Public Sub main2()
    Dim ft As Range
    Dim ws As Excel.Worksheet
    Set ws = Application.ActiveSheet

    Set ft = ws.Range("b2:b365")
    ecco2 = ecco(ft)
End Sub

Function ecco(ft As Range) As Long
    Dim x As Variant
    Dim L As Long
    Dim H As Long
    Dim netarray() As Long

    For Each x In ft
        If ft = "st" Then
            L = x.Offset(0, 1) * x.Offset(0, 3)
        Else
            ecco = 0
        End If

        ecco = L

        ReDim Preserve netarray(L)
        netarray(L) = L + 1
    Next x

    For i = LBound(netarray) To UBound(netarray)
        ActiveSheet.Range("o2").Offset(1, 0).Select
    Next i

End Function
excel vba
1个回答
0
投票

要从函数中返回数据,您需要执行以下操作:

Private Function ecco (ByRef ft as Range) as Long

    'Insert your logic

    ecco = whatValueAreYouReturning

End Function

如果要将单元格的值设置为某个值,可以在main2中执行此操作:

wb.Range("O2").offset(myRowOffset,0).value = ecco(myInput)
'    I reccomend changing ecco() to a function with no loop, and put the loop in main2()

关于解决方案的想法:

  • 如果你用公式做了这个,我建议保持这种方式,因为它们更容易维护。

关于代码的几点建议:

  • 尝试使你的变量名长于“H”,因为我和你在一周的时间内会知道当你回到它时它意味着什么
  • 如果要设置单元格的值(例如在列O中),可以这样做: ws.Range("O2").Offset(myOffset, 0).value = myValue ws.Range("O2").Offset(myOffset, 0).Formula= myFormula

我会修复子和功能,但我实际上并不知道你要去哪里,所以我会留给你:)

© www.soinside.com 2019 - 2024. All rights reserved.