Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
lucton

Viết VBA theo yêu cầu.............

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

Gửi bác Nguyen Hoanh

Bác giỏi quá trời. Em phục bác quá.

Em nhờ bác giúp cho em gọi lệnh trong menu khi em đã tạo ra nó trong VBA nhưng khi gọi hàm ra nó lại không thực hiện gì cả.

File của em đây:

http://www.4shared.com/file/55Hp1te4/VD_XD.html

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
Cho mình hỏi về đoạn VBA đếm số block đã xuất hiện trong bản vẽ thì như thế nào. Mong các bạn hướng dẫn cho mình nhé.

 

Cám ơn nhiều.

Bạn thử xem nhé

Sub blockcount()
Dim ssetObj As AcadSelectionSet
Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")

Dim gpCode(0) As Integer
Dim dataValue(0) As Variant
gpCode(0) = 0
dataValue(0) = "Insert"
ssetObj.SelectOnScreen gpCode, dataValue
MsgBox ssetObj.Count
ThisDrawing.SelectionSets.Item("SSET").Delete
End Sub

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 Gia_Bach ơi!

Em có đang viết VBA mà đang gặp vướng mắc không biết làm thế nào?

Em đã tạo menu trong Autocad bằng VBA nhưng khi gọi lệnh trong menu thì không được. Bác có thể giúp em gọi một số lệnh từ menu được không ạ?

Khi em nhấn vào menu nhập số liệu thì nó sẽ hiện lên from Nhapsolieu ..... em sẽ tự làm các mục tiếp theo. Em cảm ơn bác nhiều.

http://www.4shared.com/file/55Hp1te4/VD_XD.html

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

Em đã tìm được gọi lệnh từ menu rồi các bác à.

Dẫu sao em tự tìm được cũng là 1 niềm vui. Lần sau em sẽ chịu khó tìm kiếm rồi sẽ hỏi các 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

Sub blockcount()

Dim ssetObj As AcadSelectionSet

Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")

 

Dim gpCode(0) As Integer

Dim dataValue(0) As Variant

gpCode(0) = 0

dataValue(0) = "Insert"

ssetObj.SelectOnScreen gpCode, dataValue

MsgBox ssetObj.Count

ThisDrawing.SelectionSets.Item("SSET").Delete

End Sub

 

Cho em hỏi nếu như em muốn dùng đoạn code này thì sẽ phải làm thế nào.

 

Em newbie nên hỏi những câu buồn cười như thế này. Các bác chỉ giá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

Trả lời câu hỏi này sẽ hơi dài dòng, tôi tưởng bạn bít chút ít về VBA rồi.

Nhấn Alt+F11 vào menu Insert>module rồi copy cái đoạn trên vào, nhấn F5 để chạy thử.

Nếu Ok hãy lưu nó lại vào một nơi nào đó, đóng cửa sổ VBA lại.

Lần sau muốn sử dụng bạn hãy load nó lên bằng lệnh APPLOAD sau đó nhấn F8 để RUN.

Còn nhiều cái khác nữa nhưng có lẽ bạn phải tự tìm hiểu thôi.

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
Trả lời câu hỏi này sẽ hơi dài dòng, tôi tưởng bạn bít chút ít về VBA rồi.

Nhấn Alt+F11 vào menu Insert>module rồi copy cái đoạn trên vào, nhấn F5 để chạy thử.

Nếu Ok hãy lưu nó lại vào một nơi nào đó, đóng cửa sổ VBA lại.

Lần sau muốn sử dụng bạn hãy load nó lên bằng lệnh APPLOAD sau đó nhấn F8 để RUN.

Còn nhiều cái khác nữa nhưng có lẽ bạn phải tự tìm hiểu thôi.

 

Mình có 1 đoạn VBA sau mục đích xem toaj độ X của Block nhưng chưa đạt yêu cầu .

Mong các bạn chỉ hộ mình . Đây là File mình đã Embed đoạn VBA trong đó

http://www.cadviet.com/upfiles/3/drawing1_15.dwg

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

Trả lời 1 cái để kéo cái topic này lên rolleyes.gif

 

Sub toadoblock()

Dim returnObj As AcadBlockReference

Dim point As Variant

Dim basePnt As Variant

ThisDrawing.Utility.GetEntity returnObj, basePnt, "Select an object"

point = returnObj.InsertionPoint

MsgBox "X=" & point(0) - ThisDrawing.GetVariable("UCSORG")(0)

End Sub

 

 

Lý do ko bỏ vào thẻ code: sai code vì ký tự "&" bị chuyển thành "&;"

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

