Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 有床单的基础课吗_Excel_Vba - Fatal编程技术网

Excel 有床单的基础课吗

Excel 有床单的基础课吗,excel,vba,Excel,Vba,我已经编写了一个基本的例程,可以执行一些页面格式设置(设置页眉和页脚等)。此例程将图纸作为第一个参数: Sub FormatSheet(Optional ws As Worksheet = Nothing, _ Optional language As String = "Deutsch", _ ...) 直到今天,所有的工作都很顺利,有人有一个带有图表的工作簿。由于您也可以为这样的工作表设置所有属性,我对自己说:“好的,没问题,我将把参数类型更

我已经编写了一个基本的例程,可以执行一些页面格式设置(设置页眉和页脚等)。此例程将图纸作为第一个参数:

Sub FormatSheet(Optional ws As Worksheet = Nothing, _
            Optional language As String = "Deutsch", _
            ...)
直到今天,所有的工作都很顺利,有人有一个带有
图表的工作簿。由于您也可以为这样的工作表设置所有属性,我对自己说:“好的,没问题,我将把参数类型更改为
sheet
,而不是
sheet
——问题已解决。但是,我找不到任何这样的
sheet
-类


我的解决方法是将参数类型更改为
Object
——这是可行的。但是,我不太喜欢这种尝试,因为对象可以是任何东西,我只想显式地允许-uuhm工作表。当然,我可以通过检查对象类型等来解决这个问题,但我的基本问题是:是否存在“父对象”“是否为任何工作表在Excel/VBA中键入类?

不幸的是,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对象所做的任何操作都对图表和工作表有效。否则,您需要在逻辑分支中处理每种情况

不幸的是,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对象所做的任何操作都对图表和工作表有效。否则,您需要在逻辑分支中处理每种情况

没有,因为不需要

如果
FormatSheet
的目的是配置工作表的
PageSetup
,则使用
PageSetup
参数,而不是整个
工作表

图表
类与
工作表
类似,具有类型为
页面设置
页面设置
属性


c、 f:尽可能少地给出一个程序来完成它的工作。您不需要整个
工作表
来配置
页面设置

因为不需要工作表

如果
FormatSheet
的目的是配置工作表的
PageSetup
,则使用
PageSetup
参数,而不是整个
工作表

图表
类与
工作表
类似,具有类型为
页面设置
页面设置
属性


c、 f:尽可能少地给出一个程序来完成它的工作。您不需要整个
工作表
来配置
页面设置

否。使用Object.Nope。使用对象。
如果对象的类型是Excel。工作表
/
如果对象的类型是Excel。图表
类型名
更安全。谢谢,这是我所期望的。正如我所说,我的例程使用
对象
-尝试,我只是不喜欢这样的事实,即我必须编写一些程序来检查类型是否有效-我认为这是编译器的工作。@FunThomas-VBA的一个缺点是不能重载函数。这基本上就是你在其他语言中处理这个问题的方式-/@编译器的工作做得非常好。
图表
工作表
之间缺少通用接口不是VBA问题,而是Excel对象模型问题。问题是你没有告诉我们你需要用图表或工作表做什么。也许
PageSetup
对象更适合使用。“最少知识”原则适用于每种语言,即使是那些支持方法重载的语言。@MathieuGuindon:我完全理解编译器完成了它的工作,我们讨论的是对象模型的问题。无论如何,你的建议很好-我可以使用
页面设置
-对象来实现我的目的。
如果obj的类型是Excel。工作表
/
如果obj的类型是Excel。图表
TypeName
更安全。谢谢,这是我所期望的。正如我所说,我的例程使用
对象
-尝试,我只是不喜欢这样的事实,即我必须编写一些程序来检查类型是否有效-我认为这是编译器的工作。@FunThomas-VBA的一个缺点是不能重载函数。这基本上就是你在其他语言中处理这个问题的方式-/@编译器的工作做得非常好。
图表
工作表
之间缺少通用接口不是VBA问题,而是Excel对象模型问题。问题是你没有告诉我们你需要用图表或工作表做什么。也许
PageSetup
对象更适合使用。“最少知识”原则适用于每种语言,即使是那些支持方法重载的语言。@MathieuGuindon:我完全理解编译器完成了它的工作,我们讨论的是对象模型的问题。不管怎样,你的建议很好-我可以使用
页面设置
-对象来实现我的目的。一如往常-说得好!您可能应该将此标记为已接受的答案,而不是我的答案。@ArcherBird公平地说,您的答案是最常见的通用解决方案,采用
PageSetup
参数是否有效取决于
FormatSheet
中发生的事情,而代码不在OP中,因此这基本上是一种暗中操作,基于OP中非常细微的细节,并假设程序遵循单一责任原则