XD360 KÍNH CHÚC CHO MỌI NHÀ VẠN SỰ AN LÀNH!

Phần mềm ôn thi sát hạch chứng chỉ hành nghề xây dựng

 Quên mật khẩu
 Đăng ký mới
Anh Trần HòeBùi Quốc Hưng
Xem: 1994|Trả lời: 12
In Chủ đề trước Tiếp theo
Thu gọn cột thông tin

[Nhờ] mọi người gỡ rối hộ đoạn mã VBA

[Lấy địa chỉ]
Nhảy đến trang chỉ định
1#

Hãy đăng nhập để có nhiều chức năng hữu dụng hơn và xem ảnh rõ hơn!

Bạn phải đăng nhập để xem được nội dung, nếu bạn chưa có tài khoản? hãy Đăng ký mới

x
Đây là tôi viết đoạn mã để ngắt khi hàng rào và cột giao nhau. Nhưng nó lắm khi chỉ chạy được 1 vài cột còn lại thì ngắt sai lung tung phèng cả lên. Ai biết chỉ dùm tôi với. Tôi đã chia sẻ nó ở bên kết cấu nhưng vẫn khó quá:

Khách: Nội dung này bị ẩn, bạn cần bấm Thank để xem.
[/url]

Đánh giá

Bạn nên copy cái code đó vào đây, ai lại bắt forum này qua forum khác để đọc bài viết của bạn.  Đăng lúc 21/10/2016 10:04

Số người tham gia 2Thanked +2 Thu lại Lý do
ngoctm269 + 1 Thích bài này! Thanks!
nguoidatvo + 1 Bài hay. Cảm ơn!

Xem tất cả

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

2#
 Tác giả| 506509 Đăng lúc 21/10/2016 11:52 | Chỉ xem của tác giả
