假设我在Excel 2019(Windows)中有以下VBA语句:
Dim myFont As Font
Dim myRange As Range
Set myFont = Range("A1").Font
Set myRange = Range("B1:B5")
为什么此语句失败并显示“运行时错误13:类型不匹配”:
Set myRange.Cells(1,2).Font = myFont
两边都是对象,因此有了“集”。这个语句在概念上似乎与前两个起作用的“集”语句相同。
另一方面,这种对多个单元格的赋值
Set myRange.Font = myFont
失败,并显示不同的错误:“运行时错误438:对象不支持此方法或属性””。
我在编写的模块中也有类似的代码,我希望Font对象赋值能起作用。我的想法是,如果我能将一个Range对象赋值给另一个对象,为什么不能将Font对象赋值给另一个对象呢?
为了使赋值工作,我必须为每个Font属性创建单独的赋值。
1条答案
按热度按时间nr9pn0ug1#
为了使赋值工作,我必须为每个Font属性创建单独的赋值。
这就是在
Range
上设置字体的方法,因为Range.Font
没有setter,所以不能直接使用Set
。这些奇怪的错误是因为VBA非常努力地试图让赋值按照编写的那样工作,通过一种在运行时尝试调用对象的 * default member * 的机制:因为
Range.Font
是get-only,所以它被解释为Set RNG.Font.[_Default] = SomeFont
,但是Font
的默认成员很可能是它的Name
(一个String),因此赋值是一个 * type mismatch * 错误。边注,Rubberduck(我维护的自由和开源VBE插件)检查会警告这一点。