

'================================ 他図面からのﾌﾞﾛｯｸｺﾋﾟｰ 有無の確認
==========================

'下記AUTOCAD(2020)での設定ですが、IJCAD(2020 PRO) の場合はどのように設定すれば良いのか  
'教えてください。  
'ちなみに、これをIJCADで実行すると途中で、エラーとなってしまいます。  
'ACADの部分をGCADに置き換えてもエラーします。

[code]

    Dim OBJDBX          As New AXDBLib.AxDbDocument  'IJCAD での設定はどう書けば良い?
    Dim objBlockS       As AXDBLib.AcadBlocks　　　   'IJCAD での設定はどう書けば良い?
    Dim objBlockA(0)    As AXDBLib.AcadBlock　　　    'IJCAD での設定はどう書けば良い?
    Dim objBlock        As AXDBLib.AcadBlock　　    　'IJCAD での設定はどう書けば良い?
          
    Dim blockObj As AcadBlock  'IJCAD での設定はどう書けば良い?
    
    Dim blockRefObj As AcadBlockReference  'IJCAD での設定はどう書けば良い?
          
    Dim SSYM As String
    
    SSYM = "BLK1"  '呼び出したいブロック　有無の確認
    
    Dim BLKNAM As String: BLKNAM = "NON"
    
    '  参照元ファイルをｵｰﾌﾟﾝ
    
    OBJDBX.Open "C:\Users\msys-\Desktop\IJCAD2020PRO評価\LIB1.dwg"　　
    
[/code]

'ERR ERR 上の行で"クラスが登録されていません"となりエラーとなります。

[code]

    ' ブロックコレクション
    Set objBlockS = OBJDBX.Blocks
    
[/code]

' For Y = 5 To 300 ' 必要なﾌﾞﾛｯｸを多くｺﾋﾟｰする場合は繰り返す

[code]

      ' ブロックリストを配列へ
        For Each objBlock In objBlockS
          Debug.Print objBlock.Name
    
        ' ブロックがあれば
        If objBlock.Name = SSYM Then
    
              BLKNAM = objBlock.Name
              Set objBlockA(0) = objBlock
        '  ブロックをインポート
        OBJDBX.CopyObjects objBlockA, ThisDrawing.Database.Blocks
        
        End If
    
      Next objBlock
    
[/code]

' Next

[code]

        If BLKNAM = "NON" Then
        
             MsgBox SSYM & "は登録されていません。"
        
            Exit Sub 
      
        End If
        
       
        MsgBox BLKNAM
    
[/code]

'===================================


CC BY-SA 4.0
2021-03-22T02:29:40.897
74809
2021-11-26T06:02:02.923
44432
question
vba
ACADからIJCADにVBAを移植調査中ですが、 IJCAD VBA で、他の図面のブロックを呼び出して配置する場合の設定方法を教えてください。


IJCADでも記載されたソースコードと類似した方法で、図面のブロックを呼び出して配置することができます。

> 'ERR ERR 上の行で"クラスが登録されていません"となりエラーとなります。

IJCADはObjectDBXで図面を操作する機能がない為、その機能を呼び出すとエラーが発生します。  
IJCADでは、VBAでObjectDBXを使用せずに図面を操作することが可能です。  
その場合は、現在使用しているコードを書き換える必要があります。

IJCADを起動して他の図面のブロックを登録する修正サンプルを以下に記載します。

[code]

    Sub Test()
        Dim objBlockS As GcadBlocks
        Dim objBlockA(0) As GcadBlock
        Dim objBlock As GcadBlock
        
        '図面を新規で開く
        ThisDrawing.Application.Documents.Add
        
        '新規図面のドキュメントを格納
        Dim curDoc As GcadDocument
        Set curDoc = ThisDrawing.Application.Documents.Item(ThisDrawing.Application.ActiveDocument.Name)
        
        Dim blockObj As GcadBlock
        Dim blockRefObj As GcadBlockReference
        Dim SSYM As String
        
        SSYM = "BLK1"  '呼び出したいブロック　有無の確認
        Dim BLKNAM As String: BLKNAM = "NON"
    
        '参照元ファイルをｵｰﾌﾟﾝ
        ThisDrawing.Application.Documents.Open "C:\Users\msys-\Desktop\IJCAD2020PRO評価\LIB1.dwg"
        
        ' ブロックコレクション
        Set objBlockS = ThisDrawing.Application.ActiveDocument.Blocks
    
        ' ブロックリストを配列へ
        For Each objBlock In objBlockS  
          Debug.Print objBlock.Name
          
          ' ブロックがあれば
          If objBlock.Name = SSYM Then
            BLKNAM = objBlock.Name
            Set objBlockA(0) = objBlock
                        
            '  ブロックをインポート
            ThisDrawing.Application.ActiveDocument.CopyObjects objBlockA, curDoc.Database.Blocks
          End If
        Next objBlock
        
        '現在のアクティブな図面を閉じる
        ThisDrawing.Application.ActiveDocument.Close
    
        If BLKNAM = "NON" Then
            MsgBox SSYM & "は登録されていません。"
            Exit Sub
        End If
        
        MsgBox BLKNAM
    End Sub
    
[/code]


CC BY-SA 4.0
2021-11-26T06:02:02.923
83812
2021-11-26T06:02:02.923
39778
74809
answer