我有一个工作簿,其中一个或多个工作表代表customer
。我还构建了一个customer
类,以及一个将适用的工作表数据加载到每个客户对象中的方法。该方法就像这样工作
LoadCustomers()
For each worksheet in the workbook
If the worksheet contains a named range, "CustomerKey"
Create a new customer object
Set its key equal to the value in the range "CustomerKey"
Load data from the worksheet into the object
End If
Loop
End
这一切都很有效......直到某人决定在同一工作簿中制作客户工作表的副本。然后,下次打开工作簿并运行LoadCustomers()
方法时,它会找到重复的客户密钥,然后崩溃并烧毁。
在不阻止人们在工作簿中复制工作表的情况下,有什么好的解决方法?复杂性越低越好。
答案 0 :(得分:1)
除了客户对象之外,还要以{Customer}为密钥,在Dictionary
中保留对所有客户对象的引用。当您创建新的客户对象时,首先测试字典中是否已存在新的CustomerKey - 在这种情况下,跳过创建新对象,而是向用户显示消息。
使用词典,您需要添加对MS Scripting Runtime
的引用。那么你的伪代码就是这样的:
Global gDicCustomers as Dictionary
LoadCustomers()
Set gDicCustomers = New Dictionary
For each worksheet in the workbook
If the worksheet contains a named range, "CustomerKey"
If gDicCustomers.Exists(CustomerKey) Then
MsgBox "Dont screw with the customer worksheets - or at least be so decent to change the customer key, too!"
Else
Create a new customer object
Set its key equal to the value in the range "CustomerKey"
Load data from the worksheet into the object
gDicCustomers.Add CustomerKey, CustomerObject
End If
End If
Loop
End
此方法的另一个优点是您始终可以使用gDicCustomers(CustomerKey)
...