excel 为什么Font对象的分配失败?

kq0g1dla  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(115)

假设我在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属性创建单独的赋值。

nr9pn0ug

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插件)检查会警告这一点。

相关问题