范围对象未传入Function Excel VBA

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

这似乎是一个简单的事情要解决,但我不太明白这个问题。我有一个函数,它接受一个Range参数但是当我使用一个循环时,它似乎没有识别它(我得到一个424 - 对象错误)。代码如下。

Sub PrintKeys(Data As Variant, C1 As Range)
Dim key As Variant
Dim Rg As Range
Set Rg = C1
Dim i As Integer
i = 1
For Each key In Data.Keys
    'Rg.Offset(0, i).Value = key
    'Rg.Offset(0, i).Interior.ColorIndex = 15
    Rg = Rg.Offset(0, i)
    Rg.Value = key
    Auto_Colour (Rg)
    i = i + 1
Next key
End Sub

Sub Auto_Colour(Rg As Range)
    Rg.Interior.ColorIndex = 15
End Sub

如果我将上述内容更改为则可以正常工作:

Sub PrintKeys(Data As Variant, C1 As Range)
Dim key As Variant
Dim Rg As Range
Set Rg = C1
Dim i As Integer
i = 1
For Each key In Data.Keys
    Rg.Offset(0, i).Value = key
    Rg.Offset(0, i).Interior.ColorIndex = 15
    i = i + 1
Next key
End Sub

基于以上所述,Rg是一个Range对象,但前一个示例无法将其传递给Auto_Colour函数,尽管函数接受Range。

我错过了什么?

提前致谢。

excel-vba vba excel
1个回答
3
投票

你的问题是Auto_Colour (Rg)这一行

括号告诉VBA传递参数ByVal覆盖默认(隐式)ByRef。对于Range,这会导致调用传递Rg的默认属性,即Rg.Value,这导致Auto_Colour中的类型不匹配

解决方案:放下(),即使用Auto_Colour Rg

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