使用类对象制作不同的形状

时间:2016-01-27 18:47:44

标签: excel vba excel-vba

我的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)

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

2 个答案:

答案 0 :(得分:0)

你是对的。您需要使用该语言的面向对象概念。 VBA不是一个完整的面向对象语言,但它有一些很好的功能。我不能给你写一个例子,因为有更多的方法可以做到这一点。还我想评论而不是写一个答案,但我的低评价阻止了我。 阅读有关面向对象的概念和使用类,使用不同的戳记和枚举来为类重载函数。如果你想用更现代的语言(例如visual basic.net)来阅读有关继承和polimorphizem的知识 - 这也是实现你提到的任务的非常重要的概念。

答案 1 :(得分:0)

我一直在探讨如何创建可与形状一起使用的类模块的问题。我有一个MakeShape()子,其中包含许多定义形状属性的参数。正如您所说,在我添加新的论据时要使它们井然有序具有挑战性。

我问自己:类和屏幕上的形状之间是什么关系?我的工作原理是该类应在屏幕上保留形状的属性(例如,compressor.top,compressor.left,压缩机.width等)。然后,您可以创建方法(例如,compressor.draw在屏幕上创建形状)。我不太清楚一旦将形状绘制为形状类的方法,您将如何操作它(实际上,既然束缚在野外,如何将皮带保持在相同的形状对象上)。我想该对象可以具有对象属性,因此Compressor.shape将引用屏幕上的一个形状对象。到那时,我不确定是否要使用Compressor.top,compressor.shape.top或两者进行调整。我将在学习时尝试进行更新。