VBA
125
To complete our example, you can add a row to the BatchHistory table (including the current date and batch name), 
the posted and exception totals from the BeforePostRecord and HandleException events, and the current User ID.
VBA Support in Import
VBA in Import provides four events so you can write code that executes during the importing process. You can 
also create exceptions, preventing unwanted records from entering the database. You can also specify the exception 
message so end-users can determine what is wrong with the record. In addition, you can make changes to a record 
that was previously an exception, and instruct Import to try again. The diagram below shows the events and the 
order in which they fire.
Private Sub BatchVBARecord_AfterPost(ByVal sBatchName As String, _
ByVal lNumRecsPosted As Long, _
ByVal lNumExceptions As Long)
Dim oBatch As Recordset
If mbMaintainHistory Then
'Update the BatchHistory database with the details of the current batch
With moDB
Set oBatch = .OpenRecordset("BatchHistory")
With oBatch
.AddNew
.Fields("RunDate") = Now()
.Fields("BatchName") = sBatchName
.Fields("PostedCash") = mcurPostedCash
.Fields("PostedOther") = mcurPostedOther
.Fields("ExceptionCash") = mcurExceptionCash
.Fields("ExceptionOther") = mcurExceptionOther
.Fields("UserID") = REApplication.SessionContext.CurrentUserID
.Update
End With
oBatch.Close
Set oBatch = Nothing
End With
End If
moDB.Close
Set moDB = Nothing
End Sub
E1. BeforeImport
E2. BeforeImportRecord (If bCancel is set to True then cancel the save and save the custom 
exception message to later be shown on the exception report)
If there was an exception or bCancel was set to True in the BeforeImportRecord then 
E3. HandleException (If bRetry set to True, return to step E2)
E4.AfterImport
Pdf text select tool - search text inside PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn how to search text in PDF document and obtain text content and location information
search pdf documents for text; how to make a pdf document text searchable
Pdf text select tool - VB.NET PDF Text Search Library: search text inside PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn How to Search Text in PDF Document and Obtain Text Content and Location Information in VB.NET application
search pdf files for text; pdf search and replace text
C
HAPTER
2
126
In the following example, we create two text files. One stores the name and social security number of imported 
records; the other accepts records that are exceptions.
The BeforeImport Event
The BeforeImport event fires once, just before the importing of the records to the database begins. You can start 
any process you want to have in place while importing. For example, if you are also importing some of this data 
into a separate database, you can use this event to connect to that database.
The event passes sImportName. This is a string that represents the name of the import in progress. It also passes 
lImportType, from the enum bbVBAImportTypes, which tells you the type of the import, such as Constituent or 
Constituent Phone. The last parameter is bCancel which, if set to True, discontinues the importing process. 
The BeforeImportRecord Event
The BeforeImportRecord event fires just before each row in an import file is imported into the database. You can 
access the underlying data object after it is created, but before it is added to the database. You may use this to send 
some information to a separate database. You can use it to verify that some specific Business Rules for your 
organization have been met. If the specific rules have not been met, you can stop the record from being imported 
into the database.
The event passes sImportName. This is a string that represents the name of the import in progress. It also passes 
ImportType, from the enum bbVBAImportTypes, which tells you the type of the import, such as Constituent or 
Constituent Phone. The next parameter is oDataObject; the type of this variant depends on the import type. You 
can fully access the entire object model for that object type at this time. You can change information, use VBA to 
make a calculation and add that information to the record, or check to make sure all the information is entered 
following your organization’s Business Rules.
Public Sub ImportVBARecord_BeforeImport(ByVal sImportName As String, _
ByVal lImportType As bbVBAImportTypes, _
ByRef bcancel As Variant)
'For constituent import files we need to provide a list of constituents
'  imported and those that were exceptions.  This routine opens the two text 
files
'  that will hold then name and SSN of the records processed.
If lImportType = bbImportType_Constit Then
If MsgBox("Create import summary files?") = vbYes Then
'mlExcFile and mlImpFile are module level variables 
'    that hold the two file handles
mlExcFile = FreeFile
Open "C:\Exc_" & sImportName & ".IMP" For Append As mlExcFile
mlImpFile = FreeFile
Open "C:\Imp_" & sImportName & ".IMP" For Append As mlImpFile
End If
End If
End Sub
C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
Tools Tab. Item. Name. Description. 1. Select tool. Select text and image on PDF document. 2. Hand tool. Pan around the document. Go To Tab. Item. Name. Description
text searchable pdf file; how to make a pdf file text searchable
VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
Tools Tab. Item. Name. Description. 1. Select tool. Select text and image on PDF document. 2. Hand tool. Pan around the document. Go To Tab. Item. Name. Description
pdf find highlighted text; how to select all text in pdf file
VBA
127
If you do not want this particular record to add to the database, you can set bCancel equal to True. The record is not 
added to the database and lists as an exception on the Exception Report. You can even set sExceptionMessage 
equal to reason for the exception so it prints on the Exception Report and informs your end-user what is wrong with 
this record. Any time a record is flagged as an exception, the “The HandleException Event (Active Import)” on 
page127 event fires.
Here, we write the Name and Social Security Number of the imported record to a text file.
The HandleException Event (Active Import)
The HandleException event fires whenever a record in an import is flagged as an exception. You change the record 
to correct the cause of the exception and try again. If you transferred information for each record to an external 
database in the BeforeImportRecord event, you may want to remove that information using this event.
The event passes sImportName. This is a string that represents the name of the import in progress. It also passes 
lExceptionCode, from the enum bbVBAImportExceptionCodes, which tells you the reason for the exception. The 
next parameter is oDataObject, the data type of this variant depends on the type of import, such as Constituent or 
Constituent Phone. You can fully access the entire object model for that object type at this time. The last parameter 
is bTryAgain. If set to True, TheRaiser’s Edge attempts to import the updated record to the database again. It is 
important to make sure the cause of the exception has been fixed, so there is no possibility of your end-user getting 
caught in a loop.
Public Sub ImportVBARecord_BeforeImportRecord(ByVal sImportName As String, 
ByVal lImportType As bbVBAImportTypes, _
oDataObject As Variant, _
ByRef bCancel As Variant, _
ByRef sExceptionMessage As Variant)
Dim oRec as CRecord
'mlImpFile is a module level variable; a file handle 
'    for the imported records file
If mlImpFile > 0 Then
Set oRec = oDataObject
Print #mlImpFile, oRec.Fields(RECORDS_fld_FULL_NAME) & "," & _
oRec.Fields(RECORDS_fld_SOCIAL_SECURITY_NO)
Set oRec = Nothing
End If
End Sub
VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.
and use the PDF page(s) extraction tool. As String = Program.RootPath + "\\" 1.pdf" Dim doc As PDFDocument = New PDFDocument(inputFilePath) ' Select pages.
how to search a pdf document for text; pdf find and replace text
C# WPF PDF Viewer SDK to annotate PDF document in C#.NET
Default create. Click to select drawing annotation with default properties. Other Tab. 17. Text box. Click to add a text box to specific location on PDF page.
pdf find text; search pdf files for text programmatically
C
HAPTER
2
128
Here, we write the Name and Social Security Number of the exception record to a text file.
The AfterImport Event
The AfterImport event fires once after the entire importing process is complete. You can clean up any objects or 
connections to other databases you use while the import processes. You may want to use this event to start a 
process to send a letter to new constituents who have been imported or send an email reminding the staff that phone 
numbers have been updated.
The event passes sImportName. This is a string that represents the name of the import in progress. The event also 
passes two longs; lNumRecsImported and lNumExceptions. These represent the number of records that add 
successfully and the number of records that are exceptions, respectively.
Public Sub ImportVBARecord_HandleException(ByVal sImportName As String, _
ByVal lExceptionCode As 
bbVBAImportExceptionCodes, _
oDataObject As Variant, 
ByRef bTryAgain As Variant)
Dim oRec As CRecord
'mlExcFile is a module level variable; a file handle for the exception file
If mlExcFile > 0 Then
Set oRec = oDataObject
Print #mlExcFile, oRec.Fields(RECORDS_fld_FULL_NAME) & "," & _
oRec.Fields(RECORDS_fld_SOCIAL_SECURITY_NO)
Set oRec = Nothing
End If
End Sub
VB.NET PDF - Annotate PDF with WPF PDF Viewer for VB.NET
Default create. Click to select drawing annotation with default properties. Other Tab. 17. Text box. Click to add a text box to specific location on PDF page.
pdf text search tool; how to select text in pdf reader
C# HTML5 Viewer: Load, View, Convert, Annotate and Edit OpenOffice
Office PowerPoint (.ppt, .pptx) on webpage, Convert CSV to PDF file online C#.NET RasterEdge HTML5 Viewer particular text tool can select text on all
convert pdf to searchable text; convert a scanned pdf to searchable text
VBA
129
For this example, we close the text files and inform the end-user that the import files have been created.
VBA Support in Reports and Mail
This section provides two events that fire before and after the actual processing of the report or mail function. You 
can prevent the report or mail function processing, and if you are exporting information, you can specify that the 
name of the export file appears so you can automatically graph the information in a spreadsheet.
The BeforeProcess Event
Reports and Mail support the same VBA events. The BeforeProcess event fires just before the mail or report 
function begins to process. You can cancel the process before it begins. This is helpful if you want to implement a 
customized security system for these functions.
The BeforeProcess event passes four parameters. The first is lReportType/lMailType, a long that can be used with 
the enum EReR_ReportTypes to determine the type of report or mail function being run (such as the Gift Entry 
Validation report or Labels mail task). The next parameter is sParamName. This is a string that represents the 
name of the actual parameter file used for the report or mail function. Next is lAction, a long that, when used with 
the enum EReR_ProcessOptions, tells you if the user is printing, print previewing, or exporting the report or mail 
function. The last parameter is bCancel that, if set to True, cancels the entire process before it starts.
Public Sub ImportVBARecord_AfterImport(ByVal sImportName As String, _
ByVal lNumRecsImported As Long, _
ByVal lNumExceptions As Long)
If mlExcFile > 0 Then 
Close mlExcFile
Close mlImpFile
MsgBox "Import summary files created"
End If
End Sub
VB.NET PowerPoint: VB Codes to Create Linear and 2D Barcodes on
then apply PPT slide getting method to select the target PowerPoint PDF 417 barcode library is a mature and offers users the human readable text setting option
make pdf text searchable; convert pdf to word searchable text
TIFF to PDF Converter | Convert TIFF to PDF, Convert PDF to TIFF
for TIFF-PDF Conversion; Able to preserve text and PDF Open TIFF to PDF Converter first; Load a TIFF Select "Convert to PDF"; Select "Start" to start conversion
how to select text in pdf reader; how to select text on pdf
C
HAPTER
2
130
In this example, we allow end-users to run the Gift Detail and Summary and Gift Entry Validation reports only 
after 5:00 PM (when we are sure gift entry has been completed for the day). 
The AfterProcess Event
Reports and Mail support the same VBA events. The AfterProcess event fires after the mail or report function 
finishes processing and displays its output. If the function does not have output and “No Records Meet Criteria” 
displays when processing is done, the AfterProcess event does not fire. 
The AfterProcess event passes four parameters. The first is lReportType/lMailType, a long that can be used with 
the enum EReR_ReportTypes to determine the type of report or mail function being run (such as the Gift Entry 
Validation report or Labels mail task). The next parameter is sParamName. This is a string that represents the 
name of the actual parameter file used for the report or mail function. Next is lAction, a long that, when used with 
the enum EReR_ProcessOptions tells you if the end-user is printing, print previewing, or exporting the report or 
mail function. The last parameter is sExportFileName, which if the Action performed was exporting, contains the 
full path for the export file name.
Private Sub ReportsVBARecord_BeforeProcess(ByVal lReportType As Long, _
ByVal sParamName As String, _
ByVal lAction As Long, _
bCancel As Boolean, 
ByVal Reserved As Variant)
Select Case lReportType
Case ReR_GiftDetailandSummaryReport, ReR_GiftEntryValidation
If Time() < "5:00 PM" Then
MsgBox "This report can only be run after 5:00 pm."
bcancel = True
End If
End If
End Sub
XDoc.HTML5 Viewer for .NET, All Mature Features Introductions
NET developers to search text-based documents, like PDF, Microsoft Office The well built-in text search tool is compatible with most Text Select, Copy & Paste.
converting pdf to searchable text format; search pdf files for text programmatically
VB.NET PDF - Convert PDF Online with VB.NET HTML5 PDF Viewer
tiff, VB.NET read PDF, VB.NET convert PDF to text, VB.NET Export PDF to Tiff file. Users are allowed to set scaling value and select compress mode: UnCompressed
cannot select text in pdf; pdf searchable text converter
VBA
131
In this example, after exporting Today’s Reports, a copy is sent by email to the Director of Development using the 
Microsoft Outlook Object Library.
VBA Support in Query and Export
You can write code that executes for each row in Query and Export. With these macros, you are able to detect the 
start of the process, as well as modify the results using the special VBA user fields provided. 
Private Sub ReportsVBARecord_AfterProcess(ByVal lReportType As Long, _
ByVal sParamName As String, _
ByVal lAction As Long, _
ByVal sExportInfo As String, _
ByVal Reserved As Variant)
On Error GoTo ehSendReport
'You will need to set a reference to Microsoft Outlook 9.x Object Library
Dim oOutlook As Outlook.Application 'This starts outlook.
Dim oMailItem As MailItem
'If the user is printing the 'Today's Reports' then
If sParamName = "Today's Reports" Then
If Len(sExportInfo) > 0 Then
'Create the objects needed for email
Set oOutlook = CreateObject("Outlook.Application")
Set oMailItem = oOutlook.CreateItem(olMailItem)
With oMailItem
.To = "Development.Director@Blackbaud.com"
.Subject = sParamName
.Attachments.Add (sExportInfo)
.Send
End With
'Close all object references
Set oMailItem = Nothing
Set oOutlook = Nothing
End If
End If
Exit Sub
ehSendReport:
MsgBox Err.Description, vbOKOnly
End Sub
C
HAPTER
2
132
VBA Support in Query
Query’s VBA support attaches a specially defined VBA macro to a query. When various operations are performed 
using the query (such as RunRefresh, or Export), this special macro is called. By selecting Tools, Run Macro 
from the query menu bar, the end-user can run the macro associated with the active query without having to 
perform another operation in query.
Using VBA, you can add customized user fields to a query’s output. This feature works in concert with creating a 
macro. On the Output tab, the end-user can select a special field, which applies to output only. This is called a VBA 
user field. You can write a macro to populate this field with data from VBA. The data shows up anywhere in 
TheRaiser’s Edge that query results are displayed and processed (such as QueryExport, and the search screen) 
Remember, it is important to note this field cannot be used as a filter.
An example of this feature is to add custom fields to TheRaiser’s Edge search screen to pull data from external 
databases. Also, when exporting data directly from Query to Crystal Decision’s Crystal Reports, VBA provides the 
ability to add fields if you have performed calculations in VBA. This way, the data gets to Crystal in a useful 
format.
Creating a Query Macro
To create a query macro, create a Public Sub in either the User_Macros or System_Macros module. This 
subroutine can accept only one parameter that is an IBBQueryRow object (for more information, see the 
Programmer’s Reference in the help file). When the macro is run, either by running the query or accessing the 
macro directly from Tools, Run Macro on the query menu bar, it is called (Number of Rows in the query) two 
times. The first time it is called, it returns a .BOF = True (Begin Of File) condition. This allows you to perform any 
initialization operations. The event is then called for each row in the query. It is important to remember nothing 
you do here affects membership in the query. That is determined by the criteria of the query. The macro is called 
the last time with a .EOF = True (End Of File) condition so you can perform any shutdown or cleanup operations. 
The following code sample is an example of this. 
Please remember....
Due to the fact that query results are displayed “as needed” on the Results tab, for the macro to run 
completely through all query results, the end-user needs to scroll to the end of the query or run the 
macro by selecting Tools, Run Macro from the query menu bar.
'This sample requires a reference to Excel Object Library.
Option Explicit
Private moExcel As Excel.Application
Private moWorksheet As Excel.Worksheet
Public Sub SendQueryResultsToExcel(oRow As IBBQueryRow)
If oRow.BOF Then
'Opens Excel
Set moExcel = CreateObject("Excel.Application")    
moExcel.Visible = True
'Add a new worksheet
moExcel.Workbooks.Add                              
Set moWorksheet = moExcel.Worksheets(1) '.Add
VBA
133
Refer to the IBBQueryRow (for more information, see the Programmer’s Reference in the help file) object for 
additional properties you may find helpful when you are moving through the results of the query. 
VBA User Field (Query)
One VBA user field is included in the field list per query type. If this field is selected as an output field, it is a 
read/write field you can manipulate using the VBA macro. This is the only field in the query results the end-user has 
write access to during query processing. Query does not put anything in this field. To populate this field, a VBA 
macro must be used. 
Remember the VBA user field lists in the Available Fields box only once per query type. However, it can be 
selected more than one time and follows standard naming conventions. This way, more than one user defined field 
can be specified per query. 
Code Sample
This macro illustrates an example of using BOF (Begin of File), EOF (End of File), and the VBA user field. The 
one parameter for the macro must be of type IBBQueryRow (for more information, see the Programmer’s 
Reference in the help file). For a constituent query with three output fields selected (in the following order): 
Constituent Information 
1. Constituent Information, Name 
2. Constituent Information, Age 
'Fills the first row with the field names from the query
Dim lHeads As Long                                 
For lHeads = 1 To oRow.FieldCount - 1              
moWorksheet.Cells(1, lHeads) = oRow.FieldName(lHeads)
Next lHeads
ElseIf oRow.EOF Then
' Post Process Some Results In Excel
moWorksheet.Columns("A:E").EntireColumn.AutoFit
'Clean up
Set moWorksheet = Nothing
Set moExcel = Nothing
Else
' Fill In The Details
Dim l As Long
For l = 1 To oRow.FieldCount - 1
'Uses the data from the query to move to Excel
moWorksheet.Cells(oRow.RowNum + 1, l) = oRow.Field(l)
Next l                                                   
End If
End Sub
C
HAPTER
2
134
3. VBA User Field
¾
When the query runs: 
1. The message “Begin processing” with an OK button displays. When the end-user clicks OK, the query 
continues. 
2. For each row, if the second query field (Age) is greater than 55, the third query field (VBA user field) is set 
to “Senior citizen discount”. 
3. The message “End processing” with an OK button displays. 
Remember when viewing query results on the Results tab, the EOF (End of File) does not fire unless the end-user 
scrolls to the end of the result set. EOF fires when the end-user reaches the end of the result set, or if the query is 
closed.
VBA Support in Export
Like QueryExport’s VBA support attaches a specially designed VBA macro to an export. When the export is run, 
this macro is called. You can add customized user fields to your export using VBA. This is accomplished by 
attaching a macro to the export. On the Output tab of the export record, the end-user can select a special field that 
applies to output only. This is called a VBA user field. You can write a macro to populate this VBA user field with 
data from another database or perform a calculation that is contained in the export file. This feature can only be 
used with “flat” style exports. For more information about “flat” style exports, see the Query & Export Guide
Public Sub UserQueryMacro(oQueryRow As IBBQueryRow)
Const NAME_FIELD = 1
Const AGE_FIELD = 2
Const VBA_FIELD = 3
If oQueryRow.BOF Then
'This code will be processed once (at the beginning of 
'  the query result set).
MsgBox "Begin processing"
ElseIf oQueryRow.EOF Then
'This code will be processed once (at the end of the 
'  query result set).  
MsgBox "End processing"
Else
'This code will be processed once per row
If oQueryRow.Field(AGE_FIELD) > 55 Then
'You can only write to a "VBA User field"
oQueryRow.Field(VBA_FIELD) = "Senior citizen discount"
End If 
End If
End Sub
Documents you may be interested
Documents you may be interested