1 Reply Latest reply on Feb 12, 2014 8:44 PM by nick_hong

    [질문] Dxdesigner의 Part Number를 엑셀시트로 일괄 변경하기

    bkk.kim

      아래의 엑셀 시트의 Temp Code를 Formal 코드로 Dxdesigner를 Part number를 일괄변환하는 VBA코드를 작성하고자 합니다.

      아래 VBA 코드를 보시면 Vdview 를 사용한 것이 문제인 것 같은데요.

      Dim vdview As View라고 선언한 것이 맞나요??

      전체적으로 코드 작성을 봐 주셨으면 합니다.

       

      1.PNG

       

      Sub DxdPNChg()

      MsgBox "Start"

      Dim vdapp As Application
      Dim Vdview As View

      ' **** Use the code within the asterisk area for an open drawing ****
      Set vdapp = Application

      'Scripting.AddTypeLibrary ("ViewDraw.Application")
      'Set vddoc = vdapp.ActiveDocument
      Set Vdview = vdapp.ActiveView

      ' ************* End of open drawing code *********************


      Dim i As Integer
      Dim nRow As Integer
      Dim Comp As Component

      nRow = ActiveSheet.UsedRange.Rows.Count  ' 엑셀 시트의 맨 마지막 행의 숫자
      MsgBox nRow

       
      '배열 정의 데이타의 크기 입력
        Dim MDMCodeData(1, 186) As String   ' Dim MDMCodeData(1, nRow) As String  로 선언하면 에러 발생

       

      'MDMCodeData(0, 1) = B3,MDMCodeData(1, 1) = C3
          For i = 0 To nRow - 183
              MDMCodeData(0, i) = Cells(i + 3, 2)
              MDMCodeData(1, i) = Cells(i + 3, 3)

              'Create a collection using the Query method, of the
              'components which are selected on the schematic
             
              For Each Comp In Vdview.Query(VDM_COMP, VD_ALL)
                     
              'Identify the Data_Sheet attribute on the component
                  Set PNumber = Comp.FindAttribute("Part Number")

                      If Not PNumber Is Nothing Then
                          Dim bUpdate
                          bUpdate = False
       
                          If PNumber.Value = MDMCodeData(0, i) Then
                          PNumber.Value = MDMCodeData(1, i)
                          bUpdate = True
                          End If
                      End If
              Next
         
          Next i

      End Sub

        • 1. Re: [질문] Dxdesigner의 Part Number를 엑셀시트로 일괄 변경하기
          nick_hong

          첨부하신 예제가 만약 엑셀 내부에서 작성되어 있는 상태라면 Set vdapp = Application 에서 의도하지 않은 결과를 내게 됩니다.

           

          Automation에서 예약변수로 사용되는 'Application' 은 script가 실행되고 있는 프로그램을 가리키는 것으로,

          . 엑셀 내부에서 실행되는 script의 경우 엑셀 프로그램을,

          . DxDesigner나 ExpeditionPCB 내부에서 실행되는 script의 경우 각각 DxDesigner application 또는 ExpeditionPCB application을

          . 외부에서 단독으로 실행되는 script의 경우(예: mgcscript를 통해 구동되는 script)에는 존재하지 않는 object (Nothing) 이 됩니다.

           

          따라서, 엑셀 내부에서 작성되어 구동되는 Automation script에서 DxDesigner에 접근하기 위해서는 GetObject(, "ViewDraw.Application")을 사용해야 합니다.

           

          질문하신 Dim vbview As View 는 'vdview' 변수를 'View' 형태로 사용하겠다는 의미이므로 문제가 없습니다.

          참조(reference)되어 있는 다른 COM library와 섞이지 않도록 명확히 하시기 위해서는 아래와 같이 하는 방법도 있습니다.

           

          Dim vdview As ViewDraw.View

           

          특히 DxDesigner와 XpeditionPCB를 한꺼번에 연결하는 Automation script를 작성할 때에는 변수형을 지정할 때에 서로 뒤엉킬 수가 있어, 아래와 같이 명확히 해 주는 것이 좋습니다.

           

          Dim oDxComp As ViewDraw.Component

          Dim oXpComp As MGCPCB.Component