發表文章

目前顯示的是 3月, 2018的文章

AutoCADVBA 圖紙小精靈_Ver1.0

圖片
前言: 有鑑於大部分前輩的圖都建立於模型空間(ModelSpace)之下,每次畫圖完畢發現少(多)某一張圖,當要插入或者是刪除時,就會需要在圖框內的頁次欄位進行更動,這點可以說是相當麻煩(尤其是對於超過30頁的圖檔來說),因而引發筆者寫這篇Side Project供參考使用。 Demo影片: 使用方法: 1.程式介面建立於VBA之下,為一個dvb檔,有關如何開啟請參考( 如何使用dvb檔 )。 2.請檢查頁次項目部分為: 第OO頁共OO頁。 3.請檢查圖框圈選線是否為聚合線(連續線段):偵測(LowerLeftPoint,UpperRightPoint)使用。 4.請檢查圖框圈選線所處圖層是否為 ( 出圖圖框 ):過濾圖框項目。 5.執行VBA巨集→點選第一個module(ShowUserForm)→執行。 圖一、紅色部分為圖框圈選線。 按鈕介紹: 1.創造圖框:若需要創建一連串的圖框們,可先在Excel檔中定義圖框內容後批次輸出。 圖二、圖框內容定義 2.新增圖紙:框選所有圖框,輸入要插入的頁次,會把所有框選起來的頁次及>=插入頁次的                           部分批次增加。 3.去除圖紙:框選所有圖框,輸入要刪除的頁次,會把所有框選起來的頁次及>=插入頁次的                           部分批次減少。 4.批次列印:必須先設定列印配置,請參考 ( AutoCAD顧問-批次出圖  ) 圖三、列印配置 注意事項 :先選擇要輸出的印表機→出圖內容改為視窗(要求圈選時先隨意圈選)→置中出圖→比例為1:1→圖面方位(橫式)→如有需要再更改出圖型式表→套用至配置。 檔案下載: 本機端執行環境 AutoCAD2016 x64,Excel2016 x64,下載點:  Frame.dvb 原始碼: UserFrom比較沒東西就不放上來獻醜了。 比較重要的還是Module的部分:(其實是3個module改來改去,我把他合併起來丟上來而已) Public wrkb As Object Public wrks As Object Public objexcel As Object Public rng As O

AutoCAD如何使用dvb檔案

圖片
一開始收到dvb檔大家應該都會很納悶,這是什麼東西?? dvb檔其實就是AutoCAD透過VBA的編輯窗儲存的專案檔,也就是包含了引用項目及程式碼及表單的一個專案。 使用方法如下: 1.首先先確定本機有安裝VBA,請參考 (  AutoCADVBA環境建置  ) 。 2.點選CAD後先啟動圖面,在導覽列是無法點選工具欄的。 3.工具欄→管理→載入應用程式→選擇dvb檔。 4.如果有常駐專案檔的需求,可以在啟動套件中設定路徑。 5.執行VBA巨集(vbarun)→選擇要執行的程式名稱(sub)。 6.如果省略第5步驟,可以參考馬克的 ( AutoCAD中打入指令執行VBA  )

Excel表轉出至CAD

