简体   繁体   中英

VBScript Array Of Strings - Error 800A000D Type Mismatch

I'm having trouble processing a Variant array of strings, returned by a call to method in AutoCAD. The returned array looks to be kosher, but when I try to reference elements in the array, or even include the name of the array in a For Each statement, I get a Type Mismatch error

Here is the code:

Dim acApp 'As AutoCAD.AcadApplication
Dim acDoc 'As AutoCAD.AcadDocument
Dim acLyt 'As AutoCAD.AcadLayout

'Get the AutoCAD application...
On Error Resume Next
Set acApp = GetObject(, "AutoCAD.Application")
On Error GoTo 0
If (acApp Is Nothing) Then
  Set acApp = CreateObject("AutoCAD.Application")
End If

'Is there a drawing open? If not we'll need to open a new drawing...
If acApp.Documents.Count > 0 Then
  Set acDoc = acApp.ActiveDocument
Else
  Set acDoc = acApp.Documents.Add
End If

'Get a reference to the Model Space layout (always first)...
Set acLyt = acDoc.Layouts(0)

'Get the list of canonical media names ("A4", "A3" etc) for the plot device for this layout...
'The AutoCAD documentation says that this method returns a variant, which is an array of strings,
'which seems to be what is actually returned.'
'However, I can't reference the array elements without producing a "Type Mismatch" error.

Names = acLyt.GetCanonicalMediaNames()

WScript.Echo VarType(Names) 'This line runs ok, and returns 8200, which is 8192 for Variant Array, + 8 for String.
WScript.Echo Names(0) 'This line generates the error...

I'm baffled, so any help would be appreciated.

Paul

There are at least two StackOverflow questions whose answers indicate that VBScript can only handle Arrays of Variants returned from COM objects. If AutoCAD is really returning an Array of Strings, then there may be no way to consume the array in VBScript (assuming that getting AutoCAD to change their COM interface is not an option).

References:

It might be a multi-dimensional array. Test this using UBound :

Ubound(Names, 1)  ' Number of Columns
Ubound(Names, 2)  ' Number of Rows

or more (up to 32).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM