Reply to comment

More VBA Sample Code

Here's some more code to use.

Sub test()
    Dim pDoc As IDocument
    Dim pApp As IApplication
    Set pDoc = New MxDocument
    Set pApp = pDoc.Parent
    pApp.Visible = True
    pApp.OpenDocument ("G:\1217\1217-014\GISFiles\SEIFiles\ArcGISProjects\FieldTransects2.mxd")
End Sub

Sub setRelativePaths()
    Dim pMxDoc As IMxDocument
    Set pMxDoc = ThisDocument
    pMxDoc.RelativePaths = True
End Sub

#! perl

use strict;
use Win32::OLE qw(in with);
use Win32::OLE::Const 'ESRI ArcMapUI Object Library';
use Data::Dumper;

# my $class = 'esriCarto.IMapDocument';
# my $class = 'esriArcMap.Application';
# my $class = 'esriFramework.IApplication';
# 'esriArcMapUI.MxDocument'

# print Dumper( Win32::OLE::Const->Load('ESRI ArcMapUI Object Library') );

my $pDoc = Win32::OLE->new( 'esriArcMapUI.MxDocument', 'Shutdown' ); # || die Win32::OLE->LastError()." no $class";

print Dumper( $pDoc );

my $pApp = $pDoc->Parent();
$pApp->{Visible} = 1;

print Dumper( $pApp );



$pApp->Visible = 1;
$pApp->OpenDocument( '' );

Private Sub test()
Dim pDoc As IDocument
Dim pMxDoc As IMxDocument
Dim pApp As esriFramework.IApplication
Dim pDocDS As IDocumentDatasets
Dim pEnumDS As IEnumDataset
Dim pDS As IDataset
Dim pWS As IWorkspace

    ' get a ref to a new ArcMap application
    Set pDoc = New MxDocument
    Set pApp = pDoc.Parent

    ' Loop thru your .mxd documents here

        ' Open an existing document
        pApp.OpenDocument "c:\MyMap.mxd"
        Set pMxDoc = pApp.Document

        ' Iterate thru the datasets and display details
        Set pDocDS = pMxDoc
        Set pEnumDS = pDocDS.Datasets
        Set pDS = pEnumDS.Next
        While Not pDS Is Nothing
            On Error Resume Next
            Set pWS = pDS.Workspace
            If Err.Number = 0 Then
                Debug.Print pDS.Workspace.PathName + " : " + pDS.Name
                Debug.Print pDS.BrowseName + " : Error with datasource"
            End If
            On Error GoTo 0
            Set pDS = pEnumDS.Next

    ' End of you loop

    ' Shut down the ArcMap application

End Sub


Sub muliplemxds()
  Dim sDir As String
  Dim sFile As String
  Dim DocPath As String
    sDir = "C:\Myfolder\TestFolder\"
    sFile = Dir(sDir & "*.mxd", vbNormal)

Do While sFile <> ""
        DocPath = sDir & sFile
        OpenMXDDoc DocPath
        sFile = Dir

End Sub
Private Sub OpenMXDDoc(sFileName As String)
    On Error Resume Next
    Dim pDoc As IMapDocument
    Set pDoc = New MapDocument
    pDoc.Open sFileName
    Documentation pDoc
    Set pDoc = Nothing
End Sub
Private Sub Documentation(pMxDoc As IMapDocument)
 Dim mapcount As Long, LayerCount As Long, text As String
 text = ""
   Dim pLayer As ILayer
   Dim pFL As IFeatureLayer
   Dim pRL As IRasterLayer
   Dim pFC As IFeatureClass
   Dim pDS As IDataset
   Dim pMap As IMap
    text = text & vbCrLf & pMxDoc.DocumentFilename
   For mapcount = 0 To pMxDoc.mapcount - 1
        Set pMap = pMxDoc.Map(mapcount)
            For LayerCount = 0 To pMap.LayerCount - 1
            Set pLayer = pMap.Layer(LayerCount)
            If TypeOf pLayer Is IFeatureLayer Then
              Set pFL = pLayer
              Set pFC = pFL.FeatureClass
              Set pDS = pFC
              text = text & vbCrLf & pFC.AliasName & vbCrLf & pDS.BrowseName & vbCrLf & pDS.Workspace.PathName
            ElseIf TypeOf pLayer Is IRasterLayer Then
              Set pRL = pLayer
              text = text & vbCrLf & pRL.FilePath
              text = text & vbCrLf &
              End If
    WriteToTextFile "C:\textfile.txt", text
End Sub
Sub WriteToTextFile(sFileName As String, text As String)
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    'Set fso = New Scripting.FileSystemObject
    Dim ts
    'Create File if doesn't exist, if it does, append to the current File
    Set ts = fso.OpenTextFile(sFileName, 8, True)
    ts.WriteLine text
    Set ts = Nothing
    Set fso = Nothing

End Sub


use Win32::OLE;
my $class = "esriGeoprocessing.GpDispatch.1";
my $gp = Win32::OLE->new($class) || die "Could not create a COM $class object";
$gp->{overwriteoutput} = 1;
print $gp->{overwriteoutput};



The content of this field is kept private and will not be shown publicly.
  • Lines and paragraphs break automatically.

More information about formatting options