yuduy
-
Số lượng nội dung
4 -
Đã tham gia
-
Lần ghé thăm cuối
Bài đăng được đăng bởi yuduy
-
-
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 ạ.
-
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 ạ ?
-
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.
Các bác check hộ em xem VBA của em sai ở đâu.
trong Lập trình khác
Đã đăng · Trả lời báo cáo
Thx bác, thêm *1 vào, sửa lại khai báo n, gt là Variant là ok rồi :rolleyes: