Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
* * - - - 3 Bình chọn

VBA cho AutoCad-Hãy cùng tham gia trao đổi


  • Please log in to reply
56 replies to this topic

#41 babbosmart

babbosmart

    Chưa sử dụng CAD

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

Đã gửi 13 December 2013 - 10:38 PM

các bác cho em hỏi làm sao để code một nút commandbutton đê mở form khác, em định viết một ct tính thép xong vẽ = vba for cad, dùng nhiều form mà ko bit mở form = comman kiểu gi ạ, 


  • 0

#42 NguyenNgocSon

NguyenNgocSon

    biết dimstyle

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

Đã gửi 14 December 2013 - 08:19 AM

Dung 1 sub gọi form đó lên

Làm 1 lisp gọi sub đó lên là ok

Ví du:

'1.Thu tuc goi Form có tên là Userform 1

sub aa()

Userform1.show

end sub

'2.Lisp gọi form

(defun c:goi()

(command "vbarun" "aa")

(princ)

)

;Cai dat
(defun c:ds()
(Command "Vbarun" "Caidat")
(grtext -1 "0968.870.268") 
(princ) 
)
;Cai dat
(defun c:ds()
(Command "Vbarun" "Caidat")
(grtext -1 "0968.870.268") 
(princ) 
)
(defun c:TG()
(alert "\n Name:Nguyen Ngoc Son \n Phone: 0968.870.268")
(grtext -1 "Nguy\U+1EC5n Ng\U+1ECDc S\U+01A1n")
(princ) 
)
;Cai dat
(defun c:ds()
(Command "Vbarun" "Caidat")
(grtext -1 "0968.870.268") 
(princ) 
)

  • 0

#43 babbosmart

babbosmart

    Chưa sử dụng CAD

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

Đã gửi 14 December 2013 - 12:30 PM

nghĩa là code trên cho nút cmbuttog đó hả bác????


  • 0

#44 NguyenNgocSon

NguyenNgocSon

    biết dimstyle

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

Đã gửi 14 December 2013 - 12:43 PM

Bạn hỏi thế thì chịu. Nếu cần thì bạn phải post code lên mới giúp trọn vẹn được :)


  • 0

#45 dainguyenjenny

dainguyenjenny

    Chưa sử dụng CAD

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

Đã gửi 30 May 2015 - 09:18 PM

Bạn chụp lại học gửi bạn về của bạn cho Minh xem minh xem minh co giup duoc gi cho ban khong? minh cung su dung textbox roi, van chay ngon lanh ma


  • 0

#46 dainguyenjenny

dainguyenjenny

    Chưa sử dụng CAD

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

Đã gửi 30 May 2015 - 09:21 PM

Sau 1 thời gian tìm hiểu thì tôi đã hoàn tất Code có thể tách bản vẽ và in tự động nhiều bản vẽ nằm trong 1 bản model hoặc layout không biết ai cần dùng không thì tôi sẽ cho

Ban gui vao Mail cho minh dk Mail minh la : ngvdai.nuce@gmail.com cam on ban nhieu nhe


  • 0

#47 thothongcong

thothongcong

    biết pan

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

Đã gửi 19 September 2015 - 11:43 AM

Hi mọi người có thể giúp em vấn đề này không.

http://www.cadviet.c...cad3d-b-ng-vba/

em đã post lên diễn đàn chắc à không đúng chủ đề nên khong thấy ai trả lời cả

hi vọng topic có thể giúp e được phân nào

 

thanks all


  • 0

#48 LinhChung

LinhChung

    Chưa sử dụng CAD

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

Đã gửi 05 November 2015 - 08:02 PM

Vote up 

Xin chào ketxu!

Mình có một đoạn mã VBA nhờ bạn chỉ điểm một vài nội dung trong đó. Mã VBA như sau:

 

Public Function Processor() As String
Dim GetSN As Variant
Dim SubGetSN As Variant
Dim wmi As Variant
Dim str1 As String
Dim str3() As String
Dim str4 As String
Dim str5 As String
Dim va As Variant
Dim i As Integer
Dim j As Integer
    On Error Resume Next
    ' Get the Windows Management Instrumentation object.
    Set wmi = GetObject("WinMgmts:")
 
    ' Get the "base SubGetSNs" (mother SubGetSNs).
    Set GetSN = wmi.InstancesOf("Win32_ComputerSystemProduct")
    For Each SubGetSN In GetSN
        
        str1 = str1 & SubGetSN.UUID
     
    Next SubGetSN
    If Err <> 0 Then
    Err.Clear
    Processor = "481455476449"
    Else
    
    If Len(str1) > 0 Then str1 = _
        Trim$(str1)
    str3 = Split(str1, "-")
 
    For Each va In str3
    str4 = str4 & va
    Next
 
    j = Len(str4) \ 8
    For i = 1 To j * 8 Step 8
    str5 = str5 & Asc(Mid(str4, i, 1)) + Asc(Mid(str4, i + 1, 1)) + 1 + Asc(Mid(str4, i + 2, 1)) _
    + Asc(Mid(str4, i + 3, 1)) - 1 + Asc(Mid(str4, i + 4, 1)) + Asc(Mid(str4, i + 5, 1)) + 1 + Asc(Mid(str4, i + 6, 1)) _
    + Asc(Mid(str4, i + 7, 1))
    Next
    
    Processor = str5
    End If