圖片
在進行施工設計時,常使用Excel來進行數據的運算,常見有: 主結構配筋的時候要試算鋼筋數量、長度、重量 → 鋼筋數量表 主結構重要數量核算 → 材料數量表 渠道使用明渠水理試算 → 水理因素表 當然需要的表格不僅有這些,還有拉力強度、彎距強度...等等的試算(在一些重要的結構物上),但我也沒碰過故不清楚這部分。 在CAD中畫圖時,將Excel表轉至CAD檔方法有: 利用AutoCAD插入表格,然後導入Excel檔。 複製/貼上,將Excel要得區域複製,到AutoCAD中貼上。 利用第三方軟體,做AutoCAD與Excel橋接。 詳細圖片說明請參考 :  營建的馬克與電腦 筆者認為第三方軟體也是需要花錢的,故寫了個VBA供大家參考使用: 下載連結:  ExcelToCAD_ConverceData.dvb 程式使用方法展示:       1.   輸入你要前往的工作表位置 ( 請輸入名稱索引 , 最前方的數字 ) ,按下 Enter          ※如果偵測到工作表的頁數超過一頁的話才會啟動詢問 2.  直接選擇你要轉換的連結區域後,按下 Enter 20190307更新: 上述的原始碼還是有一點寫太麻煩了,這次直接實作一個clsExcelToCAD物件並同時引用clsACAD物件,執行主要程序為ExportToCAD,偵測的內容是被框選到的儲存格,如果為合併儲存格則強迫畫外框,如果為單一儲存格則偵測是否上下左右邊界有無畫線,有畫線則有外框。 Private MyACAD As New clsACAD Const TXT_COE = 0.8 Const ROW_COE = 0.335 Const COL_COE = 2.1 Public lupt As Variant Private rng_start As Range Private rng_end As Range Private rng_first As Range Sub ExportToCAD() For Each rng In Selection If c = 0 Then Set rng_first = rng If rng.MergeCell

VBA引用項目問題

圖片
基本上自己寫的程式自己用沒有問題,當要把做好的專案傳給別人使用的時候,常會有幾項問題發生。 1.VBA引用項目遺失 可能是因為版本問題所引用的函式庫名稱不同造成,解決方法必須要進入VBAIDE中→工具→設定引用項目→將遺失的取消勾選→勾選該本機中所存在的函式庫 For Example: 筆者的電腦中的Excel為2016版64位元,某同事的電腦中的Excel為2013版64位元,由於在函式庫中引用項目的名稱不同,我將檔案傳給某同事之後,必須如同上述將 Microsoft Excel 16.0 Object Library(遺失) 取消勾選,並且將 Microsoft Excel 13.0 Object Library 勾選起來才能解決程式不能執行的問題。 參考資料:  馬克的營建與電腦  中有提到關於引用項目的解決方法,先期引用VS後期引用 2.位元不同所導致( 會有開放原始碼的問題,如果有獨家秘方不想被知道的不考慮 ) 解法我也還沒找到,但是若將原始碼以及引用項目丟入IDE中新建的專案 應該是可行的 。 For Example:  在 VBA IDE中撰寫完的模組,點選右鍵→匯出檔案→產生*.bas檔。 需要使用的時候再點選模組→匯入檔案,即可以將模組引用進去! 當然也可以用將程式碼copy起來放在word 或 txt 存著,之後再paste過來。 20190307更新: 將原始碼先建立在ExcelVBA中,透過CreateObject方法去找AutoCAD.application可以巧妙避開AutoCAD 版本問題,同時也可以運用在ZWCAD的VBA部分,由於我們機關只有提供ZWCAD2015+專業版,因此程式碼以此代替,另外最重要的一點是因為程式碼建立在Excel因此當不同電腦打開的時候會直接使用符合各主機版本的Excel。 我在工作表("總表")的地方有做了一個切換的按鈕叫做"optAutoCAD"及"optZWCAD" 程式碼範例如下: Private Sub Class_Initialize() If Sheets("總表")

AutoCADVBA學習資源

圖片
學習AutoCADVBA的資源在國內來說大多都是全英為主,因此在學習過程中若英文能力不足會有一到跨不過的牆,但大抵來說,只要掌握VBA的程式撰寫過程以及掌握物件使用就能在AutoCADVBA中遊刃有餘囉~ 筆者目前有接觸過且比較常見的物件有以下: line polyline circle arc text mtext leader mleader hatch 例如: 在模型空間中(ModelSpace)的(0,0,0)~(10,10,0)中畫個直線(line) Sub test() Dim lineobj as aAcadLine  '必須先宣告lineobj是一個"線" dim spt(2) as double dim ept(2) as double spt(0)=0 'X spt(1)=0 'Y spt(2)=0 'Z ept(0)=10 'X ept(1)=10 'Y ept(2)=0   'Z Set lineobj=thisdrawing.modelspace.addline(spt,ept) '在(0,0,0)~(10,10,0)畫條直線 End Sub spt只是我設定的一個代號,要取什麼高興就好,我只是用 S tart P oin t 來代表我的起點。 同理,ept就是 E nd P oin t 。 thisdrawing   代表這個圖面 modelspace   代表模型空間 addline(point1,pointt2)   為新增線段的方法 沒有錯,VBA就是如此簡單,其實只要懂他的語法你就能好好愛上它了~!! 學習這些物件的資源在哪裡? 1. 在google中打入關鍵字 "Autocadvba 你要幹嘛 "  就會出現一些的範例給你參考著用,有時候可能要打成英文的,就會有很多Autodesk knowledge的範例跳出來給你看,因此一點簡單的英文也是必須的!!! 2. 在VBA 編輯器中的物件類別(F2)或者是點圖中的那個圖打入關鍵字modelspace(模型空間)就會出現很多跟他有關的指令,慢慢挑,慢慢選,挑一個喜歡的

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