Đây là Code VBA
[Visual Basic] 纯文本查看 复制代码
Sub A_TrimTuongCot()
On Error Resume Next
Dim ExcelApp As Object
Set ExcelApp = GetObject(, "Excel.Application")
If Err <> 0 Then
Err.Clear
Set ExcelApp = CreateObject("Excel.Application")
End If
ExcelApp.Visible = False
AppActivate ExcelApp.Caption
'ExcelApp.Workbooks.Add ' MO FILE TRANG"
ExcelApp.Workbooks.Add.SaveAs "e:\THO1.XLS"
'ExcelApp.Workbooks.Open "e:\THO.XLSX"
ExcelApp.worksheets("sheet1").Activate
'ExcelApp.range("a2").Value = "aaa"
'ExcelApp.cells(1, k).Value = "aaa"
ExcelApp.Visible = True
Dim MangTuong(0 To 100000) As Variant
Dim MangCot(0 To 100000) As Variant
Dim TapGiao As Variant
Dim MangGiao(0 To 10000000) As Variant
Set objmien = ThisDrawing.SelectionSets.Add("TenMien")
i = -1
j = -1
objmien.SelectOnScreen
' Lay Mang tuong
For Each tt In objmien
If tt.ObjectName = "AcDbLine" Then
i = i + 1
Set MangTuong(i) = tt
End If
Next tt
n = i
'Lay Mang cot
For Each tt In objmien
If tt.ObjectName <> "AcDbLine" Then
j = j + 1
Set MangCot(j) = tt
End If
Next tt
m = j
ThisDrawing.SelectionSets.Item("TenMien").Delete
'============================= TIM TOA DO GIAO DIEM==================================
Dim pa(0 To 2) As Double
Dim TapGiaotb(0 To 2) As Double
Dim diem1(1000000) As String
Dim diem2(1000000) As String
Dim diemtb(1000000) As String
Dim cmd(1000000) As String
nn = 0
sogiao = 0
For ii = 0 To n
stp = MangTuong(ii).StartPoint
EnP = MangTuong(ii).EndPoint
startp1 = stp(0) & "," & stp(1) & "," & stp(2)
For jj = 0 To m
TapGiao = MangTuong(ii).IntersectWith(MangCot(jj), acExtendNone)
Dim iii As Integer, kkk As Integer
iii = 0
'MsgBox nn
If VarType(TapGiao) <> vbEmpty Then
For iii = LBound(TapGiao) To UBound(TapGiao)
'MsgBox sogiao
MangGiao(nn) = Round(TapGiao(iii), 8)
MangGiao(nn + 1) = Round(TapGiao(iii + 1), 8)
MangGiao(nn + 2) = Round(TapGiao(iii + 2), 8)
ExcelApp.cells(sogiao + 1, 1).Value = MangGiao(nn)
ExcelApp.cells(sogiao + 1, 2).Value = MangGiao(nn + 1)
ExcelApp.cells(sogiao + 1, 3).Value = MangGiao(nn + 2)
ExcelApp.cells(sogiao + 1, 4).Value = sogiao
pa(0) = TapGiao(iii)
pa(1) = TapGiao(iii + 1)
pa(2) = TapGiao(iii + 2)
Set gg = ThisDrawing.ModelSpace.AddMText(pa, 500, sogiao)
gg.Height = 50
sogiao = sogiao + 1
iii = iii + 2
nn = nn + 3
Next iii
End If
TapGiaotb(0) = Round((MangGiao(nn - 6) + MangGiao(nn - 3)) / 2, 8)
TapGiaotb(1) = Round((MangGiao(nn - 5) + MangGiao(nn - 2)) / 2, 8)
TapGiaotb(2) = Round((MangGiao(nn - 4) + MangGiao(nn - 1)) / 2, 8)
diem1(sogiao) = MangGiao(nn - 6) & "," & MangGiao(nn - 5) & "," & MangGiao(nn - 4)
diemtb(sogiao) = TapGiaotb(0) & "," & TapGiaotb(1) & "," & TapGiaotb(2)
diem2(sogiao) = MangGiao(nn - 3) & "," & MangGiao(nn - 2) & "," & MangGiao(nn - 1)
ExcelApp.cells(sogiao, 5).Value = TapGiaotb(0)
ExcelApp.cells(sogiao, 6).Value = diemtb(sogiao)
'MsgBox DIEM1
'MsgBox DIEM2
'MsgBox diemtb
cmd(nn / 2) = ".break" & Chr(10) & diemtb(sogiao) & vbCr & "f" & vbCr & diem1(sogiao) & vbCr & diem2(sogiao) & vbCr
'MsgBox cmd
'ThisDrawing.SendCommand cmd
Next jj
'===================BREAK DOI TUONG========================================
Next ii
' =============== HET LAY TOA DO GIAO=============================
ExcelApp.cells(1, 50).Value = sogiao
For y = 1 To nn / 2
If cmd(y) <> "" Then
ThisDrawing.SendCommand cmd(y)
End If
Next y
Set ExcelApp = Nothing
End Sub

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

3#
tranhoe Đăng lúc 21/10/2016 18:35 | Chỉ xem của tác giả
Code có tác dụng gì?. Đâu phải ai cũng như Bạn; người giỏi lập trình thì chưa chắc biết xây dựng, người biết xây dựng thì chưa chắc biết lập trình.
Một câu hỏi không có tính chuyên nghiệp - Là điều mà XD360 ghét nhất!
Hỏi thế này thì chuyên gia Lập trình hoặc chuyên gia Xây dựng cũng bó tay.

Tôi đưa vào Xóa tạm!
PS: Bạn copy bài này đưa qua GPE thử rồi biết: Bài sẽ bị đưa vào Hậu viên (tương tự Thùng rác Tạm của XD360)

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

5#
M@trixs Đăng lúc 23/10/2016 12:07 | Chỉ xem của tác giả
506509 gửi lúc 21/10/2016 21:59
Anh xóa luôn đi cũng được chả cần gì phải tạm cả. Bây giờ là thế kỷ thứ bao nhiê ...

Hết sức bình tĩnh, đừng manh động, ngồi xuống ta nói chuyện tí.

Thứ 1: Anh TranHoe chắc là lớn tuổi hơn bạn nhiều => Tôn trọng trong giao tiếp là điều cơ bản.

