使用application.caller更改其他单元格

时间:2017-11-14 11:18:27

标签: vba excel-vba excel

例如,如果我在函数的代码中有这个:

If TypeOf Application.Caller Is Range Then
    Rng = Application.Caller
    With Rng
        With .Offset(0, -4)
            .Value = 0
        End With
        With .Offset(0, -6)
            .Value = 0
        End With
    End With
End If

它返回错误。

在调用函数时,如何使用Application.Caller.Offset更改其他单元格的值?

2 个答案:

答案 0 :(得分:1)

您无法更改函数中的其他单元格 - Excel不会让您失望。此功能是设计使然:函数只能更改输入的单元格

答案 1 :(得分:0)

根据您的评论,您希望将OffsetRow参数一起使用,而不是列。

如果您将Range("B8")发送到当前代码,则使用With .Offset(0, -4)会导致错误!由于您有2个(对于列" B")并且您使用Offset>>的-4 2 - 4 = -2

  

=运行时错误

变化:

With .Offset(0, -4)

要:

With .Offset(-4, 0)

还有:

With .Offset(0, -6)

要:

With .Offset(-6, 0)

您可以使用以下代码获得所需的结果:

Sub ChangeOffsetCells(Rng As Range)

With Rng
    With .Offset(-4, 0)
        .Value = 0
    End With
    With .Offset(-6, 0)
        .Value = 0
    End With
End With

End Sub

并使用下面的小Test子来测试它:

Sub Test()

ChangeOffsetCells Range("B8")

End Sub