Vba 如何将内部对象指定给范围?

Vba 如何将内部对象指定给范围?,vba,Vba,我在vba中创建了一个内部变量来存储某个单元格的样式。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

我在vba中创建了一个内部变量来存储某个单元格的样式。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。 这样做可以在运行时更改内部值。
我想这很简单,但我是个笨蛋。有人有主意吗?提前谢谢

您可以使用子对象来设置内部的所有(非对象)属性,从而实现您想要的。您可以使用
调用setInterior(Range(“H15”),X)来代替
设置范围(“H15”).Interior=X
语句


对象/只读属性已注释,但为了完整性而显示
InvertIfNegative
有时似乎有错误,因此错误上的
On error Resume Next
语句将继续执行,以避免出现问题。

您可以使用一个子集来设置内饰的所有(非对象)属性,从而实现所需的功能。您可以使用
调用setInterior(Range(“H15”),X)来代替
设置范围(“H15”).Interior=X
语句


对象/只读属性已注释,但为了完整性而显示
InvertIfNegative
有时似乎有错误,因此错误上的
继续下一个
语句以避免出现问题。

您正在将对该单元格内部的引用存储到
X
中。然后通过存储在
X
中的引用更改该单元格的内部。不能创建内部的新实例,因此不能将一个单元的内部指定给另一个单元。您只能逐个将一个内部的属性指定为与另一个内部的属性相等。是的,@GSerg是正确的
。Interior
属性是只读的…您正在将对该单元格内部的引用存储到
X
。然后通过存储在
X
中的引用更改该单元格的内部。不能创建内部的新实例,因此不能将一个单元的内部指定给另一个单元。您只能逐个将一个内部的属性指定为与另一个内部的属性相等。是的,@GSerg是正确的
。Interior
属性是只读的…您的两个内部都称为
rgInt
。Thx。已应用更正。切勿在测试后使用“查找和替换”使代码更清晰……:-)谢谢我原以为会有一个内置的vba函数,但效果很好!;)您的两个内饰都称为
rgInt
.Thx。已应用更正。切勿在测试后使用“查找和替换”使代码更清晰……:-)谢谢我原以为会有一个内置的vba函数,但效果很好!;)
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