Thứ 2: Bạn viết bài hỏi không rõ ràng thì sao trách người khác được :"Đây là tôi viết đoạn mã để ngắt khi hàng rào và cột giao nhau. Nhưng nó lắm khi chỉ chạy được 1 vài cột còn lại thì ngắt sai lung tung phèng cả lên". Giao nhau để làm gì ? Trước đó thì có gì xảy ra ? Bạn đang làm tren Excel hay trên CAD (Cái này tôi đoán thế thôi chứ tôi cũng chẳng biết bạn làm trên gì, có khi trên Word cũng nên - Đừng nói Word nó không có VBA nha). Nên nghiêm túc đặt mình vào vị trí người đọc để có cái nhìn tổng quát hơn....

Thứ 3: Khi chúng ta làm việc lớn chỉ sợ không có người chê hay góp ý thôi. Có một vĩ nhân đã từng nói:"Thằng nào chê bai tao thì thằng đó mới là bạn thân của tao, còn kẻ thù của tao chúng chỉ chuyên đi khen tao thôi, tao khinh"...

Đôi lời gởi đến bạn....

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

6#
 Tác giả| 506509 Đăng lúc 23/10/2016 16:48 | Chỉ xem của tác giả
Công nhận tôi cũng hơi bị kích động thật. Thành thật mà nói nì cũng xin lỗi ANh Hòe. Nhưng mà 1 đoạn mã mất bao nhiêu tâm huyết viết lên lại bị chê là không có tính chuyên nghiệp thì ức không chịu nổi. Nói đơn giản thì đay là đoạn mã mà ngắt ra đoạn tường giao với cột. với đoạn mã này hoàn thành thì tôi có thể tính luôn được tổng chiều dài các đoạnt tường bằng 1 chương trình VBA hoặc lisp đơn giản. mà dễ dàng tính khối lượng của nó trên mặt bằng nếu biết được chiều cao và chiều rộng. SOng hành với nó là tính thêm được cả sơn, trát, bả cho đoạn tường này. hoặc tính mở rộng thêm cho các đoạn giằng giao cột hay dầm giao cột, hoặc dầm và đài. Nếu 1 người lập trình thì chỉ cần nhìn đoạn mã là họ biết ngay trương trình sai ở đâu thậm chí không cần Debug. Còn tôi đã viết ở trên rõ là ngắt hàng rào với cột giao nhau thì cai cũng biết là trên Cad rồi, ngay cả là người không biết VBA. Còn với 1 người biết VBA thì nhìn qua đoạn mã cũng phân biệt ngay được là chạy trên chương trình Cad hay ofifce rồi, còn những người không biết thì mình cũng không cần hỏi vì đơn giản là họ không đủ trình độ để trả lời rồi. Dân trong nghề nhìn là biết không khó như bạn nghĩ đâu, chỉ có dân ABC mới mất time lâu thôi

Đánh giá

Mong bạn tiếp tục chia sẻ. Thanks!: 5.0
Nói chung là rất lười đọc code, code của mình viết nhiều khi đọc lại cũng chẳng hiểu. Hoặc cũng có khi bạn đúng, mình là dân ABC, khả năng của bạn cao hơn mình nhiều   Đăng lúc 24/10/2016 18:27
Mong bạn tiếp tục chia sẻ. Thanks!: 5
Đó, rành mạch vầy thì ai mà chẳng muốn giúp. Nhờ các cao thủ giúp bạn này với !  Đăng lúc 23/10/2016 19:38
Không phải chê Code không chuyên nghiệp!. Chỉ chê cách hỏi mà thôi!  Đăng lúc 23/10/2016 19:11

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

7#
fubi Đăng lúc 25/10/2016 10:10 | Chỉ xem của tác giả
506509 gửi lúc 23/10/2016 16:48
Công nhận tôi cũng hơi bị kích động thật. Thành thật mà nói nì cũng xin lỗi ANh Hò ...

