English

How To: Programmatically change the data source of a layer in ArcMap

Summary

Note:
This article pertains to ArcGIS versions 8.x and 9.x. Later versions of ArcGIS may contain different functionality, as well as different names and locations for menus, commands and geoprocessing tools.

The sample code provided is to programmatically change a layer's data source in ArcMap.

Note: 
Support for Visual Basic for Applications (VBA) for ArcMap and ArcCatalog ended with the ArcGIS 10.2.2 release, and Esri has not included VBA compatibility setups since version 10.5. See: ArcGIS Desktop and VBA Moving Forward

Procedure

  1. Start ArcMap and add a feature class to the map.
  2. Create a new UIButtonControl: How To: Create a new UIButtonControl​
Note:
For more information on creating a UIControl, see the ArcGIS Desktop Help topic: 'Creating custom commands with VBA and UI Controls'
  1. Right-click the UIButtonControl and select View Source.
  2. Copy this code into the UIButtonControl's click event.
Dim pmxdoc As IMxDocument
Set pmxdoc = ThisDocument
    
Dim pmap As IMap
Set pmap = pmxdoc.ActiveView
    
Dim pfeatlayer As IFeatureLayer
Set pfeatlayer = pmap.Layer(0)
    
Dim pdatalayer As IDataLayer
Set pdatalayer = pfeatlayer
    
Dim pname As IName
Dim strTable As String
Dim strLocation As String
    
' Set the path to the directory containing the shapefile.
strLocation = "C:\testing\canada"
    
' Set the shapefile name to be used as the data source.
strTable = "provinces"
    
Dim pdatasetname As IDatasetName
Dim ptable As ITable
Dim pwrkspc As IWorkspaceName

Set pwrkspc = New WorkspaceName
pwrkspc.PathName = strLocation
    
' If a data source other than a shapefile is used,
' the workspace type will need to be changed.
pwrkspc.WorkspaceFactoryProgID = "esricore.shapefileworkspacefactory.1"

Set pdatasetname = New TableName
pdatasetname.Name = strTable
Set pdatasetname.WorkspaceName = pwrkspc
Set pname = pdatasetname
Set ptable = pname.Open
    
Dim pgeodataset As IGeoDataset
Set pgeodataset = ptable
Set m_penv = pgeodataset.Extent
    
Dim pfcname As IDatasetName
Set pfcname = pname
pdatalayer.DataSourceName = pname
    
Dim pav As IActiveView
Set pav = pmap
    
pav.Extent = m_penv
Set pav = pmap
pav.Refresh
  1. Change the values assigned to the STRLOCATION and STRTABLE variables to a shapefile data source.
  2. Click the UIButtonControl to execute the code and change the layer's data source.

Related Information