Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
BKXD98

Code VBA để xem version của ACAD và Excel

Các bài được khuyến nghị

Các tiện ích vba tôi đang dùng gặp phải một vấn đề là khi cài các phiên bản khác nhau của acad và excel thì nó chạy không chính xác hay không chạy được, tôi phải vào tools/references để chọn lại library tương ứng với version của acad và excel, xin hỏi các bác có đoạn code nào giải quyết được vấn đề này không (kiểm tra version của acad và excel rồi tự chọn library tương ứng) ?

Xin cảm ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Các tiện ích vba tôi đang dùng gặp phải một vấn đề là khi cài các phiên bản khác nhau của acad và excel thì nó chạy không chính xác hay không chạy được, tôi phải vào tools/references để chọn lại library tương ứng với version của acad và excel, xin hỏi các bác có đoạn code nào giải quyết được vấn đề này không (kiểm tra version của acad và excel rồi tự chọn library tương ứng) ?

Xin cảm ơn.

Version của Excel bằng lệnh VBA:

Application.Version

 

Version của AutoCAD bằng lệnh Lisp:

(getvar "ACADVER")

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Version của Excel bằng lệnh VBA:

Application.Version

 

Version của AutoCAD bằng lệnh Lisp:

(getvar "ACADVER")

 

Làm thế nào để chọn library tương ứng với version (= code) vậy bác ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Làm thế nào để chọn library tương ứng với version (= code) vậy bác ?

chịu!

Bạn hỏi cao siêu quá!

VBA hay lisp nó chỉ là 1 đoạn script, hỗ trợ cho công việc, chưa bao giờ tôi phải đụng chạm đến file library cả!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
chịu!

Bạn hỏi cao siêu quá!

VBA hay lisp nó chỉ là 1 đoạn script, hỗ trợ cho công việc, chưa bao giờ tôi phải đụng chạm đến file library cả!

 

Bạn thử xem thêm mục này xem, chú ý code của anh Long:

 

http://geosoftvn.com/forum/topic.asp?TOPIC_ID=325

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bạn nào có sử dụng AutoCad 2006, 2007, 2008 thi cho tôi xin các version với.

có rất nhiều version AutoCad 2007, Nhưng 2008 dùng nhẹ hơn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
có rất nhiều version AutoCad 2007, Nhưng 2008 dùng nhẹ hơn

 

Tôi muốn tìm hiểu các version của AutoCad các đời sau 2004 bằng cách gõ đoạn code ?Application.Version, sau đó Enter) trong cửa sổ Immediate của VBA. Các bạn có cad 2005, 2006, 2008 giúp tôi nhé!

Ví dụ dưới đây là thực hiện ở AutoCad 2004:

 

Version.jpg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tôi muốn tìm hiểu các version của AutoCad các đời sau 2004 bằng cách gõ đoạn code ?Application.Version, sau đó Enter) trong cửa sổ Immediate của VBA. Các bạn có cad 2005, 2006, 2008 giúp tôi nhé!

Có thể thực hiện bằng lệnh lisp. Gõ ngay tại dòng Command của Acad.

Command: (getvar "acadver")

 

Mình chỉ có bản 2007 -> 17.0s (LMS Tech)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tôi có cách này hay hơn là phải khai báo trong thư viện anh BKXD ơi:

- Khai báo thư viện và đối tượng như bình thường.

- Sau khi chương trình ổn định thì thay các đối tượng như AcadLine, AcadText,... thành Object hết!

(biến liên kết sớm thành muộn)

 

Thế là không lo version nữa- nhưng yêu cầu phải từ Cad 2000 trở lên (14 không được)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có 2 cách để giao tiếp với Cad=VB

1. Sử dụng thư viện (*.tbl), đễ dàng khi lập trình vì các đối tượng và h?ng đã được nhập vào, VD:

Dim acadApp as AcadApplication or

Dim la as AcadLayer or

acadApp.WindowState=acMax

Tuy nhiên có nhược điểm là khi khai báo thư viện nào, sau khi compiler xong, thì chương trình chỉ làm việc với version đó mà thôi.

 