1. Diễn đàn xd360 đang hướng đến và xây dựng 1 cộng đồng xây dựng VN chuyên nghiệp ngay từ việc đặt vấn đề.
Cách bạn đặt vấn đề trợ giúp ngay từ ban đầu mình thấy thiếu tính chuyên nghiệp ở chỗ: bạn nêu vấn đề chung chung, tưởng rằng người không biets gì thì bạn chẳng cần, còn người biết rành sẽ tự khắc hiểu điều bạn nói. Như vậy là chưa ổn. Bởi qua 1 chủ đề bất kỳ, XD360 hướng đến là sẽ có lợi ích (ít nhất là định hình được kiến thức cần giải quyết) cho cả người chưa biết lẫn người đã biết.

2. Với cá nhân mình với sự hiểu biết còn "ABC" về lập trình mình chưa đồng tình với bạn khi cho rằng: "Nếu 1 người lập trình thì chỉ cần nhìn đoạn mã là họ biết ngay trương trình sai ở đâu thậm chí không cần Debug".

Đúng như Anh TranHoe nói: với người lập trình giỏi nhưng họ không có chuyên môn XD thì họ đọc code họ cũng chẳng thể nào hiểu bạn đang giải quyết cho việc gì kể cả code đó được viết rất chuẩn mực. Trong khi đó, code bạn viết chắc gì đã chuẩn mực nên khó mà hiểu được bạn đang viết để giải quyết cái gì. Điều này ví như: bạn đọc bài văn mô tả con cò của 1 người A, nhưng khi bạn đọc bạn lại hiểu rằng người A đang tả con gà chứ k phải con cò (trong khi người A nghĩ chắc chắn rằng họ đang tả con cò chứ không phải con gà).

Vậy nên, để giải quyết vấn đề của bạn bằng lập trình, bạn cần nêu ra đề bài, thuật toán bạn đang giải quyết. Từ đó mới giúp bạn được.
Ví dụ:
- Đề bài: muốn lập trình VBA trong autocad để tính được chiều dài của phần xây tường rào có trụ.
- THuật toán:
+ xác định nét vẽ nét đôi (là nét vẽ tường rào trong cad - Nếu vẽ nét khác thì chịu), bắt điểm đầu điểm cuối của từng đoạn rào, tính ra chiều dài mỗi đoạn.
+ Kết xuất số liệu qua excel để tính tổng hợp KL.

3. Không biết có đúng ý bạn chưa?

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

8#
 Tác giả| 506509 Đăng lúc 26/10/2016 14:34 | Chỉ xem của tác giả
fubi gửi lúc 25/10/2016 10:10
1. Diễn đàn xd360 đang hướng đến và xây dựng 1 cộng đồng xây dựng VN chuyên nghiệ ...

CHỈ CẦN VẼ 1 ĐƯỜNG LINE DUY NHẤT THÔI BẠN Ạ. NGUYÊN TẮC LÀ CỨ GẶP CỘT LÀ BREAK HOẶC TRIM. TA CÓ THỂ KHAI BÁO ĐƯỜNG LINE NÀY LÀ TIM HAY MÉP TƯỜNG TÙY Ý. CÁI KHÓ LÀ VIỆC DÙNG LỆNH TRIM HOẶC BREAK ĐỀU BỊ LỖI KHI NÓ BREAK ĐƯỢC VÀI CÁI CỘT. CÒN VỆC XUẤT RA EXCEL THÌ KHÔNG KHÓ LẮM. CÁI NÀY NẾU VẼ TAY TỪNG ĐƯỜNG 1 LINE THÌ TÔI ĐÃ VIẾT XONG RỒI.

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

Phiên bản Mobile|Phần mềm ôn thi sát hạch chứng chỉ hành nghề xây dựng  

Phần mềm dự toán xây dựng excel | Hướng dẫn lập dự toán xây dựng | Phần mềm tư vấn giám sát | Phần mềm quản lý chất lượng xây dựng |

Phần mềm ôn thi sát hạch chứng chỉ hành nghề xây dựng

Phần mềm ôn thi sát hạch chứng chỉ hành nghề Kiến Trúc sư

Phần mềm ôn thi sát hạch chứng chỉ hành nghề Đấu thầu

GMT+7, 20/4/2024 17:43 , Processed in 0.126827 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Kiso Comsenz Inc.