Đến nội dung


Hình ảnh

Lỗi : Marco này là sao nhỉ...


  • Please log in to reply
3 replies to this topic

#1 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 07 January 2011 - 11:07 AM

Á,mình nhận 1 file thế này (đã lược đi r),mở file báo có kèm theo marco -> mình Do not load nhé :D
File Loi

Text không chọn được.
Sửa thì có khá nhiều cách củ chuối để sửa, thậm chí đơn giản là xóa bảng thống kê text của bác giabach bên cạnh đi, thoát ra và vào lại ^^
- Vấn đề mình chưa bít là marco ở đâu mà nó báo có (kể cả enable,nhấn Alt F11 k thấy đoạn mã nào)
- Vấn đề thứ 2 là bảng thống kê có ảnh hưởng thế nào ở đây ? Bản vẽ nguyên gốc có rất nhiều đối tượng,n cũng chỉ cần xóa thằng này là vấn đề được giải quyết ??
Lisp tkt của bác giabach và bác TueNV (e nhớ thế) update thì đây ạ
;; free lisp from cadviet.com

(defun c:tkt(/ ent h height i len0 lst msp pt row ss str str0 str_len tblobj width0 width1); thong ke text
;; By : Gia Bach, Copyrightゥ December 2010;;
;; Contact : gia_bach @ www.CadViet.com;;
(defun TxtWidth (val msp / txt minp maxp)
(vla-getBoundingBox (setq txt (vla-AddText msp val (vlax-3d-point '(0 0 0)) 1)) 'minp 'maxp)
(vla-Erase txt)
(-(car(vlax-safearray->list maxp))(car(vlax-safearray->list minp))) )
;main
(if (> (atof (substr (getvar "ACADVER") 1 4)) 16.0)
(progn
(vl-load-com)
(princ "\nChon cac Text de thong ke :")
(if (setq ss (ssget(list (cons 0 "TEXT"))))
(progn
(setq i -1 len0 8)
(while (setq ent (ssname ss (setq i (1+ i))))
(setq str(cdr(assoc 1 (entget ent ))))
(if (> (setq str_len (strlen str)) len0)
(setq str0 str len0 str_len) )
(if (not (assoc str lst))
(setq lst (cons (cons str 1) lst))
(setq lst (subst (cons str (1+ (cdr (assoc str lst))))
(assoc str lst) lst))) )
(setq lst (vl-sort lst '(lambda (x y) (< (car x) (car y))))
msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
(or *h* (setq *h* 175))
(initget 6)
(setq h (getreal (strcat "\nChieu cao chu <" (rtos *h*) "> :")))
(if h (setq *h* h) (setq h *h*) )
(setq width0 (* 3 h(TxtWidth "STT" msp))
height (* 2 h))
(if str0
(setq width1 (* 1.2 h(TxtWidth (strcase str0) msp)))
(setq width1 (* 2 h(TxtWidth "Gia tri" msp))))
(if (> h 3)
(setq width0 (* (fix (/ width0 10))10)
width1 (* (fix (/ width1 10))10)
height (* (fix (/ height 5))5)))
(initget "T TH")
(setq ans (getkword "Ban Tao bang moi hay THem du lieu vao bang da co <T TH> :"))
(IF (= ans "T") (PROGN
(setq pt (getpoint "\nDiem dat Bang :")
TblObj (vla-addtable msp (vlax-3d-point pt) (+ (length lst) 2) 3 height width1))
(vla-put-regeneratetablesuppressed TblObj :vlax-true)
(vla-put-vertcellmargin TblObj (* 0.25 h))
(vla-put-horzcellmargin TblObj (* 0.75 h))
(vla-SetColumnWidth TblObj 0 width0)
(vla-SetColumnWidth TblObj 2 (* 2 h(TxtWidth "So luong" msp)))
(mapcar '(lambda (x)(vla-setTextHeight TblObj x h))
(list acTitleRow acHeaderRow acDataRow) )
(mapcar '(lambda (x)(vla-setAlignment TblObj x 8))
(list acTitleRow acHeaderRow acDataRow))
(vl-catch-all-error-p (vl-catch-all-apply (function(lambda () (vla-MergeCells TblObj 0 0 0 2)) )))
(vla-setText TblObj 0 0 "Bang thong ke")
(vla-setText TblObj 1 0 "STT")
(vla-setText TblObj 1 1 "Gia tri")
(vla-setText TblObj 1 2 "So luong")
(setq i 1 row 2 )
)
(PROGN
(setq tblobj (vlax-ename->vla-object (car(entsel "\n Chon bang can them du lieu vao :"))))
(setq row (1+ (vla-get-rows Tblobj)) i (- row 2))
(vla-insertrows Tblobj (1- row) h (1+ (length lst)))
)
)
(foreach e lst
(vla-setText TblObj row 0 (itoa i))
(vla-setText TblObj row 1 (car e))
(vla-setText TblObj row 2 (cdr e))
(vla-SetCellAlignment TblObj row 1 7)
(vla-SetCellAlignment TblObj row 2 9)
(setq row (1+ row) i (1+ i)) )
(vla-put-regeneratetablesuppressed TblObj :vlax-false)
(vlax-release-object TblObj) )
(alert "Khong chon duoc Text.") )
(princ) )
(alert "\nPhien ban Cad cua ban khong ho tro tao Bang (TABLE)") ) )

  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 07 January 2011 - 12:21 PM

Á,mình nhận 1 file thế này (đã lược đi r),mở file báo có kèm theo marco -> mình Do not load nhé :D
File Loi

Text không chọn được.
Sửa thì có khá nhiều cách củ chuối để sửa, thậm chí đơn giản là xóa bảng thống kê text của bác giabach bên cạnh đi, thoát ra và vào lại ^^
- Vấn đề mình chưa bít là marco ở đâu mà nó báo có (kể cả enable,nhấn Alt F11 k thấy đoạn mã nào)
- Vấn đề thứ 2 là bảng thống kê có ảnh hưởng thế nào ở đây ? Bản vẽ nguyên gốc có rất nhiều đối tượng,n cũng chỉ cần xóa thằng này là vấn đề được giải quyết ??
Lisp tkt của bác giabach và bác TueNV (e nhớ thế) update thì đây ạ

;; free lisp from cadviet.com

(defun c:tkt(/ ent h height i len0 lst msp pt row ss str str0 str_len tblobj width0 width1); thong ke text
;; By : Gia Bach, Copyrightゥ December 2010;;
;; Contact : gia_bach @ www.CadViet.com;;
(defun TxtWidth (val msp / txt minp maxp)
(vla-getBoundingBox (setq txt (vla-AddText msp val (vlax-3d-point '(0 0 0)) 1)) 'minp 'maxp)
(vla-Erase txt)
(-(car(vlax-safearray->list maxp))(car(vlax-safearray->list minp))) )
;main
(if (> (atof (substr (getvar "ACADVER") 1 4)) 16.0)
(progn
(vl-load-com)
(princ "\nChon cac Text de thong ke :")
(if (setq ss (ssget(list (cons 0 "TEXT"))))
(progn
(setq i -1 len0 8)
(while (setq ent (ssname ss (setq i (1+ i))))
(setq str(cdr(assoc 1 (entget ent ))))
(if (> (setq str_len (strlen str)) len0)
(setq str0 str len0 str_len) )
(if (not (assoc str lst))
(setq lst (cons (cons str 1) lst))
(setq lst (subst (cons str (1+ (cdr (assoc str lst))))
(assoc str lst) lst))) )
(setq lst (vl-sort lst '(lambda (x y) (< (car x) (car y))))
msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
(or *h* (setq *h* 175))
(initget 6)
(setq h (getreal (strcat "\nChieu cao chu <" (rtos *h*) "> :")))
(if h (setq *h* h) (setq h *h*) )
(setq width0 (* 3 h(TxtWidth "STT" msp))
height (* 2 h))
(if str0
(setq width1 (* 1.2 h(TxtWidth (strcase str0) msp)))
(setq width1 (* 2 h(TxtWidth "Gia tri" msp))))
(if (> h 3)
(setq width0 (* (fix (/ width0 10))10)
width1 (* (fix (/ width1 10))10)
height (* (fix (/ height 5))5)))
(initget "T TH")
(setq ans (getkword "Ban Tao bang moi hay THem du lieu vao bang da co <T TH> :"))
(IF (= ans "T") (PROGN
(setq pt (getpoint "\nDiem dat Bang :")
TblObj (vla-addtable msp (vlax-3d-point pt) (+ (length lst) 2) 3 height width1))
(vla-put-regeneratetablesuppressed TblObj :vlax-true)
(vla-put-vertcellmargin TblObj (* 0.25 h))
(vla-put-horzcellmargin TblObj (* 0.75 h))
(vla-SetColumnWidth TblObj 0 width0)
(vla-SetColumnWidth TblObj 2 (* 2 h(TxtWidth "So luong" msp)))
(mapcar '(lambda (x)(vla-setTextHeight TblObj x h))
(list acTitleRow acHeaderRow acDataRow) )
(mapcar '(lambda (x)(vla-setAlignment TblObj x 8))
(list acTitleRow acHeaderRow acDataRow))
(vl-catch-all-error-p (vl-catch-all-apply (function(lambda () (vla-MergeCells TblObj 0 0 0 2)) )))
(vla-setText TblObj 0 0 "Bang thong ke")
(vla-setText TblObj 1 0 "STT")
(vla-setText TblObj 1 1 "Gia tri")
(vla-setText TblObj 1 2 "So luong")
(setq i 1 row 2 )
)
(PROGN
(setq tblobj (vlax-ename->vla-object (car(entsel "\n Chon bang can them du lieu vao :"))))
(setq row (1+ (vla-get-rows Tblobj)) i (- row 2))
(vla-insertrows Tblobj (1- row) h (1+ (length lst)))
)
)
(foreach e lst
(vla-setText TblObj row 0 (itoa i))
(vla-setText TblObj row 1 (car e))
(vla-setText TblObj row 2 (cdr e))
(vla-SetCellAlignment TblObj row 1 7)
(vla-SetCellAlignment TblObj row 2 9)
(setq row (1+ row) i (1+ i)) )
(vla-put-regeneratetablesuppressed TblObj :vlax-false)
(vlax-release-object TblObj) )
(alert "Khong chon duoc Text.") )
(princ) )
(alert "\nPhien ban Cad cua ban khong ho tro tao Bang (TABLE)") ) )

Hề hề hề,
Cứ theo như ngu ý của mình thì có nhẽ cái Macro này nằm trong cái file Excel mà người làm trước đã dùng để thống kê bản vẽ. Sau đó mới insert cái file excel này vào CAD bằng một cách nào đó để giữ các link với file thống kê.
Vậy nên muốn sửa nó bác phải có cái file Êxcel này mới được.
Sau khi bác xóa cái bảng thống kê đi thì đương nhiên các link cũng mất nên mọi ảnh hưởng trở về mo bác à.
Hề hề hề.
Đoán vậy mà chả biết có phải vậy không?? Bác thử ngẫm xem nhé.
Còn cái lisp bác đưa thì theo mình nghĩ nó chỉ thống kê các text có trên bản vẽ và lập thành bảng chứ chả dính dáng gì tới thằng Excel cả bác ạ.
Hề hề hề,.....
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 07 January 2011 - 12:23 PM

Á,mình nhận 1 file thế này (đã lược đi r),mở file báo có kèm theo marco -> mình Do not load nhé :D
File Loi

Text không chọn được.
Sửa thì có khá nhiều cách củ chuối để sửa, thậm chí đơn giản là xóa bảng thống kê text của bác giabach bên cạnh đi, thoát ra và vào lại ^^
- Vấn đề mình chưa bít là marco ở đâu mà nó báo có (kể cả enable,nhấn Alt F11 k thấy đoạn mã nào)
- Vấn đề thứ 2 là bảng thống kê có ảnh hưởng thế nào ở đây ? Bản vẽ nguyên gốc có rất nhiều đối tượng,n cũng chỉ cần xóa thằng này là vấn đề được giải quyết ??
Lisp tkt của bác giabach và bác TueNV (e nhớ thế) update thì đây ạ
........

File gốc của bạn mở bằng Cad2010 : chọn TEXT bình thuờng.

Macro không có liên quan gì đến bảng thống kê cả.
Gõ lệnh VBAman rồi click vào button Extract : move nó đi là đuợc.

File đã remove : file
Hình đã gửi
  • 1

#4 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 07 January 2011 - 01:33 PM

@bác Bình : Chính xác bảng thống kê trên làm ra từ thằng lisp trên đấy ạ ^^.Chứ e có dám nói j đến excel đâu.Hì hì
@ bác giabach : Có thể là do cad10 nó thế ạ.Test trên cad07 và 08 thì dù e có không load,disable,extract remove thằng marco đi thì e vẫn hok kick được vào text này ^^.
Bằng chứng là file bên dưới e đã xóa marco này đi, và với máy e hiện tượng vẫn hiện hữu ^^.Xóa cái bảng tkê đi lại xong.Lạ đời thật
Mong các bác test lại trên 07,08 hộ e, hay là do CAD của máy e đã khó bảo ^^
Vấn đề e thắc mắc ban đầu vẫn là : người ta gán cái marco không có nội dung j vào cũng được ạ?Sao lại có người làm công việc vô nghĩa như thế nhỉ :D
( chứ hok phải e thắc mắc cách extract hay disable nó ra ạ )

File 2

P/S : file bác giabach post cũng thế ạ ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC