At one time I was very keen on working with VBA on import. I now steer clear of this wherever possible! There are many reasons.
In VBA you able to hook on to the before import event and then if there is an error you can create your own exception. This is really useful as it is possible that RE does not do all the validation checks that you may want. You can take some data check it and create an exception if it is not correct. Alternatively you could change the value so that it is correct. For some unexplained reason every so often though the exception message is not reproduced. Even though I set it it doesn’t come out on the control report. Blackbaud have not been able to repeat this (nor have I consistently) but it has happened at two different clients and it is a mystery.
When debugging some objects make the RE7VBA environment crash. For some reason you cannot initialize a CIndividual2 object with a session context as it will crash. Debugging in the RE7VBA tool is great otherwise. In RE you cannot debug imports step by step as it is a modal window (so you cannot break into another window in RE) if you do it through the RE7VBA tool you are not in the same modal area.
Another issue I have had is doing certain types of imports. I have done a constituent import that has attributes. I know that some of the values of the attribute’s description coming into the import do not correspond to RE’s code table values for this attribute. We could update the source but this is a drop down on a website and we don’t want to burden the user with obscure database values. Instead we try to capture the attribute error that is generated. So far so good. Now that we have it we change the value and try again. What happens now? We are sent the original values! After submitting a case to Blackbaud and they doing some research they tell me it works by design. The knowledgebase article BB268688 explains this. If there is an error when the values in the import file are assigned to the object then the exception cannot be corrected. However if there is an exception when we try to save the object then we can correct them. This lead me to have to map the import file to a field that was plain text and then on the before import method reassign them to the attribute!
I now prefer to do the whole import myself unless it is a very simple validation/change that is required. This is a long winded process but in the end it saves time.
I have now discovered that as of version 7.82 you can set up batches via the API. This is a great compromise as it allows you use your own validation routines combined with the visual verification and moderation that Batch allows for. Those that have lots of customizations, not surprisingly, tend to upgrade later on so it may be a while before I am able to test this functionality in a real situation but the outlook seems promising