VBA - 将工作表的范围传送到函数

时间:2017-03-27 14:37:33

标签: vba excel-vba excel

我无法将范围的全名转移到函数中。

我有2张:WS1和WS2。

在Sub中,我找到了与WS1和WS2相关的各种范围。 但是当我调试时,它们的坐标前面没有工作表的名称:

Public Function myFunction(ByRef amountRange As Range)
....
End Function






Sub Testons()
'
Dim nb As Integer, lastrow As Integer,
Dim WS1 As Worksheet, WS2 As Worksheet
 With ThisWorkbook
        Set WS1 = .Worksheets("WS1"): Set WS2 = .Worksheets("WS2")
    End With

    With Worksheets("WS1")
        nb = .Range("A2", .Range("A2").End(xlDown)).Rows.Count
        lastrow = nb + 1
        Set amountRange = WS1.Range("C2:C" & lastrow)
'THIS RESULTS IN 'WS1'!$C$2:$C$9 AND NOT IN 'WS1'!$C$2:$C$9 (what I want)
    End With
    result = myFunction(amountRange)
End Sub

因此,我的功能无法做到我想要的。 如何在工作表名称之前加上一个范围,例如'WS1'!$ C $ 2:$ C $ 9?

2 个答案:

答案 0 :(得分:1)

这是因为VBA以与excel不同的方式处理对单元格的引用。

您可以使用

找到范围的坐标
  

range.address

和单元格所属的工作表

  

range.parent.name。

答案 1 :(得分:0)

非常感谢Darren "'" & amountrange.Parent.name & "'!" & amountrange.Address是我需要的答案。 我现在在用:

amountRange.Address(External:=True)