Migrating from VBA to .NET Desktop Add-Ins
Upcoming SlideShare
Loading in...5

Like this? Share it with your network

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads


Total Views
On Slideshare
From Embeds
Number of Embeds



Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

    No notes for slide


  • 1. Migrating from VBA to .NET
    Desktop Add-ins
    Lesley Bross
    Portland State Universitylbross@pdx.edu
    March 29, 2011
  • 2. Project background
    CSAR engaged in a multi-year agreement with the USDA-NRCS, National Weather and Climate Council (NWCC) to develop a spatial decision support system (SDSS)
    The new SDSS is intended to replace the USGS GIS Weasel tool used by NWCC to improve water forecast accuracy
    The project was funded by USDA-NRCS National Water and Climate Center
    (CESU Agreement #: 68-7482-10-514)
  • 3. More background
    GIS Weasel’s last release was in 2003
    The GIS Weasel is used to:
    Prepare watershed GIS layers for Areas Of Interest (AOI)
    Delineate Hydrological Response Units (HRU)
    Generate HRU physical parameters that are used in hydrological models to forecast water supply
    • Basin Analysis GIS (BAGIS) phase completed 2009-2010 (See Dr. Duh’s session tomorrow at 1:30p)
    • 4. HRU Delineation phase began summer 2010
  • Our conundrum
    VBA is going away
    But we want to be able to use all that VBA code we just finished writing for the AOI definition phase …
    Project requirements
    Users are accustomed to using ArcMap in their workflow and wish to continue doing so
    Solution is easy to share (e-mail an .mxt)
    Installation cannot modify the Windows registry (security)
    Simple development framework
  • 5. What about .NET add-ins ?
    Install as plug-in to ArcMap; No Windows installation required
    Single file - simple to distribute
    E-mail attachment
    Well-known folder (network location)
  • 6. What about .NET add-ins ?
    3) .NET add-in Development framework is robust and relatively easy-to-use
    Wizards assist with adding components
    No need to write COM interfaces
    Benefits of .NET development environment (Intellisense, debugging, unit testing)
    Access to entire library of VB .NET form controls (DataGridView, Tooltip, etc.)
  • 7. Development environment
    ArcMap 10.0 desktop client
    Microsoft IDE (Integrated Development Environment)
    Visual Basic 2008 Express (free)http://www.microsoft.com/express/downloads/
    Visual Studio 2010 Professional (free for 90 days with registration)
    • .NET framework: installed by default with Microsoft IDE
    • 8. ArcObjects 10 SDK
    Available on ArcMap Install CD
    May also want to install VBA support
  • 9. IDE Express vs. Pro - ArcGIS Templates
    Packaging: Packaging for COM (.dll) deployment; Missing from Express but not needed for add-ins
    ArcGIS Snippet Finder doesn’t work as documented in Express
    Screenshots in documentation aren’t quite the same in Express
    Debugger configured manually in Express (ArcGIS templates can cover this)
  • 10. C# or VB .NET ?
    Familiarity with Visual Basic from using VBA made VB .NET an easier transition
    VB .NET provided a migration path for our existing VBA scripts
    Industry trends towards C# - ESRI Dev Summit
  • 11. Converting VBA code to use in .NET
    1) Export forms and code modules from inside the VBA editor. Forms cannot be converted but their associated code can be exported.
  • 12. Converting – step 2
    2) Dust off an old copy of Visual Basic 6 and create a new project. Add your exported VBA files to this project. “Washing” the code through VB6 allows you to run the VB upgrade wizard.
  • 13. Converting – step 3
    3) Open the VB 6 project in Visual Basic 2008. The .NET version of VB will recognize the VB 6 project and volunteer to upgrade it to Visual Basic 2008.
  • 14. Converting – step 4
    4) Create a new Visual Basic 2008 ArcMap Add-In project per ESRI guidelines
  • 15. Converting – step 5
    5) Recreate the forms from the VBA project. Note: using the same field names results in less work when migrating the code. The add-in framework supports both ESRI DockableWindow and Windows Form objects for the UI.
  • 16. Converting – step 6
    6) Copy and paste the code from the converted project to the new project. Clean up warnings and review comments added by the conversion routine
  • 17. Language differences
    There are lots! (see references at end)
    Application: Application -> My.ArcMap.Application
    Document: ThisDocument -> My.ArcMap.Document
    Exception handling: On Error GoTo / On Error Resume Next ->Try Catch Finally and throwing exceptions
  • 18. Our solution
    Leave BAGIS (phase 1) tools in VBA with their toolbar
    Develop HRU delineation tools on a separate toolbar with VB .NET
    Convert re-usable functions from VBA to VB .NET using aforementioned process
    Forms were not converted
  • 19. Introducing HDGIS
  • 20. Unit Testing
  • 21. What is unit testing?
    Testing individual pieces/modules of code (functions or subs)
    Provide known inputs and check output for expected results; Replaces user interface
    NUnit: open source testing framework for .NET; Integrates with VB Express/Visual Studio. It’s free!
  • 22. Using NUnit
    Download/install .exe from the NUnit website
    Create a project separate from ArcObjects project; No templates
    Add nunit.framework to project assemblies
    Set NUnit as debug application; You can step through code while running Nunit tests
    NUnit debug configuration will vary depending on IDE
  • 23. NUnit organization
    Testing subs are in separate module from code they are testing
    Testing subs are stored in test folder
    Test data may also live in test project
    Test project separate from Add-In project
    Code modules are copied from test project to Add-In project when are validated
    No testing subs/data in Add-In project; No forms in test project
  • 24. TextFixtureSetUp
    • Runs before tests are conducted; Initializes ArcMap
  • A unit test
  • 25. TextFixtureTearDown
    • Runs when tests are complete; Shutdown ArcMap
  • Successful test
  • 26. Failed tests
  • 27. References
    • Add-ins for ArcGIS Desktop 10http://blogs.esri.com/Dev/blogs/arcgisdesktop/archive/2010/05/05/Add_2D00_ins-for-ArcGIS-Desktop-10.aspx
    • 28. ArcGIS Visual Studio IDE Integration Framework for extending ArcObjects: http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//00010000021w000000
    • 29. GEOG 490/590: GIS Programming: http://web.pdx.edu/~jduh/courses/geog490w11/index.htm
    • 30. Migrating VBA/VB6 ArcObjects Applications to .NET: http://proceedings.esri.com/library/userconf/devsummit08/papers/migrating_vba-vb6_arcobjects_applications_to_net.pdf
  • References
    • Nunit:http://www.nunit.org/index.php?p=home
    • 31. The GIS Weasel!!http://wwwbrr.cr.usgs.gov/projects/SW_MoWS/software/weasel_s/weasel.shtml
    • 32. Walkthrough: Building custom UI elements using add-ins:http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Walkthrough_Building_custom_UI_elements_using_add_ins/0001000001ms000000/