使用变量作为范围

时间:2017-11-13 21:36:25

标签: excel-vba vba excel

我正在写一个宏,并且遇到使用范围变量的问题。我想我正在正确设置范围,但我不能对范围做任何事情。下面的伪代码:

Dim rng As Range
Set rng = Report(1)      'A function which will be defined below

trackWkbk.Sheets(strFY).rng = 10       <--'THIS IS WHERE I am getting the error. 

'trackWbkb is a workbook that is defined properly; I use it elsewhere with no errors.
'strFY is defined and working properly, I use it to call sheets in trackWbkb elsewhere with no errors.

子功能代码是:

Function Report(a) As Range
    Select Case intMonth
        Case intMonth = 7
        Select Case a
            Case a = 1
                Set Report = Range("B2")
        End Select
    End Select
End Function

我知道我的选择案例陈述会变得非常复杂(这只是一个测试样本),但我不认为问题存在。

如果我应该包含更多代码,请告诉我。我的代码编译。我觉得这很简单,我很遗憾,但过去半小时我一直在网上寻找,似乎找不到能解决这个问题的东西。有谁知道如何解决这个问题?感谢

2 个答案:

答案 0 :(得分:0)

您的函数已经返回Range个对象。我不清楚您是否正在尝试获取与活动工作表上的范围相同的另一个工作表上的范围。但是,如果您将工作表引用传递给函数,则可以直接获得所需的范围:

Function Report(ByVal poParentWorksheet As Excel.Worksheet, ByVal a As Integer) As Range
    Select Case intMonth
        Case intMonth = 7
        Select Case a
            Case a = 1
                Set Report = poParentWorksheet.Range("B2")
        End Select
    End Select
End Function

然后你可以使用:

Set rng = Report(trackWkbk.Sheets(strFY), 1)
rng.Value = 10

答案 1 :(得分:0)

设置范围变量时,您将在内存中创建指针到特定工作表中的特定范围。它不存储单元格地址,因此您无法编写

 trackWkbk.Sheets(strFY).rng

采用Excelosaurus的解决方案,或者更改函数以将字符串地址作为字符串返回,然后使用

 trackWkbk.Sheets(strFY).range(rng)