End Function

  • -1

#49 kapino

kapino

    Chưa sử dụng CAD

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

Đã gửi 03 July 2016 - 03:40 AM

Sử dụng select Previous bằng việc thêm dòng lệnh đầu cú pháp:

ThisDrawing.SendCommand "_select" & vbCr & "_P" & vbCr & vbCr


  • 0

#50 kapino

kapino

    Chưa sử dụng CAD

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

Đã gửi 03 July 2016 - 03:47 AM

Tại sao không dùng Slect Previous để mình lấy lại đối tượng vừa select xong, bằng việc thêm cú pháp ở đầu như sau:

ThisDrawing.SendCommand "_select" & vbCr & "_P" & vbCr & vbCr


  • 0

#51 quancd

quancd

    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 March 2017 - 11:04 AM

Mình có một công trình thực tế như sau, mong tất cả mọi người cùng hợp tác. Đó là thống kê khối lượng trên bản vẽ dùng VBA kết hợp giữa Cad và Exel. Tức là mình lấy dữ liệu từ bản vẽ Cad xong qua exel.

 


  • 0

#52 dinhvantrang

dinhvantrang

    biết lệnh trim

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

Đã gửi 16 March 2017 - 04:58 PM

Mình có một công trình thực tế như sau, mong tất cả mọi người cùng hợp tác. Đó là thống kê khối lượng trên bản vẽ dùng VBA kết hợp giữa Cad và Exel. Tức là mình lấy dữ liệu từ bản vẽ Cad xong qua exel.

Rồi sao nữa bác?


  • 0

Series video hướng dẫn lập trình VBA cho Autocad & Excel

https://www.youtube....m54mGak6O9YSmfT


#53 phantuhuong

phantuhuong

    biết dimedit

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

Đã gửi 16 March 2017 - 05:06 PM

Mình đã kiểm nghiệm như bạn nói.Đúng là với VBA chúng ta phải chọn đối tượng sau khi gõ lệnh.

Nhìn bạn minh họa với Autolisp và VBA, có vẻ VBA dài dòng quá nhỉ trong khi đó Lisp chỉ vài dòng là ok ngay.

Haizzzzaaa!

 

Một ông con đẻ, một ông con nuôi mà :). Nếu VBA còn được hỗ trợ thì tốt, nhưng đã ngừng từ AutoCad 2010 thì phải.

Anh cũng là người đam mê món này nhỉ :)


  • 0

#54 dinhvantrang

dinhvantrang

    biết lệnh trim

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

Đã gửi 16 March 2017 - 10:49 PM

Một ông con đẻ, một ông con nuôi mà :). Nếu VBA còn được hỗ trợ thì tốt, nhưng đã ngừng từ AutoCad 2010 thì phải.

Anh cũng là người đam mê món này nhỉ :)

Yes bác, từ đời cad 2010 nó đã tách riêng thằng VBA ra chắc cho nhẹ gánh, ai thích xài VBA thì cài thêm module tương ứng vào.

 Được cái liên kết giữa Autocad và Excel ổn nên cũng không đến nỗi lắm.

P/S: Em chắc nhỏ tuổi hơn bác nhiều ạ


  • 0

Series video hướng dẫn lập trình VBA cho Autocad & Excel

https://www.youtube....m54mGak6O9YSmfT


#55 phantuhuong

phantuhuong

    biết dimedit

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

Đã gửi 29 March 2017 - 10:25 AM

Yes bác, từ đời cad 2010 nó đã tách riêng thằng VBA ra chắc cho nhẹ gánh, ai thích xài VBA thì cài thêm module tương ứng vào.

 Được cái liên kết giữa Autocad và Excel ổn nên cũng không đến nỗi lắm.

P/S: Em chắc nhỏ tuổi hơn bác nhiều ạ

 

Tôi là người mày mò, phát triển VBA, VB6 for Office và AutoCad. Thời ban đầu hơi cực vì tài liệu chả có, Internet cũng hạn chế. Giờ thì nhiều tài liệu, help cũng ổn. Các bạn trẻ đam mê mà nghiên cứu thì nhanh lên tay.


  • 1

