Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
124 replies to this topic

#81 thelightzzz

thelightzzz

    Chưa sử dụng CAD

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

Đã gửi 27 August 2010 - 09:25 AM

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

#82 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 27 August 2010 - 11:12 AM

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

#83 nghiautc

nghiautc

    biết lệnh copy

  • Members
  • PipPipPip
  • 112 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 27 August 2010 - 04:42 PM

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.c...drawing1_15.dwg
  • 0

#84 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 24 July 2011 - 10:47 PM

Trả lời 1 cái để kéo cái topic này lên Hình đã gửi

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 "&;"
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#85 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 24 July 2011 - 10:53 PM

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 :(
  • 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


#86 hoan2182

hoan2182

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2646 Bài viết
Điểm đánh giá: 832 (rất tốt)

Đã gửi 24 July 2011 - 11:31 PM

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

Gió đưa cây cải về trời

Rau răm ở lại chịu lời đắng cay...


#87 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 24 July 2011 - 11:53 PM

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

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


#88 manhninhbao

manhninhbao

    Chưa sử dụng CAD

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

Đã gửi 06 August 2011 - 03:04 PM

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

#89 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 06 August 2011 - 04:54 PM

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.c...es/3/vidu_4.rar
  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#90 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 07 December 2011 - 02:09 PM

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

#91 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 07 December 2011 - 04:23 PM

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

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#92 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 09 December 2011 - 07:46 AM

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

#93 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 09 December 2011 - 02:01 PM

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

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#94 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 12 December 2011 - 10:29 AM

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

#95 trandat19882010

trandat19882010

    Chưa sử dụng CAD

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

Đã gửi 12 December 2011 - 01:34 PM

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

#96 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 19 December 2011 - 02:00 PM

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

#97 saycaphe

saycaphe

    biết vẽ circle

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

Đã gửi 28 December 2011 - 02:36 PM

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

#98 tvxdgt

tvxdgt

    Chưa sử dụng CAD

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

Đã gửi 06 April 2012 - 04:10 PM

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

#99 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 06 April 2012 - 04:56 PM

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

#100 compa1234

compa1234

    Chưa sử dụng CAD

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

Đã gửi 10 April 2012 - 09:35 PM

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