Liên kết giữa cad và excel (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

vandong1710

Thành viên mới
Tham gia
8/10/09
Bài viết
23
Được thích
0
Do yêu cầu công việc của mình là thống kê sản lượng "TIÊU THỤ" của các khách hàng theo "SỐ DB". Mình có file excel thống kê sản lượng "TIÊU THỤ" (cột N) theo "MÃ DB" (cột E) và file cad có Layer "Text_Danh bo-GN". Mình muốn khi chọn các text theo Layer "Text_Danh bo-GN" thì sẽ xuất ra bảng tính excel có số liệu "TIÊU THỤ" ứng với các text đó (nếu tính tổng được thì rất tốt), cụ thể ở đây là text ở ô E6 (Vì bảng excel và cad của mình khá lớn nên mình chỉ liệt kê số liệu ít). Mong các bạn trên diễn đàn giúp đỡ! Xin chân thành cảm ơn rất nhiều!
http://www.mediafire...CH_TIEU_THU.xls
http://www.mediafire...U_cad2excel.dwg
 
Do yêu cầu công việc của mình là thống kê sản lượng "TIÊU THỤ" của các khách hàng theo "SỐ DB". Mình có file excel thống kê sản lượng "TIÊU THỤ" (cột N) theo "MÃ DB" (cột E) và file cad có Layer "Text_Danh bo-GN". Mình muốn khi chọn các text theo Layer "Text_Danh bo-GN" thì sẽ xuất ra bảng tính excel có số liệu "TIÊU THỤ" ứng với các text đó (nếu tính tổng được thì rất tốt), cụ thể ở đây là text ở ô E6 (Vì bảng excel và cad của mình khá lớn nên mình chỉ liệt kê số liệu ít). Mong các bạn trên diễn đàn giúp đỡ! Xin chân thành cảm ơn rất nhiều!
http://www.mediafire...CH_TIEU_THU.xls
http://www.mediafire...U_cad2excel.dwg

Trong file dwg up lên, chẳng thấy text nào có layer là "Text_Danh bo -GN" , bạn kiểm tra lại !
Tiện thể cho hỏi : bạn có khả năng sử dụng VBA không ?
 
Trong file dwg up lên, chẳng thấy text nào có layer là "Text_Danh bo -GN" , bạn kiểm tra lại !
Tiện thể cho hỏi : bạn có khả năng sử dụng VBA không ?
Hiện nay tôi cũng ít làm việc với autocad , cũng thử vọc 1 chút xem thế nào :
* Đầu tiên mở file cad lên , Ấn Alt+F11 , click vào Tab insert -Module:
Trong modue 1 : bạn copy toàn bộ code bên dưới vào module này
Mã:
Function getExcel(obj) As Variant
    Dim ObjAppExcel As Object
    On Error Resume Next
        Set ObjAppExcel = GetObject(, "Excel.Application")
        If Err Then
            Err.Clear
            Set ObjAppExcel = CreateObject("Excel.Application")
        End If
        If Err Then
            getExcel = False: getExcel = Err.Description
        Else
            getExcel = True: Set obj = ObjAppExcel
        End If
End Function

Mã:
Sub Gettext()
    Dim sset As AcadSelectionSet, entity As AcadEntity
    Dim gpcode%(0 To 6), gpdata(0 To 6), i&
    Dim ArrResult()
    On Error Resume Next
'Dinh nghia bo Loc selectionset : And(or(text,Mtext),LayerName)
        gpcode(0) = -4: gpdata(0) = "<and"
        gpcode(1) = -4: gpdata(1) = "<or"
        gpcode(2) = 0: gpdata(2) = "Text"
        gpcode(3) = 0: gpdata(3) = "Mtext"
        gpcode(4) = -4: gpdata(4) = "or>"
        gpcode(5) = 8: gpdata(5) = "Text_Danh Bo-GN"
        gpcode(6) = -4: gpdata(6) = "and>"
'Chon doi tuong tren man hinh thoa man --> ghi ket qua vao mang ArrResult
        With ThisDrawing
           Set sset = .SelectionSets.Add("#")
            sset.SelectOnScreen gpcode, gpdata
            If sset.Count Then
                ReDim ArrResult(1 To sset.Count, 1 To 1)
                For Each entity In sset
                    i = i + 1
                    ArrResult(i, 1) = entity.TextString
                Next
            End If
            .SelectionSets("#").Delete
        End With
 'Khoi tao doi tuong excel
 Dim ExcelApp As Object, wB As Object
        If getExcel(ExcelApp) Then
            With ExcelApp
                Set wB = .workbooks.Add
                .Visible = True
                With wB.ActiveSheet
                    .Range("A:A").EntireColumn.AutoFit
                    .Range("A1") = "MA DB"
                    .Range("A2").resize(i) = ArrResult
                End With
            End With
        Else
            MsgBox getExcel(ExcelApp)
        End If
End Sub
** Quay trở về màn hình cad : bạn gõ lênh : VBARun --> chọn Macro nào có phần tên sau cùng là ...!Module1.Gettext --> click Run
*** Chọn toàn bộ đối tượng trên màn hình , ấn enter : good luck !-0-/.
 
Hiện nay tôi cũng ít làm việc với autocad , cũng thử vọc 1 chút xem thế nào :
* Đầu tiên mở file cad lên , Ấn Alt+F11 , click vào Tab insert -Module:
Trong modue 1 : bạn copy toàn bộ code bên dưới vào module này
Mã:
Function getExcel(obj) As Variant
    Dim ObjAppExcel As Object
    On Error Resume Next
        Set ObjAppExcel = GetObject(, "Excel.Application")
        If Err Then
            Err.Clear
            Set ObjAppExcel = CreateObject("Excel.Application")
        End If
        If Err Then
            getExcel = False: getExcel = Err.Description
        Else
            getExcel = True: Set obj = ObjAppExcel
        End If
End Function

Mã:
Sub Gettext()
    Dim sset As AcadSelectionSet, entity As AcadEntity
    Dim gpcode%(0 To 6), gpdata(0 To 6), i&
    Dim ArrResult()
    On Error Resume Next
'Dinh nghia bo Loc selectionset : And(or(text,Mtext),LayerName)
        gpcode(0) = -4: gpdata(0) = "<and"
        gpcode(1) = -4: gpdata(1) = "<or"
        gpcode(2) = 0: gpdata(2) = "Text"
        gpcode(3) = 0: gpdata(3) = "Mtext"
        gpcode(4) = -4: gpdata(4) = "or>"
        gpcode(5) = 8: gpdata(5) = "Text_Danh Bo-GN"
        gpcode(6) = -4: gpdata(6) = "and>"
'Chon doi tuong tren man hinh thoa man --> ghi ket qua vao mang ArrResult
        With ThisDrawing
           Set sset = .SelectionSets.Add("#")
            sset.SelectOnScreen gpcode, gpdata
            If sset.Count Then
                ReDim ArrResult(1 To sset.Count, 1 To 1)
                For Each entity In sset
                    i = i + 1
                    ArrResult(i, 1) = entity.TextString
                Next
            End If
            .SelectionSets("#").Delete
        End With
 'Khoi tao doi tuong excel
 Dim ExcelApp As Object, wB As Object
        If getExcel(ExcelApp) Then
            With ExcelApp
                Set wB = .workbooks.Add
                .Visible = True
                With wB.ActiveSheet
                    .Range("A:A").EntireColumn.AutoFit
                    .Range("A1") = "MA DB"
                    .Range("A2").resize(i) = ArrResult
                End With
            End With
        Else
            MsgBox getExcel(ExcelApp)
        End If
End Sub
** Quay trở về màn hình cad : bạn gõ lênh : VBARun --> chọn Macro nào có phần tên sau cùng là ...!Module1.Gettext --> click Run
*** Chọn toàn bộ đối tượng trên màn hình , ấn enter : good luck !-0-/.
Khi Run code của bạn thì xuất kết quả chỉ hiển thị "Số DB", mình muốn kết quả xuất ra là "TIÊU THỤ" như trong bảng tính excel ứng với "Số DB". Cảm ơn bạn đã giúp đỡ!
 
Mình thấy cách này nhanh, nhưng kết quả chưa như ý muốn, mình muốn sau khi chọn layer "Text_Danh Bo-GN" (tức "MÃ DB" ở excel) thì kết quả cho ra là "TIÊU THỤ" ứng với text đó. Bạn cho mình hỏi là xuất kết quả cho ra ở cùng file excel như trên có được ko? Mình xin up lại 2 file đã test lại. Xin cảm ơn bạn rất nhiều!
http://www.mediafire.com/download/bafct0kt61puse9/DANH+BO+CXDL.xls
http://www.mediafire.com/download/ac6dukeefm3tp4q/CXDL.dwg
 
Web KT

Bài viết mới nhất

Back
Top Bottom