Migration von ArcObjects 8 nach 9

Liebe ArcObjects-NutzerInnen,

hat schon mal jemand von euch VBA-Code aus ArcView 8.x-Vorlagen (*.mxt) nach ArcObjects 9.0 ueberfuehrt und hierfuer einen Tipp zur Automatisierung? Das Prozedere waere wie folgt:

1. Entferne aus allen Standard- und Klassen-Modulen der Vorlage die aufgefuehrten Bibliotheken (z. B. esriCore)
2. Ergaenze die neuen Bibliotheksnamen (z. B. esriCarto)

Von der ESRI-Hotline habe ich 2fach bedauerlicherweise nur die Antwort erhalten, dass - im Gegensatz zu VB, wo es ein entsprechendes AddIn gibt - fuer VBA leider kein Tool zur Verfuegung steht. Aber vielleicht hat bzw. weiss ja einer aus dieser Gemeinde ein Werkzeug, welches diesen Job erledigt. Meines Erachtens waere diese Aufgabe - nach dem Motto einer fuer alle - sehr gut bei ESRI aufgehoben.

Gruss

Uwe
Hallo Uwe,

da ich selbst kein AV 9 habe, verstehe ich evtl. nicht ganz, was Du machen willst. Geht es Dir darum, einen String im Code zu ersetzen, so etwa

alt: Dim pObj as esricore.object
neu: Dim pObj as esricarto.object
?

Viele Grüße
Jörg Ostendorp
Hallo Joerg,

Joop! Die Prozedur soll in allen Standard- und Klassen-Modulen zu allen wichtigen bzw. maximal allen ca. 3500 Klassen, Interfaces etc. automatisch die neuen Bibliotheksnamen ergaenzen (siehe dein Beispiel). Dazu benoetige ich:

Application.Document.VBProject.VBComponents.Item(i)

Nur, bevor ich den Rest dazuprogrammiere, wollte ich erst mal im Forum anklopfen, ob es so etwas schon gibt.

Gruss

Uwe
Hallo Uwe,

wenn ich Dich tatsächlich richtig verstehe(?), ist das dazuprogrammieren doch schnell erledigt (fauler Hund ;-)). Ich würde mir einen UIButton in der normal.mxt erstellen mit folgender Prozedur im Rücken (bsp für 10 Bibliotheksnamen):

Public Sub AV8toAV9()
Dim vbc As VBIDE.VBComponent
Dim strArray(10, 2) As String
Dim str
Dim i As Long
Dim j As Long

'zu ersetzende Bibliotheken aufsammeln
strArray(0, 0) = "esricore"
strArray(0, 1) = "esricarto"
strArray(1, 0) = "irgendwas"
strArray(1, 1) = "irgendwas anderes"
'...
'Components durchlaufen
For Each vbc In VBE.VBProjects.Item(2).VBComponents 's.u.
'Codezeilen durchlaufen
For i = 1 To vbc.CodeModule.CountOfLines
str = vbc.CodeModule.Lines(i, 1)
'ggf. Stringteile gemäß Referenzarray ersetzen
For j = 0 To 9
str = Replace(str, strArray(j, 0), strArray(j, 1))
Next j
'Codezeile ersetzen
vbc.CodeModule.DeleteLines i, 1
vbc.CodeModule.InsertLines i, str
Next i
Next vbc
End Sub

Mit

"VBE.VBProjects.Item(2).VBComponents"

gehe ich mal davon aus, daß in den mxd-Dateien als erstes Projekt immer "Normal" und als zweites eben immer das zu bearbeitende/aktuelle Projekt erscheint. Dann müßte man nur noch einmalig den Bibliotheksarray vervollständigen, vielleicht noch einen kleinen Hourglass-Cursor dazupacken und könnte dann jede aktuell geöffnte mxd (nach erstellter Sicherheitskopie...) mit einem einzigen Klick migrieren.


Viele Grüße
Jörg Ostendorp
Hallo Joerg,

danke fuer das Zauberwort:

"VBE.VBProjects.Item(2).VBComponents"

Diese Zeile habe ich noch gesucht.

Gruss

Uwe

P.S. fauler Hund ;-) : Kein Kommentar.