AutoCAD VBA 縱斷面繪製自動化-1


範例影片:



成果圖:




是否呈現高程數字的部分可以在對話時將其關掉

緣由:

一般在設計小型工程時(尤其是筆者所接觸的水利工程方面,高程資料是非常重要的),必須將樁號、單距、地盤高、挖填高or其他繪製成縱斷面圖,以往都是將前人留下的舊圖,一個一個慢慢編輯,但這實在不太方便,故透過AutoCADVBA去循序讀取Excel中的資料,達成在AutoCAD圖檔中縱斷面自動生成。

方法:

本次實作將分為在Excel中以及AutoCAD兩個部分。Excel中主要是要獲得樁號、單距、相關高程、坡度、長度、樁號說明、施工建議等項目。


Run的按鈕僅是提供首次接觸該VBA的人避免填錯資料的一個引導輸入介面。

Step1:決定設計起始點,輸入S,E or S,C,E

S代表開始的樁號、C代表變換坡度的樁號、E代表結束的樁號

Step2:是否需要清除Excel中的計畫高的欄位。

如果偵測到該設計起始點編碼上的計畫高的欄位還有保留數字,會依據這個數字來給予最適坡度。




Step3:輸入原先設定為起點的計畫高



Step4:由取得參考坡度,請求輸入一較接近為整數的坡度(1:XXX)



通常最適坡度都是抓計畫高到下一樁號的地盤高來計算,除非是在Step2有保留數字則會依據計畫高到下一樁號的計畫高來計算。

P.S:下一樁號為設計起始點的部分為"C"或者"E"的樁號

Step5.於該工作表的名稱後方刮弧內更改工程名稱(還沒寫進去...可忽略第5點)




Step6.如有需要再新增自己需要的判斷高度(如右田高、路面高...ETC)

如要新增自己的判斷高度,該欄位的名稱最後一定要是 "***高"才能被判斷

Step7.打開AutoCAD並開啟到為可以畫圖的圖面,點擊"畫圖"

請注意!!!這裡如果發現錯誤的話請檢查引用項目 ( VBA引用項目問題 )
或者是打開工作管理員 將所有的 "acad.exe" 結束工作(可能是開啟後隱藏在後台)


因為我的是AutoCAD 2016,所以是引用 AutoCAD 2016 Type Library,每台電腦版本不同要往下找一下。

step8.第一列的Xscale代表X軸的比例,Yscale代表Y軸比例,基準點代表縱斷面表格在CAD左下角的位置。




Step9.可修改或不修改在縱斷面繪圖模組中有關畫圖class的程式碼參數(DrawLongtudinal)




此方法僅為初步設計,細部設計的問題再請參考(AutoCAD VBA 縱斷面自動化-常見問題)


如欲使用新版縱斷面VBA請於新視窗貼上以下連結填寫表單:


https://docs.google.com/forms/d/e/1FAIpQLSd98XpRPMAG1JQ7eCHREdsMk4gYAIXWkf5lgPWHsqVKKESrhw/viewform

---


