Chuyển đến nội dung
Diễn đàn CADViet

yuduy

Thành viên
  • Số lượng nội dung

    4
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi yuduy


  1. Em đang thử viết VBA để cộng giá trị của một số với một giá trị bất kỳ như sau

    Public Sub q1()

    Dim n, gt As Integer

    Dim b1 As AcadText

    Dim ss1 As AcadSelectionSet

    On Error Resume Next

     

    n = InputBox("Nhap vao gia tri can cong")

     

    Set ss1 = ThisDrawing.SelectionSets.Add("New1")

    ss1.SelectOnScreen

    For Each b1 In ss1

    gt = b1.TextString + n

    b1.TextString = Format(gt, "0.00")

    b1.color = acMagenta

    Next

    ss1.Delete

    End Sub

    Khi chạy nó có ra bảng để nhập giá trị cần cộng thêm vào, sau đó chọn text đang cần cộng giá trị đó, nhưng em thử mãi số cần thay đổi vẫn thế, chỉ đổi màu sang Magenta chứ không cộng thêm giá trị n em đã nhập. Các bro chỉ dùm em xem có sai sót ở đâu không ạ.


  2. Cảm ơn bác, được rồi :undecided:

    Có cái nữa hỏi bác luôn là code nào để nhập số điểm cần tính n mà nó hỏi ở dưới Command bar rồi nhập dưới đó luôn chứ không phải dùng inputbox như em đang làm không ạ ? Vì inputbox nó hiện lên bảng để nhập, không pan zoom được hơi bất tiện. Hoặc làm sao để không phải nhập n, chỉ việc chọn các điểm cần tính, thích ngắt lệnh ở đâu thì ngắt không ạ ?


  3. Em có viết thử 1 đoạn VBA để tính cao độ trong cad như sau:

     

    Public Sub Tinh_cao_do()
    Dim bl1, bl2 As AcadText
    Dim m, n, i, d As Integer
    Dim ss1, ss2 As AcadSelectionSet
    Dim point0 As Variant
    On Error Resume Next
    
    point0 = ThisDrawing.Utility.GetPoint(, "chon diem cao do goc")
    
    ThisDrawing.Utility.Prompt "chon text cao do goc"
    Set ss1 = ThisDrawing.SelectionSets.Add("New1")
    ss1.SelectOnScreen
    Set m = bl1.TextString
    ss1.Delete	
    
    n = InputBox("So diem can tinh cao do")
    
    For i = 1 To n
    pointi = ThisDrawing.Utility.GetPoint(, "chon diem can tinh cao do")
    d = point0(1) - pointi(1)
    
    ThisDrawing.Utility.Prompt "chon text hien thi"
    Set ss2 = ThisDrawing.SelectionSets.Add("New2")
    ss2.SelectOnScreen
    	For Each bl2 In ss2
    	bl2.TextString = Format(m - d, "0.00")
    	bl2.Update
    	bl2.color = acMagenta
    	Next
    ss2.Delete
    Next
    End Sub

     

    Không hiểu đoạn chọn text cao độ gốc có sai đâu không mà khi chạy, sau khi chọn point cao độ gốc rồi, nó nhảy sang luôn bước InputBox("So diem can tinh cao do")

    luôn, không có bước chọn Text để nhận làm cao độ gốc. Em chuyển sang kiểu này thì được (nhưng kiểu này hơi khó chịu vì phải nhập cao độ gốc):

     

    Public Sub Tinh_cao_do()
    Dim bl1, bl2 As AcadText
    Dim m, n, i, d As Integer
    Dim ss1, ss2 As AcadSelectionSet
    Dim point0 As Variant
    On Error Resume Next
    
    point0 = ThisDrawing.Utility.GetPoint(, "chon diem cao do goc")
    
    m = InputBox("Nhap cao do goc")
    
    n = InputBox("So diem can tinh cao do")
    
    For i = 1 To n
    pointi = ThisDrawing.Utility.GetPoint(, "chon diem can tinh cao do")
    d = point0(1) - pointi(1)
    
    ThisDrawing.Utility.Prompt "chon text hien thi"
    Set ss2 = ThisDrawing.SelectionSets.Add("New2")
    ss2.SelectOnScreen
    	For Each bl2 In ss2
    	bl2.TextString = Format(m - d, "0.00")
    	bl2.Update
    	bl2.color = acMagenta
    	Next
    ss2.Delete
    Next
    End Sub

     

    Kiểu này phải nhập cao độ gốc bằng phím, lại có bảng Inbox hiện lên nên không pan zoom được, nhiều khi trong phạm vi màn hình không có Text cao độ gốc thì lại phải ESC pan zoom để xem rồi chạy lại, hơi bất tiện.

     

    Thêm nữa là phải đếm số điểm cần tính cao độ để nhập cho giá trị n, có cách nào không phải nhập mà cứ chọn point cần tính, text hiển thị, rồi lại point cần tính thứ 2, text hiển thị thứ 2, ... bao giờ xong hết các điểm cần tính thì bấm gì đó để kết thúc lệnh không các bác ?

     

    Các bác chỉ giúp em với.

×