床单有基础课吗

时间:2019-06-13 14:36:53

标签: excel vba

我编写了一个基本例程,该例程执行一些页面格式设置(设置页眉和页脚等)。此例程将工作表作为第一个参数:

Sub FormatSheet(Optional ws As Worksheet = Nothing, _
            Optional language As String = "Deutsch", _
            ...)

一切正常,直到今天有人有一本包含Chart工作表的工作簿。因为您还可以为此类工作表设置所有属性,所以我对自己说“很好,没问题,我将参数类型更改为Sheet而不是Worksheet-问题已解决。但是,我找不到任何这样的Sheet类。

我的解决方法是将参数类型更改为Object-可行。但是,我不太喜欢这种尝试,因为对象可以是任何对象,我只想明确地允许-uuhm Sheets 。当然,我可以通过检查对象类型和其他方法来解决此问题,但是我的基本问题是:Excel / VBA中是否有任何工作表的“父”类类型?

2 个答案:

答案 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对象执行的所有代码对图表和工作表均有效。否则,您需要在逻辑分支中处理每种情况。