留言

  1. HI 大大您好

    我現在用您的程式碼有些問題

    我將數據改成我的數據(只修改了樁號以及單距)

    結果CAD把CPU吃滿 等了一整天(不誇張 大概5個小時) 還是畫不出來(大約7X個橫斷面)

    可以告訴我要怎麼除錯嗎?

    回覆刪除
    回覆
    1. 你好,我已經更新過程式碼了,再麻煩你再試看看

      刪除
  2. 你好
    我在測試您的VBA檔案的時候
    在
    With Lsec 'unit mm
    發生" 執行階段錯誤424,此處需要物件",的錯誤
    我不知道怎麼除錯,麻煩您了

    回覆刪除
    回覆
    1. 我想你的錯誤可能是因為版本不同的緣故,方便再多提供些相關資訊嗎?這樣比較有辦法知道錯誤在哪邊。

      刪除
    2. 果然是引用項目的CAD版本不對,已經能正常使用了,謝謝。

      刪除
  3. 有這個自動產生縱斷面,雖然沒有CIVIL 3D或者西谷功能這個強大,對小型工程足矣~

    回覆刪除
  4. 請問輸出到CAD的數字如何讓他取到小數點後第三位?
    我不知道要修改哪一段程式碼,麻煩您了

    回覆刪除
    回覆
    1. 在模組(縱斷面設計模組)裡面的Sub ChangeLoc裡面的
      d=Format(FrontLoc,"0+000")可以更改,如果要到第三位,改成
      d=Format(FrontLoc,"0+000.000")

      刪除
  5. 由於有多個路線,請問樁號的格式可否為A0+000,B0+000等格式?謝謝 !

    回覆刪除
    回覆
    1. 可以,請聯繫我,apple84026113@gmail.com

      刪除
  6. 你好 將程式碼貼上 執行時會顯示使用者自定型尚未定義?請問該從何改起?

    回覆刪除
    回覆
    1. 這表示你的版本可能沒有2016的library,檢查一下引用項目裡面有沒有缺漏

      刪除
  7. 作者已經移除這則留言。

    回覆刪除
  8. 請問可以分享程式嗎謝謝
    jekyll159@gmail.com

    回覆刪除
  9. 請問可以分享程式嗎謝謝a0972152052@gmail.com

    回覆刪除
  10. 請問可以分享程式嗎???...非常感謝
    a670927@yahoo.com.tw
    a19780927@gmail.com

    回覆刪除
  11. 你好.請問可以分享程式?
    qpbmoony@gmail.com

    回覆刪除
  12. 你好.請問可以分享程式? 感恩u010005@gmail.com

    回覆刪除
  13. 你好.請問可以分享程式嗎?非常感謝您~
    danny27057767@gmail.com

    回覆刪除
  14. 可以分享程式嗎?工程需求~謝謝🙏

    回覆刪除
  15. 可以分享程式嗎?工程需求~謝謝🙏
    chou790103@gmail.con

    回覆刪除
  16. chou790103@gmail.com

    回覆刪除
  17. 請問可以分享程式嗎?非常感謝您~
    zerozero6795@gmail.com

    回覆刪除
  18. AutoCAD VBA 縱斷面繪製自動化,提升作業效率以節省時間確實好用。

    回覆刪除
  19. 版主,您好,謝謝您分享這麼好的資訊,可以向您請教一下,方便分享程式嗎?我的E-mail:back3338@gmail.com

    回覆刪除
  20. 可以分享程式嗎?工程需求~謝謝
    cherry0903@gmail.com

    回覆刪除
  21. 竟然有這麼厲害的程式!!可以分享嗎?工程需求~謝謝
    simon13016@gmail.com

    回覆刪除
  22. 請問可以分享程式嗎謝謝gary10206@hotmail.com

    回覆刪除
  23. Sub writeexcel()
    Dim excelapp As Excel.Application '定義excle應用程式變數
    Dim excelsheet As worksheet '定義工作表變數
    Dim ent As AcadBlockReference '定義塊屬性變數
    Dim yline As Integer
    Set excelapp = CreateObject("excel.application") '啟動excel程式
    excelapp.Workbooks.Open (ThisDrawing.Path & "/物件長度test.xlsx") '打開工作薄
    Set excelsheet = excelapp.ActiveWorkbook.Sheets("sheet1") '當前工作表為sheet1
    yline = 1 '寫入行位置
    For Each ent In ThisDrawing.ModelSpace '在模型空間裡迴圈
    obname = ent.ObjectName '提取對象類型
    If obname = "AcDbBlockReference" Then '判斷物件是否為塊
    xy = ent.InsertionPoint '獲取插入點座標
    varattr = ent.GetAttributes ' 將屬性標記和值複製到varattr變數
    attrtxt0 = varattr(0).TextString '屬性值
    attrtxt1 = varattr(1).TextString

    excelsheet.Cells(yline, 1).Value = attrtxt0 '寫入excle文件
    excelsheet.Cells(yline, 2).Value = attrtxt1
    excelsheet.Cells(yline, 3).Value = xy(0)
    excelsheet.Cells(yline, 4).Value = xy(1)
    yline = yline + 1 '位置加一行
    End If
    Next
    excelsheet.SaveAs "物件長度test.xlsx" '保存,檔案名是"物件長度test.xlsx"
    excelapp.Quit '退出excel程式
    Set excelapp = Nothing '釋放變數
    Set excelsheet = Nothing
    End Sub

    你好,請教一下,程式構思:
    開啟EXCEL檔,把CAD的屬性圖塊的標籤內容寫入EXCEL檔.
    執行後出現:執行階段錯誤9:陣列索引超出範圍,
    請問程式內容應該如何修改?

    回覆刪除
  24. 更新,上面問題已找到解決方法

    回覆刪除
  25. 可以分享程式嗎?工程需求~謝謝🙏
    sam0905138531@gmail.com

    回覆刪除

張貼留言

Popular Posts

Excel VBA @ 監造日報表、查驗表 -2

ExcelVBA@施工照片整理的應用範例

Excel表轉出至CAD