程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了VBA Excel 接口实现和继承问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决VBA Excel 接口实现和继承问题?

开发过程中遇到VBA Excel 接口实现和继承问题的问题如何解决?下面主要结合日常开发的经验,给出你关于VBA Excel 接口实现和继承问题的解决方法建议,希望对你解决VBA Excel 接口实现和继承问题有所启发或帮助;

我的任务有点复杂,首先我会告诉你问题所在,然后我尝试了什么以及我在哪里迷路了。

假设我有三个工作表(A、B、C)。这些床单有一张桌子。该表的标题具有相似和不同的名称。标题的位置也不同,顺序很重要:

  • 表标题:AA、BB、CC、DD、FF
  • B 表标题:BB、AA、DD、EE
  • C 表标题:AA、DD、BB、CC

我的代码中有不同的模块(Module1、Module2...)。这些模块被分配给工作表。所以:

  • 模块 1、模块 2 -> 一张表
  • 模块 3、模块 4 -> B 表
  • @H_652_7@module5、Module6 -> C 表

As-is 功能是这些模块静态引用表标题的列名 ->

  • 模块 1 和模块 2 '知道'表'A'中的标题'DD'在'D'列。
  • 模块 3 和模块 4 '知道''B' 表中的标题'DD' 位于'C' 列。
  • “C”表中的模块 5 和模块 6“知道”标题“DD”位于“B”列。
  • 等等......

我的问题是当我必须在任何工作表中添加新标题时,这是一种痛苦 ->

  • 工作表 A 新标题 -> AA、BB、XX、CC、DD、FF

此时的原样功能是,由于新标题,我必须调试与工作表“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,请注明来意。
标签: