Wie weet hoe je in VBA de status van een Xref aanspreekt?
Ik wil een routine maken waarbij ik een lijst maak v/d Xref's en hun status:
BV:
Naam: Xref1
Path: c:\Map\Xref1.dwg
Status: Loaded
Naam: Xref2
Path: c:\Map\Xref2.dwg
Status: Unloaded
Naam: Xref3
Path: c:\Map\Xref3.dwg
Status: Unreferenced
Ik krijg wel de naam en path te pakken, nu de rest nog.
Deze kun via vba niet achterhalen. Je kunt alleen de methodes Load, Unload en Detach toepassen. Overigens zijn dit de methodes voor acadBlock.
greetz
stephan
Citaat van: sschevers op di 05 08 2008, 13:27:15
Deze kun via vba niet achterhalen. Je kunt alleen de methodes Load, Unload en Detach toepassen. Overigens zijn dit de methodes voor acadBlock.
greetz
stephan
Hoe doet acad dat dan, in de manager zie je dat namelijk wel?
Is dit echt niet te doen.
Ik moet voor meer dan 4000 dwg's kijken of de xref wel of niet aanwezig en kijken
of die wel of niet aanwezig is of dat alleen het pad niet klopt.
Met vriendelijke groet,
Willy
Citaat van: willyver op di 30 03 2010, 15:08:34
Is dit echt niet te doen.
Ik moet voor meer dan 4000 dwg's kijken of de xref wel of niet aanwezig en kijken
of die wel of niet aanwezig is of dat alleen het pad niet klopt.
Met vriendelijke groet,
Willy
Beste Willy,
Heb je ook naar
http://www.cadsite.be/smf/index.php?topic=2647.msg13610#msg13610
gekeken.
Met vriendelijke groet, HofCAD CSI.
PS: Ook gekeken naar AdRefMan.exe in de AutoCAD map.
Van VBA heb ik nauwelijks verstand. Maar m.b.v. van dit LISP-voorbeeld (http://discussion.autodesk.com/forums/thread.jspa?threadID=517441), dit VBA-voorbeeld (http://www.kxcad.net/autodesk/autocad/AutoCAD_ActiveX_and_VBA_Reference/ex_xrefdatabase.htm) en deze info over error-handling (http://www.cpearson.com/excel/ErrorHandling.htm) kom ik tot deze test-code:
Sub Example_XRefDatabase()
Dim tempBlock As AcadBlock
Dim msgXrefAll As String, msgXrefFound As String, msg As String
msgXrefAll = vbCrLf
msgXrefFound = vbCrLf
For Each tempBlock In ThisDrawing.Blocks
If tempBlock.IsXRef Then
msgXrefAll = msgXrefAll & tempBlock.Name & vbCrLf
On Error GoTo ErrHandler:
' msg wordt gebruikt als dummie, als de xref niet is gevonden dan ontstaat een fout (die wordt afgevangen)
msg = tempBlock.XRefDatabase.Blocks.Count
msgXrefFound = msgXrefFound & tempBlock.Name & vbCrLf
ResumeLoop:
End If
Next
' Display Block information for the XRefDatabase
MsgBox "Externally referenced blocks attached to this drawing: " & msgXrefAll & vbCrLf & "Found: " & msgXrefFound
Exit Sub
ErrHandler:
Resume ResumeLoop:
End Sub
Geen geweldige code, maar mijn conclusie is dat het wel mogelijk is om te controleren of Xrefs worden gevonden. En in combinatie met Count moet het mogelijk zijn om ook de rest van de "status" te achterhalen.
Zoals ik al eerder aangaf via vba is het niet mogelijk om de status te achterhalen. De zaken die Hofcad via lisp doet kun je eenvoudig weg niet met VBA voor elkaar krijgen. Wil je de status wel achterhalen dan zul je moeten overstapppen naar de .Net omgeving. Dan heb je de "volledige api" (Afhankelijk van welke versie van autocad je gebruikt. Ik zit nog op acad 2007 en daar zijn nog niet alle arx functies geimplemnteerd) tot je beschikking.
@Eddy
Niet alle functionaliteit van autocad is vrijgeven onder VBA. Het uitvragen van de status van Xref's is er een van.
greetz
stephan
Bedankt voor de antwoorden.
Ik ga het eens proberen met de lisp-routine.
Met vriendelijke groet,
Willy