#56 ngocvuong84

ngocvuong84

    Chưa sử dụng CAD

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

Đã gửi 12 May 2017 - 11:04 AM

Mình có phần Insert block như bên dưới khi tạo optionbuttom1 thì insert lên cad ok . Nhưng khi mình tạo thêm optionbuttom2 . Mình copy phần 1 và chỉ đổi tên nó vẫn load lên listbox dữ liệu nhưng lại ko insert ra cad được . Xin mọi người giúp đỡ

Option Explicit
Const strfolderPath1 As String = "E:\NASOKA"
Const strfolderPath As String = "E:\BLOCK INSERT\"

Private Sub cmdcancel_Click()
 Unload Ussinsertblock
End Sub

Private Sub Cmdinsert_Click()

Dim objBlock As AcadBlockReference
Dim VarPiont As Variant
Dim strBlockname As String
Dim objBlock1 As AcadBlockReference
Dim VarPiont1 As Variant
Dim strBlockname1 As String
strBlockname = Ussinsertblock.Lstblockname.Value
strBlockname1 = Ussinsertblock.Lstblockname.Value

On Error GoTo Exitsud
VarPiont = ThisDrawing.Utility.GetPoint(, "pick piont to insert Block")
VarPiont1 = ThisDrawing.Utility.GetPoint(, "pick piont to insert Block")
Set objBlock = ThisDrawing.ModelSpace.InsertBlock(VarPiont, strfolderPath & strBlockname, 1, 1, 1, 0)
Set objBlock1 = ThisDrawing.ModelSpace.InsertBlock(VarPiont1, strfolderPath1 & strBlockname1, 1, 1, 1, 0)
Exitsud:
  Err.Clear
End Sub

Private Sub Frame2_Click()

End Sub

Private Sub Lstblockname_Click()

End Sub


Private Sub OptionButton1_Click()
Call UserForm_Initialize
End Sub

Private Sub OptionButton2_Click()
Call nasoka
End Sub

Private Sub UserForm_Initialize()
Dim FSO As New Scripting.FileSystemObject
Dim objFolder As Folder
Dim objfile As File

Set objFolder = FSO.GetFolder(strfolderPath)

Ussinsertblock.Lstblockname.Clear

For Each objfile In objFolder.Files
If UCase(FSO.GetExtensionName(objfile.Path)) = "DWG" Then
  Ussinsertblock.Lstblockname.AddItem objfile.Name
  End If
Next
End Sub

Private Sub nasoka()
Dim FSO1 As New Scripting.FileSystemObject
Dim objFolder1 As Folder
Dim objfile1 As File

Set objFolder1 = FSO1.GetFolder(strfolderPath1)

Ussinsertblock.Lstblockname.Clear

For Each objfile1 In objFolder1.Files
If UCase(FSO1.GetExtensionName(objfile1.Path)) = "DWG" Then
  Ussinsertblock.Lstblockname.AddItem objfile1.Name
  End If
Next
End Sub

 


  • 0

#57 VBA Dat Nguyen

VBA Dat Nguyen

    Chưa sử dụng CAD

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

Đã gửi 03 July 2017 - 03:24 PM

Mình thấy trong Lisp có hàm ssget ( chọn đối tượng ) --> trong vba không có --> mình thử xây dựng 1 hàm gần giống như kiểu ssget  như sau :

Sub ssget()
    Dim ssetObj As AcadSelectionSet
    Dim entity As AcadEntity
        Set ssetObj = ThisDrawing.PickfirstSelectionSet
        If ssetObj.Count Then
            ...........................
        Else
            Set ssetObj = ThisDrawing.SelectionSets.Add("#")
            If Err <> 0 Then
               Set ssetObj = ThisDrawing.SelectionSets("#"): ssetObj.Clear
            End If
        ssetObj.SelectOnScreen
        ...............................
End Sub

Nếu mà code trên chạy trong môi trường vba thì không vấn đề gì : * thuộc tính pickfirstSelectionset hoạt động bình thường

nhưng nếu ta thử gọi macro trên bằng lisp thì thuộc tính pickfristSelectionset không thể hoạt động : hàm báo lỗi nil 

(defun C:6()
      (command "-vbarun" "ssget")
)

---> Mình vẫn chưa tìm ra được nguyên nhân và cách khắc phục, mong các bạn yêu thích vba trong autocad chia sẻ ,trao đổi thêm về vấn để trên !

thanks! <----------- cảm ơn mọi người đã dành thời gian đọc bài viết của mình 

Bạn thiếu tên moldun trong lisp gọi lệnh của lisp ấy mà :))


  • 0