Code trong các mục khác Lisp bác có thể bỏ tạm vào Quote nhìn vẫn ngon .. ^^ Từ hồi biết Autodesk rắp tâm triệt hạ VBA, mình cũng chẳng còn hứng thú gì nữa :(

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

Code trong các mục khác Lisp bác có thể bỏ tạm vào Quote nhìn vẫn ngon .. ^^ Từ hồi biết Autodesk rắp tâm triệt hạ VBA, mình cũng chẳng còn hứng thú gì nữa :(

Ôi trời! Autodesk luôn luôn và lúc nào cũng rất có thiện ý với VBA đấy chứ:

 

AutoCAD ® 2011 vẫn hỗ trợ Visual Basic cho các ứng dụng (VBA).

Autodesk đã bắt đầu quá trình chuyển đổi tùy biến VB từ VBA công nghệ NET. Quá trình chuyển đổi sẽ xảy ra trong một vài năm. Trong thời gian này, Autodesk sẽ cung cấp tài liệu hướng dẫn và hỗ trợ khác để giúp khách hàng và phát triển của chúng tôi di chuyển từ VBA để công nghệ này tự động hóa mới. Bắt đầu với AutoCAD 2010, VBA là không còn một phần của các cài đặt mặc định của AutoCAD và phải được tải về và cài đặt riêng rẽ. Nếu bạn sử dụng các macro VBA trong môi trường làm việc của bạn, họ sẽ không còn làm việc trừ khi các module VBA được cài đặt trên hệ thống của bạn.

Khi bạn chạy một lệnh yêu cầu VBA, một hộp tin nhắn thoại sẽ được hiển thị rõ rằng VBA là không còn được cài đặt với AutoCAD và chỉ đạo bạn đến một trang web mà bạn có thể tải về các module VBA.

Autodesk đang làm cho các module VBA có sẵn để tải về tại địa điểm sau đây:

 

http://www.autodesk.com/vba-download

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

VBA sắp đi vào dĩ vãng ^^ Vấn đề là thời gian. Hiện các CAD bây giờ đã tách VBA ra thành 1 gói cài riêng rồi. Chỉ riêng việc phải tải thêm 1 phần cài nữa đã khiến mình cất VBA quay sang đọc Lisp rồi ^^

  • 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

Muốn viết một USForm có một command button là Mờ file, khi bấm vào đó thì nó hiện lên cái bảng để chọn file, mục đích là tìm và lấy đc đường dẫn đầy đủ của file đó, giống như phương thức GetOpenFilename của Excel, e có thêm thư viên COMDLG.ocx trong System32 vào rồi nhưng vẫn chưa thấy phương thức đó, các bác hướng dẫn nhiệt tình chút, cảm ơn các 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

Muốn viết một USForm có một command button là Mờ file, khi bấm vào đó thì nó hiện lên cái bảng để chọn file, mục đích là tìm và lấy đc đường dẫn đầy đủ của file đó, giống như phương thức GetOpenFilename của Excel, e có thêm thư viên COMDLG.ocx trong System32 vào rồi nhưng vẫn chưa thấy phương thức đó, các bác hướng dẫn nhiệt tình chút, cảm ơn các bác ợ !

Bạn add thêm reference Microsft Common dialog control 6.0 vào trên toolbox sẽ có thêm commondialog bạn tạo cái này trên form với tên: dialog rồi làm như sau:

1. tạo 1 textbox tên: textbox1, 1 button tên: vidu

2. click đúp vào button vừa tạo và paste đoạn code dưới vào

Dim duongdan
   With Me.Dialog
       .FileName = ""
       .Filter = "DWG file (*.dwg)|*.dwg"
       .ShowOpen
       duongdan = .FileName
   End With
   If duongdan = "" Then GoTo kt:
   Me.TextBox1 = duongdan
kt:

nếu không được thì đây là file mẫu: http://www.cadviet.com/upfiles/3/vidu_4.rar

  • 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

xin chào các bạn

tôi mới tập viết nên còn gà mờ lắm, qua tìm hiểu thì tôi cũng tạo được các layers và styletext, nhưng bây giờ tôi muốn chọn 1 lớp trong số đó làm lớp hiện hành và styletext để làm việc.

vậy mong các bạn cao thủ chỉ dùm

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

xin chào các bạn

tôi mới tập viết nên còn gà mờ lắm, qua tìm hiểu thì tôi cũng tạo được các layers và styletext, nhưng bây giờ tôi muốn chọn 1 lớp trong số đó làm lớp hiện hành và styletext để làm việc.

vậy mong các bạn cao thủ chỉ dùm

C1: Dùng biến hệ thống CLAYER TEXTSTYLE

ThisDrawing.setvar "VARIABLE_NAME",VALUE

C2 :

ThisDrawing.ActiveLayer = ThisDrawing.Layers("ActiveLayer")

ThisDrawing.ActiveTextStyle = ThisDrawing.Textstyle ("styleName")

 

Goodluck!

  • 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

C1: Dùng biến hệ thống CLAYER TEXTSTYLE

ThisDrawing.setvar "VARIABLE_NAME",VALUE

C2 :

ThisDrawing.ActiveLayer = ThisDrawing.Layers("ActiveLayer")

ThisDrawing.ActiveTextStyle = ThisDrawing.Textstyle ("styleName")

 

Goodluck!

Cám ơn bạn đã giúp đỡ

tiện đây cho mình hỏi làm thế nào để lấy dữ liệu kiểu số từ excell qua cad mà sau dấu chấm có 2 chữ số

ở đây mình chỉ lấy được nó như thế này

2.00 ---> 2

2.50 ---> 2.5

2.54 ---> 2.54

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ám ơn bạn đã giúp đỡ

tiện đây cho mình hỏi làm thế nào để lấy dữ liệu kiểu số từ excell qua cad mà sau dấu chấm có 2 chữ số

ở đây mình chỉ lấy được nó như thế này

2.00 ---> 2

2.50 ---> 2.5

2.54 ---> 2.54

Bạn format trước khi ghi ra

MyStr = Format(2.5, "###0.00") ' Returns "2.50"

​ Good luck!

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 format trước khi ghi ra

MyStr = Format(2.5, "###0.00") ' Returns "2.50"

​ Good luck!

để mình sữa lại

Cám ơn bạn đã chỉ cách

mình đang viết 1 ứng dụng nên có những cái vướng mắc. cũng nhờ các bạn chỉ cách nên bây giờ cũng tương đối hoàn thiện. Nếu bạn quan tâm thì vào đây http://www.cadviet.com/forum/index.php?showtopic=61127&pid=185701&st=0&&do=findComment&comment=185701

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

Em có một VBA vẽ Pline. Nhưng các Pline này không nối được với nhau. Các bác giúp em sửa VBA này để khi vẽ Pline thì nó sẽ nối các Pline riêng lẻ thành 1 Pline và khi nhập C thì nó nối với điểm đầu tiên tạo thành một Pline kín (như lệnh Pline trong AutoCAd thông thường).

Xin cám ơn các bác.!

Code VBA của e như sau:

Public Sub Diem()

Dim plineObj As AcadLWPolyline

Dim StPnt As Variant

Dim EdPnt As Variant

Dim prompt1 As String

Dim prompt2 As String

Dim Point(0 To 3) As Double

prompt1 = vbCrLf & " Enter a first point:"

prompt2 = vbCrLf & " Enter a second point:"

StPnt = ThisDrawing.Utility.GetPoint(, prompt1)

EdPnt = ThisDrawing.Utility.GetPoint(StPnt, prompt2)

Point(0) = StPnt(0): Point(1) = StPnt(1)

Point(2) = EdPnt(0): Point(3) = EdPnt(1)

Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(Point)

StPnt = EdPnt

Retry:

On Error Resume Next

EdPnt = ThisDrawing.Utility.GetPoint(StPnt, vbCrLf & "Enter a next point: ")

If Err = 0 Then

Point(0) = StPnt(0): Point(1) = StPnt(1)

Point(2) = EdPnt(0): Point(3) = EdPnt(1)

Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(Point)

Else

Err.Clear

GoTo endP

End If

StPnt = EdPnt

GoTo Retry

endP:

End Sub

Bạn thêm vào dòng dưới: "Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(Point)"

Bằng câu lệnh sau: plineObj.closed= true.

Vậy là OK

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

sao không thấy ai cả???? vậy

nếu ai biết có thể chỉ giáo.

Tôi đang viết 1 ứng dụng nhỏ đang làm việc trên excell, có lệnh nào gọi autocad hiện lên không? (ở đây autocad đang mở nhưng nằm dưới thanh công cụ, ý là muốn autocad hiện lên để làm việ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

Nhờ các cao thủ viết dùm em code VBA, để chọn nhiều bản vẽ trong 1 thư mục, sau đó mở từng bản vẽ, gửi đến 1 lệnh nào đó, rồi đóng bản vẽ đó, mở bản vẽ tiếp theo lặp lại thao tác đó cho đến khi thực hiện hết với toàn bộ bản vẽ đã chọn

 

Thanks các 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

Chào các bác em mới mò mẫm về VBA trong autocad, trong exel thì biết sơ sơ à. Em muốn làm một ví dụ là INSERT Block có tên sẳn trong bản vẽ rồi thì làm viết 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

Chào các bác em mới mò mẫm về VBA trong autocad, trong exel thì biết sơ sơ à. Em muốn làm một ví dụ là INSERT Block có tên sẳn trong bản vẽ rồi thì làm viết thế nào ạ.

Dim Bang As AcadBlockReference
VT1(0) = Diembatdau(0) - 5: VT1(1) = Diembatdau(1): VT1(2) = Diembatdau(2)
Set Bang = ThisDrawing.ModelSpace.InsertBlock(VT1, "BB", 1, 1, 1, 0)

Ví dụ trên sẽ Insert block có tên BB tại vị trí VT1

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ào các bạn ,mình muốn bố trí 1 đường cong clotoid vào làm đường cong chuyển tiếp mà ko biết vẽ như thế nào nhanh ngoài việc dùng lệnh spl ,bạn nào có thể cho mình xin lisp hoặc phần mềm hay code của VBA để dựng được đường clotoid với ,xin cám ơn rất 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

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


×