AutoCADVBA環境建置

圖片
1. 首先必須要有一個AutoCAD 圖一、AutoCAD上方的導覽列 2. 在管理的分頁中會看見Visual Basic編輯器,請注意並不代表有看見就有安裝,點進去看看是否如下所述(圖二),若不是則會有系統提示你需安裝後才能進行操作。 圖二、AutoCAD中的IDE 3. 需要安裝者請依照當初安裝AutoCAD的版本以及位元數(目前僅提供32位元、64位元)至( 各式各樣的AutoCAD VBA Enable )進行安裝或者AutoCAD顧問提供的連結( 更多版本的VBA Enable ),下載下來到電腦目錄中直接點選安裝包就會開始安裝囉~ 4. 簡要介紹比較重要的幾個VBAIDE視窗,要開始Coding的時候要先把他們勾選起來(檢視) 專案視窗:以樹枝狀的樣子展現目前的專案位置以及原有應用程式中的物件名稱。 屬性視窗:以表格方式列出該物件的各式各樣的屬性資料(日後在使用Userform建立使用者介面的時候相當重要) 區域變數視窗:當程式區在運作期間,記錄各個變數當下的數值以及屬性,尤其在進行Debug的時候甚為重要,幫助你可以理解這個段落的變數長怎樣。 即時運算視窗:Debug的時候,透過Debug.print的功能即時顯示要得知的變數資料或者是測試某項功能是否有符合預期時候使用。

淺談VBA

VBA全名為Visual Basic for Application,建立在如excel、word、ppt、outlook、access甚至是Autocad也可以透過指令使其運作,因為工作的緣故無意間接觸到此項工具,意外發現VBA在excel上可以做到的事情相當廣泛,不必再透過人工的手段處理一些繁瑣的動作,故開設此版供有需要的先進作為參考使用,如有任何錯誤的地方歡迎指教。 學習VBA的優點: 快速又正確的達成原本應當很重複的動作。 比如:彙整資料、數量計算、產生報表、甚至在AutoCAD圖面上的小工具也能自行開發。 學習VBA的缺點: 屬於二次開發的程式語言,必須要附著在excel或autocad的應用程式下運作,無法直接包成.exe檔供人使用,比較容易有版本問題限制。 學習心得: 大學時曾接觸過一點Java,但因為沒有實作經驗,不太能理解老師到底想要幹嘛,後來也就不了了之。 出社會後因為對於重複性的動作感到很無聊,後來透過MSDN、Excel麻辣鮮師、土師傅的ExcelVBA教學,慢慢的了解一些屬性跟方法的用途為何以及最重要的是 嘗試去套用在我要解決的問題上面 ,當問題可以被很迅速解決就建立起莫大的成就感,也是我會踏入這條不歸路的原因,至少到目前為止,我很開心,因為我的確可以解決比平常人更多的問題。 每解決一項專案,並且實際運用在工作上,就可以節省更多時間,節省下來的時間又可以去解決另外一項專案,這是一個相當良好的正向循環,也很推崇在工作中找到問題,從問題中學到解決方法,然後keep cycling,我希望能把我當初所擁有的資源再次回饋給有需要的人們。