1

AutoCAD のメソッドの呼び出しによって返された文字列のバリアント配列の処理に問題があります。返された配列は正しいように見えますが、配列内の要素を参照しようとしたり、For Each ステートメントに配列の名前を含めたりしようとすると、型の不一致エラーが発生します

コードは次のとおりです。

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...

私は困惑しているので、助けていただければ幸いです。

ポール

4

2 に答える 2

1

少なくとも 2 つの StackOverflow に関する質問があり、その回答は、VBScript が COM オブジェクトから返されたバリアントの配列のみを処理できることを示しています。AutoCAD が実際に文字列の配列を返す場合、VBScript で配列を使用する方法がない可能性があります (AutoCAD に COM インタフェースを変更させることがオプションではない場合)。

参考文献:

于 2013-07-26T04:55:03.280 に答える
0

多次元配列である可能性があります。を使用してこれをテストしUBoundます。

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

以上 (最大 32)。

于 2013-07-26T01:01:06.237 に答える