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中非常细微的细节,并假设程序遵循单一责任原则