2. Không dùng Thư viện :

Mọi đối tượng Cad đều khai báo là Object

CD: Dim acadApps Object

Lúc đó ta có thể viết

acadApp.WindowState=1'acMax(không nhớ chính xác lắm)

Với cách này chương trình có thể liên kết với mọi version of Acad. Tuy nhiên khi lập trình bạn phải nhớ k? các properties, method và event của từng đối tượng, và cần nhớ giá trị các hằng số của acad

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Có 2 cách để giao tiếp với Cad=VB

2. Không dùng Thư viện :

Mọi đối tượng Cad đều khai báo là Object

CD: Dim acadApps Object

Lúc đó ta có thể viết

acadApp.WindowState=1'acMax(không nhớ chính xác lắm)

Với cách này chương trình có thể liên kết với mọi version of Acad. Tuy nhiên khi lập trình bạn phải nhớ k? các properties, method và event của từng đối tượng, và cần nhớ giá trị các hằng số của acad

 

Cách này là chính xác và không lo về vấn đề version AutoCad nữa. Cách khắc phục đỏ đỏ trên là cứ làm như cách 1, sau đó chuyển sang cách 2 bằng cách thay đối tượng ... bằng Object thôi, thay giá trị thuộc tính bằng hằng số (cái này phải đọc thêm trong Help).

VD: Dim as Object 'AcadLine

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vô tình vào lại topic này, cuối cùng cũng đã có cách khắc phục macro phụ thuộc version của acad, thanks các bác.

 

Cứ thực hiện như trong môi trường VBA for Cad, sau đó thay bằng Object là yên tâm anh BKXD98 à.

 

PS: Lâu mới thấy anh BKXD98 vào, dạo này VBA đến đâu rồi để chia sẻ với diễn đàn chứ>

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
PS: Lâu mới thấy anh BKXD98 vào, dạo này VBA đến đâu rồi để chia sẻ với diễn đàn chứ>

 

:lol: dạo này lo chuyện "cơm gạo" quá nên không có thời gian để nghiên cứu VBA nữa, anh phantuhuong có vẻ thích món VBA này ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tôi có cách này hay hơn là phải khai báo trong thư viện anh BKXD ơi:

- Khai báo thư viện và đối tượng như bình thường.

- Sau khi chương trình ổn định thì thay các đối tượng như AcadLine, AcadText,... thành Object hết!

(biến liên kết sớm thành muộn)

 

Thế là không lo version nữa- nhưng yêu cầu phải từ Cad 2000 trở lên (14 không được)

 

Bác Phantuhuong có thể cho một ví dụ dùng VB.net vẽ một đoạn thẳng được không.

Tôi đã thử rồi mà không làm được. Để mở Cad ra vẽ thì tôi dùng đoạn mã:

Public vAcadApp As Autodesk.AutoCAD.Interop.AcadApplication
vAcadApp = New Autodesk.AutoCAD.Interop.AcadApplication
vAcadApp.Visible = True

nhưng để dùng được cái này thì phải nạp library vào nên nó không hỗ trợ các ver khác nhau của cad.

Có cách nào không dùng library của cad mà vẫn gọi được cad lên và vẽ bình thường không.

Bác nào biết xin chỉ giúp! cảm ơn nhiều!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bác Phantuhuong có thể cho một ví dụ dùng VB.net vẽ một đoạn thẳng được không.

Tôi đã thử rồi mà không làm được. Để mở Cad ra vẽ thì tôi dùng đoạn mã:

Public vAcadApp As Autodesk.AutoCAD.Interop.AcadApplication
vAcadApp = New Autodesk.AutoCAD.Interop.AcadApplication
vAcadApp.Visible = True

nhưng để dùng được cái này thì phải nạp library vào nên nó không hỗ trợ các ver khác nhau của cad.

Có cách nào không dùng library của cad mà vẫn gọi được cad lên và vẽ bình thường không.

Bác nào biết xin chỉ giúp! cảm ơn nhiều!

 

Tôi chưa thử nhưng bạn thử thay đối tượng đó bằng Object xem thế nào.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×