大佬教程收集整理的这篇文章主要介绍了VBA Excel 接口实现和继承问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的任务有点复杂,首先我会告诉你问题所在,然后我尝试了什么以及我在哪里迷路了。
假设我有三个工作表(A、B、C)。这些床单有一张桌子。该表的标题具有相似和不同的名称。标题的位置也不同,顺序很重要:
我的代码中有不同的模块(Module1、Module2...)。这些模块被分配给工作表。所以:
As-is 功能是这些模块静态引用表标题的列名 ->
我的问题是当我必须在任何工作表中添加新标题时,这是一种痛苦 ->
此时的原样功能是,由于新标题,我必须调试与工作表“A”相关的所有模块以更改列引用。在上面的示例中,我必须更改每个模块(模块 1 和模块 2)中的标题 CC、DD、FF 列引用。
所以我尝试设计一些集中的列引用存储,在其中放置与每个工作表相关的标题的列引用。模块从该商店检索列信息,因此如果任何时候弹出新标题,我都必须在此处更改标题的列引用。似乎我真的很喜欢编码:D
我最初的想法是为每个工作表创建一个 ClassModule。这个类模块会有public的功能,title列的引用是什么->
Function titleDDinsheetA() As String
titleDDinsheetA = "D"
End Function
但是正如您在示例中看到的那样,有类似的标题名称,例如“AA”存在于所有工作表中。所以我计划创建一个接口来确保标题的每个常见出现都会出现在每个类模块实现中。所以 ->
接口称为 ICommontitles
Option Explicit
Public Function titleDD()
End Function
类模块到工作表 A 称为 SheetAtitles
Option Explicit
Implements ICommontitles
Public Function ICommontitles_titleDD()
ICommontitles_titleDD = "D"
End Function
但是正如你在上面的标题结构中看到的,我有工作表指定的标题,比如工作表 A 中的 FF。还有所有工作表的子集中存在的标题 -> 工作表 A 和 C 中存在标题 CC。所以我尝试向 SheetAtitles 类模块添加自定义公共函数,例如 ->
Option Explicit
Implements ICommontitles
Public Function ICommontitles_titleDD()
ICommontitles_titleDD = "D"
End Function
Public Function titleCC()
titleCC = "C"
End Function
此时我开始出现错误。上面的例子给出了这个:
Sub test()
Dim TESTCls As ICommontitles
Set TESTCls = New SheetAtitles
MsgBox TESTCls.titleDD
MsgBox TESTCls.titleCC
End Sub
此时,我在 @H_200_85@msgBox TESTCls.titleCC 行遇到了类似 未找到方法或数据成员 的错误。我试图将实例化更改为:
Sub test()
Dim test_cls As SheetAtitles
Set test_cls = New SheetAtitles
MsgBox TESTCls.titleDD
MsgBox TESTCls.titleCC
End Sub
此时我遇到了同样的错误,但在 @H_200_85@msgBox test_cls.titleDD 行。
我尝试做一些类似接口继承的事情。因此,我创建了一个特定于工作表的界面,并在 SheetAtitles 中实现了它。所以:
接口称为 ICommontitles
Option Explicit
Public Function titleDD()
End Function
接口称为 ISheetAtitles
Option Explicit
Implements ICommontitles
Public Function ICommontitles_titleDD()
End Function
Public Function titleCC()
End Function
类模块到工作表 A 称为 SheetAtitles
Option Explicit
Implements ISheetAtitles
Public Function ISheetAtitles_ICommontitles_titleDD()
ISheetAtitles_ICommontitles_titleDD = "D"
End Function
Public Function ISheetAtitles_titleCC()
ISheetAtitles_titleCC="C"
End Function
但是此时我得到了编译错误,例如:对象模块需要为接口 ISheetAtitles 实现 ICommontitles_titleDD。
所以我在这一点上迷路了 :D 首先,当我在 classmodule 中实现一个接口时,我根本不明白为什么我不能在 classmodule 上创建自定义公共函数。我也不明白为什么会出现上述错误。另外,我来自编程世界的 Java 方面,还没有深入研究 VBA,所以我可能会错过一些基本的东西。
大家有什么想法吗?
rgds,
'孩子
更简单的方法:
Enum Sheet1Headers
AA = 1
BB = 2
CC = 3
End Enum
Enum Sheet2Headers
AA = 1
BB = 3
CC = 5
DD = 7
End Enum
Enum Sheet3Headers
AA = 1
BB = 3
XX = 4
DD = 7
End Enum
然后您可以执行以下操作:
With Sheet1.Cells(2,Sheet1Headers.AA)
如果您还想要使用列字母的选项:
Function Letter(v As Long)
Letter = replace(Cells(1,v).Address(false,falsE),"1","")
End Function
那么:
? letter(Sheet2Headers.bB) 'C
以上是大佬教程为你收集整理的VBA Excel 接口实现和继承问题全部内容,希望文章能够帮你解决VBA Excel 接口实现和继承问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。