在VBA中验证类属性时的最佳做法?

时间:2014-11-10 15:37:13

标签: vba excel-vba excel

我没有多少课程,所以我认为这是初学者的问题。

我有一个具有以下属性的类:

Private pAvtalsslut As Date

''''''''''''''''''''''
' Avtalsslut property
''''''''''''''''''''''
Public Property Get Avtalsslut() As Date
    Avtalsslut = pAvtalsslut
End Property
Public Property Let Avtalsslut(Value As Date)
    pAvtalsslut = Value
End Property

当我将属性值设置为此类的对象时,我在我的潜艇中使用以下验证:

    If IsDate(exportWks.Cells(r, lColumnAvtalsslut)) Then
        avtal.Avtalsslut = exportWks.Cells(r, lColumnAvtalsslut)
    End If

我这样做是因为否则当我读取的单元格为空时我会收到错误。

当我从这个类的对象中获取属性值时,我在我的潜艇中使用以下验证:

    If avtal.Avtalsslut <> 0 Then
        wUnderlag.Cells(row, 3) = avtal.Avtalsslut
    End If

我这样做是因为我不想在没有日期的地方写零。在这种情况下,我希望将单元格留空。

现在回答我的问题。这些验证有哪些最佳实践?我应该把我的班级还是我的班级?如果他们应该在我的班上,那应该怎么看?

(PS。验证这些检查的正确词汇量吗?)

1 个答案:

答案 0 :(得分:3)

一般来说,最好让类在获取或设置属性之前验证数据,然后在数据不符合规范时引发错误。这样,您无需在使用课程时在代码库中重复验证代码。

但是,在这种情况下,您尝试避免类型不匹配错误。因此,您需要将属性类型更改为Variant而不是Date,然后您会惊讶并混淆使用您的课程期望提供/接收日期的任何人。如果您需要将它用于任何读取/写入扩展表单的内容,这会违反最少惊喜的原则并使该类无用。

所以,都没有。让我们选择C。

创建第二个类(例如,MyClassReaderWriter),其作用是在现有类和电子表格之间充当中介。这允许两件事。

  1. 您不必对现有课程进行任何更改,并且在其他情况下仍然有用。
  2. 通过将逻辑放在一个特定的位置来干扰您的代码。