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

Hiển thị các đối tượng(Layer, Block...) có trong bản vẽ ACad thông qua hộp thoại UserForm

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

Các bạn cho mình hỏi khi mình sử dụng hộp thoại UserForm, mình muốn thông qua Combobox để hiển thị tên các Block (hoặc Layer...) có trong bản vẽ đang thực hiện thì phải viết code như thế nào nhỉ?

(Đại khái nó hiện danh sách Name các block giống như khi dùng lệnh INSERT trong Cad). Cảm ơn rất nhiều và mong được giúp đỡ!

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

Mình đã mò ra rồi, các bạn xem coi còn cách nào nữa ko nhé:

 

Dim ent As AcadBlock
Dim i As Double
Dim n As Double
n = ThisDrawing.Blocks.Count
ReDim BlockNames(1 To n) As String
i = 0
For Each ent In ThisDrawing.Blocks
i = i + 1
BlockNames(i) = ent.Name
With ComboBox1
.AddItem BlockNames(i)
End With
Next

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

Mình đã mò ra rồi, các bạn xem coi còn cách nào nữa ko nhé?

 

Dim ent As AcadBlock
Dim i As Double
Dim n As Double
n = ThisDrawing.Blocks.Count
ReDim BlockNames(1 To n) As String
i = 0
For Each ent In ThisDrawing.Blocks
i = i + 1
BlockNames(i) = ent.Name
With ComboBox1
.AddItem BlockNames(i)
End With
Next

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
Mình đã mò ra rồi, các bạn xem coi còn cách nào nữa ko nhé?

 

Dim ent As AcadBlock
Dim i As Double
Dim n As Double
n = ThisDrawing.Blocks.Count
ReDim BlockNames(1 To n) As String
i = 0
For Each ent In ThisDrawing.Blocks
i = i + 1
BlockNames(i) = ent.Name
With ComboBox1
.AddItem BlockNames(i)
End With
Next

thử cách này xem :

    Dim blk As AcadBlock
   For Each blk In ThisDrawing.Blocks
       If Left(blk.Name, 1) <> "*" Then
           ComboBox1.AddItem blk.Name
       End If
   Next

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
thử cách này xem :

    Dim blk As AcadBlock
   For Each blk In ThisDrawing.Blocks
       If Left(blk.Name, 1) <> "*" Then
           ComboBox1.AddItem blk.Name
       End If
   Next

Cảm on gia_bach, code của bạn ngắn gọn quá, mình làm theo đc rồi :( . Ko biết có cách nào cho tên 1 block (bất kỳ) hiển thị trên ComboBox1 trước khi click vào mũi tên để chọn các block trong userForm ko 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
Cảm on gia_bach, code của bạn ngắn gọn quá, mình làm theo đc rồi :( . Ko biết có cách nào cho tên 1 block (bất kỳ) hiển thị trên ComboBox1 trước khi click vào mũi tên để chọn các block trong userForm ko nhỉ?

Hiển thị tên block đầu tiên trên ComboBox1 trước khi click vào mũi tên:

   Dim blk As AcadBlock
   For Each blk In ThisDrawing.Blocks
       If Left(blk.Name, 1) <> "*" Then
           ComboBox1.AddItem blk.Name
       End If
   Next

   If ComboBox1.ListCount > 0 Then
       ComboBox1.ListIndex = 0
   End If

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

Thankyou gia_bach, cho mình hòi thêm một vấn đề nữa là:

Trong các hộp thoại Textbox, mình muốn hiển thị 1 giá trị mạc định ban đầu (giá trị này có thể edit) và màu của nó hiển thị trong hộp thoại userForm hơi nhạt 1 chút (màu số 8 chẳng hạn) thì mình phải viết code như thế nào 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
Thankyou gia_bach, cho mình hòi thêm một vấn đề nữa là:

Trong các hộp thoại Textbox, mình muốn hiển thị 1 giá trị mạc định ban đầu (giá trị này có thể edit) và màu của nó hiển thị trong hộp thoại userForm hơi nhạt 1 chút (màu số 8 chẳng hạn) thì mình phải viết code như thế nào nhỉ?

Đặt thuộc tính ForeColor cho Textbox.

VD :

- TextBox1.ForeColor = RGB(128, 128, 128) 'màu xám

- TextBox2.ForeColor = RGB(255, 0, 0) ' mà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 Gia_Bach ơi.

Bác có thể cho em phương thức xóa tất cả các line trong bản vẽ ko? Code VBA đó bác. Cảm ơn bác nhiều lắm

 

Code xóa tất cả các LINE trong bản vẽ như sau:

 

Public Sub Line_Delete()

Dim ssLine As AcadSelectionSet
Dim ent As AcadEntity

Dim FilterType(0) As Integer
Dim FilterData(0) As Variant

Set ssLine = ThisDrawing.SelectionSets.Add("Line")
FilterType(0) = 0
FilterData(0) = "Line"
ssLine.Select acSelectionSetAll, , , FilterType, FilterData

For Each ent In ssLine
	ent.Delete
Next

ssLine.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
Code xóa tất cả các LINE trong bản vẽ như sau:

 

Public Sub Line_Delete()

Dim ssLine As AcadSelectionSet
Dim ent As AcadEntity

Dim FilterType(0) As Integer
Dim FilterData(0) As Variant

Set ssLine = ThisDrawing.SelectionSets.Add("Line")
FilterType(0) = 0
FilterData(0) = "Line"
ssLine.Select acSelectionSetAll, , , FilterType, FilterData

For Each ent In ssLine
	ent.Delete
Next

ssLine.Delete

End Sub

Cảm ơn bác nhiều. Rất mong sau này bác giúp em chút ạ.

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  

×