Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
17 replies to this topic

#1 BKXD98

BKXD98

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 20 August 2007 - 08:54 AM

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.
  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 20 August 2007 - 09:24 AM

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")
  • 0

#3 BKXD98

BKXD98

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 20 August 2007 - 08:14 PM

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 ?
  • 0

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 20 August 2007 - 09:09 PM

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ả!
  • 0

#5 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 21 August 2007 - 11:51 AM

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
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#6 BKXD98

BKXD98

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 22 August 2007 - 08:35 PM

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

Tôi chưa test thử, nhưng nhìn sơ qua thì đúng là cái tôi đang cần, có vẻ bác tham gia nhiều forum ...
Cảm ơn bác Phantuhuong.
  • 0

#7 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 24 October 2007 - 10:29 PM

Bạn nào có sử dụng AutoCad 2006, 2007, 2008 thi cho tôi xin các version với.
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#8 nttu

nttu

    biết zoom

  • Members
  • Pip
  • 11 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 13 December 2007 - 10:51 AM

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
  • 0

#9 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 18 December 2007 - 01:40 PM

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:

Hình đã gửi
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#10 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 18 December 2007 - 02:06 PM

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)
  • 1

#11 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 11 January 2008 - 04:47 PM

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)
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#12 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 13 January 2008 - 06:31 PM

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
  • 0
Clear sky!

MF Rock collection.

#13 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 16 January 2008 - 09:34 AM

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
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#14 BKXD98

BKXD98

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 August 2008 - 07:43 PM

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.
  • 0

#15 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 16 August 2008 - 09:35 PM

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ứ>
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#16 BKXD98

BKXD98

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 29 August 2008 - 04:27 PM

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 ?
  • 0

#17 HTTP

HTTP

    biết pan

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 30 September 2008 - 07:59 AM

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!
  • 0

#18 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 12 October 2008 - 07:02 PM

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.
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!