如何将内部对象分配给范围?

时间:2019-09-21 09:05:47

标签: vba

我在vba中创建了一个Interior变量来存储特定单元格的样式。 Excel允许我执行此操作,但是当我尝试将该样式应用于任何其他单元格时,它将无法正常工作。

Sub JustTest()
    Dim X As Interior
    Set X = Range("H12").Interior   'stores the Interior values into X

    X.TintAndShade = -0.05          'could alter the values if needed to

    Set Range("H15").Interior = X   'this line does not work

End Sub

我期望我可以(在此示例中)将样式从H12范围复制到H15,但是出现运行时错误438。 这样,我可以在运行时更改Interior的值。 我想这很简单,但我是个笨蛋。有人知道吗?预先感谢!

1 个答案:

答案 0 :(得分:0)

您可以使用sub来设置室内的所有(非对象)属性,从而实现所需的功能。可以使用Set Range("H15").Interior = X来代替Call setInterior(Range("H15"),X)语句。

Sub setInterior(rg As Range, rgInt As interior)
    Dim rangeInt As interior

    Set rangeInt = rg.interior

    On Error Resume Next

    With rangeInt 
'        .Application
        .Color = rgInt.Color
        .ColorIndex = rgInt.ColorIndex
'        .Creator
'        .Gradient
         .InvertIfNegative = rgInt.InvertIfNegative
'        .Parent
        .Pattern = rgInt.Pattern
        .PatternColor = rgInt.PatternColor
        .PatternColorIndex = rgInt.PatternColorIndex
        .PatternThemeColor = rgInt.PatternThemeColor
        .PatternTintAndShade = rgInt.PatternTintAndShade
        .ThemeColor = rgInt.ThemeColor
        .TintAndShade = rgInt.TintAndShade
    End With

End Sub

对对象/只读属性进行了注释,但出于完整性考虑而显示。 InvertIfNegative有时似乎有错误,因此使用On Error Resume Next语句可以避免出现问题。