我编写了一个基本例程,该例程执行一些页面格式设置(设置页眉和页脚等)。此例程将工作表作为第一个参数:
Sub FormatSheet(Optional ws As Worksheet = Nothing, _
Optional language As String = "Deutsch", _
...)
一切正常,直到今天有人有一本包含Chart
工作表的工作簿。因为您还可以为此类工作表设置所有属性,所以我对自己说“很好,没问题,我将参数类型更改为Sheet
而不是Worksheet
-问题已解决。但是,我找不到任何这样的Sheet
类。
我的解决方法是将参数类型更改为Object
-可行。但是,我不太喜欢这种尝试,因为对象可以是任何对象,我只想明确地允许-uuhm Sheets 。当然,我可以通过检查对象类型和其他方法来解决此问题,但是我的基本问题是:Excel / VBA中是否有任何工作表的“父”类类型?
答案 0 :(得分:3)
没有,因为没有必要。
如果FormatSheet
的目的是配置工作表的PageSetup
,则采用PageSetup
参数而不是整个Worksheet
。
Chart
类与Worksheet
类似,具有类型PageSetup
的{{1}}属性。
c.f。 Principle of Least Knowledge / Law of Demeter:尽可能少地执行程序。您不需要整个PageSetup
来配置Worksheet
。
答案 1 :(得分:2)
不幸的是,在Excel.Chart和Excel.Workhseet的层次结构中没有公共对象。因此,在获取参数时,您需要将其作为子签名中的对象。但是,如果您确实不喜欢代码中的通用对象,则可以添加一个段,将输入对象分类为工作表或图表。
Sub FormatSheet(Optional obj As Object = Nothing, _
Optional language As String = "Deutsch", ...)
Select Case TypeName(obj)
Case "Worksheet"
Dim ws As Worksheet
Case "Chart"
Dim cht As Chart
Case Else
End Select
Set ws = obj '//work with this throughout your code.
End Sub
您将要确保对ws对象执行的所有代码对图表和工作表均有效。否则,您需要在逻辑分支中处理每种情况。