2016-01-27 3 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

@Jeremy благодарит за понимание. что вы имеете в виду о наследовании классов, я не знаком с этим. – teepee

+0

вы можете проверить эту статью. https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) – Jeremy

ответ

0

Вы правы. вам нужно использовать объектно-ориентированные понятия языка. VBA - это не полный объектно-ориентированный язык, но он имеет некоторые интересные функции. Я не могу написать вам пример, потому что есть более чем один способ сделать это. также Я хотел прокомментировать, а не писать ответ, но мой низкий рейтинг предотвратил меня. читал об объектно-ориентированных понятиях и работе с классами, разбивая экземпляры на классы, перегружая функцию различными марками и перечислениями. если вы хотите сделать это с более современным языком (например, visual basic.net, например), прочитайте о наследовании и полиморфизме - также очень важные концепции для реализации таких задач, как вы упомянули.

Смежные вопросы