2016-01-27 74 views
1

我的Excel表创建一个包含各种图层的地图,显示由线条,正方形,点和三角形组成的网络。我有一个带参数的每个创作功能,如使用类对象制作不同的形状

cellLocation As Range '(takes a given cell location) 
shapeType As String '(oval, triangle, rectangle) 
Color     '(red, black, whatever) 
sizeFactor As Double '(factors the shape size as a function of cell's width) 

我只是了解现在的类,但不知道是否班会在这种情况下是有用的,我怎么可能用它们来简化我的代码,而不是具有6个不同参数等的功能。

本来我有这样的功能:

Function CreateWell(cellRng As Range, wellName As String) 
'creates a square of particular color, size, etc in the cellRng and names it wellName 

Function CreateCompressor(cellRng As Range, compName As String) 
'creates an oval of particular color, size , etc. similar to other func. 

然后,因为我的这些其中唯一的变化是颜色,大小,形状等我试图使整体功能约5:

Function CreateShape(cellRng As Range, shpName As String, _ 
      shpColor As String, shpSize as double, shpType As string) 

但这似乎是混乱的(太多的论据)。雇用类如何清理这种类型的代码?

+0

我会说不。原因是VBa/VB6在继承方面没有真正的类支持,并且对于你正在做的事情,使用泛型函数来做到这一点很好。此外,也许看看可选参数,所以一切都不必传入。 – Jeremy

+0

@杰瑞米感谢您的洞察力。你对类继承有什么意义,我对此并不熟悉。 – teepee

+0

你可以查看这篇文章了。 https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) – Jeremy

回答

0

你是对的。你需要使用面向对象的语言概念。 VBA不是一个完整的面向对象的语言,但它有一些很好的功能。我不能给你写一个例子,因为有更多的方法可以做到这一点。也我想评论,而不是写一个答案,但我的低评级阻止我。 阅读关于面向对象的概念和使用类,使用不同的邮票和枚举将实例包装到类的重载函数中。如果你想用更现代的语言来做(比如像visual basic.net),请阅读关于继承和polymorphizem的内容 - 这些也是非常重要的概念,用于实现像你提到的任务。

相关问题