發表文章

目前顯示的是 2018的文章

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

圖片
***如需施工日誌請參考 這裡 *** 新版本20111214 已經更新!! 前言: 在經歷多次改版,發現使用的步驟還是有點多餘而且不夠自動化,此次將用物件類別模組的方式來修改Ver1.0留下尚可使用的程式碼,打造嶄新的監造日報表Ver2.0,輸出模式改為PDF,請搭配 PDFBinder 進行使用會比較方便。 準備文件: 以PCCES所編制並匯出成Excel之預算書報表 工程預算書中的數量計算表、土方計算表 監造日報表VBA使用手冊( 下載點我 ) 請開啟巨集並於login頁註冊後登入即可使用 圖一、Login頁面中點選註冊後跳至Google表單,填寫後即可以登入使用 參考文章: 專文1-PCCES處理到預算書 專文2-基本資料填寫 專文3-整個報表的靈魂 專文4-預定進度湊不到100%的解法  (20221204更新) 使用過程簡介: 1.  於工作表("Main")中填寫有關 工程名稱、 試體名稱(P.S.1) 、施工渠道名稱、進度資料等。 2.  於工作表("Budget")中點選"取得預算書",修正為圖二所展示的內容。 圖二、取得預算書結果,如果需要整理準則,請參考設定準則的註解進行設定,並點選"重整準則" 3.  整理完成後並且更改為契約單價後,點選"匯出至報表",資料會傳送至工作表("Main"),如下圖三所展示。 圖三、工作表("Main")中的報表資料,A~E欄為放置Step1 中的基本資料。 4.  於工作表("Records")中點選"填寫表單",如圖四,即可進行一系列的資料紀錄,      為供應Diary及Check的基底資料。 圖四、施作項目來源是Main中的試體名稱與報表資料,如填寫資料有需要進行查驗,可以直接勾選(可複選) 5. 填寫完之後點選"傳送至Check",再至工作表("Check")中點選"列印查驗",     成果將輸出到該目錄下的查驗表Output中,名稱為查驗表代碼-頁碼.PDF

VBA@配置分圖工具

圖片
出圖是一門很大的學問。 常見出圖方式有: 1.模型空間出圖 2.配置空間出圖 1.模型空間出圖,在AutoCAD顧問裡頭已經有這類的文件可參酌→  AutoCAD顧問-批次打印     有關模型空間出圖的總頁數與頁次等圖框參數,請參考  圖紙小精靈Ver1.0  或  功能變數 2.配置空間出圖,可以直接選擇使用批次出圖的工具進行出圖,這項工具已經是相當的便利,比較麻煩的部分是,當你的圖框需要切割很整齊的時候,要使用這個方法來對齊  配置分圖 因此,又引發我撰寫這次的side project來對配置分圖的這部分再做自動追蹤圖框跟比例。 DEMO影片如: 使用步驟: 1.開啟活頁簿,名稱為:圖說.xls。 2.打開AutoCAD後載入 Command.lsp 及 Main_UI(new).dvb。 3.指令:MSVPORT 建立要追蹤的視埠範圍。 4.指令:MSLAYOUT 框選所有視埠範圍。 操作程式碼如: Sub MSLayout() Dim la As New clsLayout la.X = 0.8 la.Y = 5 la.MyConfigName = "DWG to PDF.pc3" la.MyCanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)" la.MyStyleSheet = "Monochrome.ctb" la.CollectMSLayout la.ClearVport la.SortLayout la.FillInLayout MsgBox "已經處理完成!!請點選批次出圖" End Sub Sub MSVport() Dim la As New clsLayout la.CreateMSVport End Sub 有需要的人歡迎寄mail給我索取哦

VBA在平面測量上的應用

前言 本篇文章主要介紹如何取得全站儀的基本點位資料後的處理,坊間已經有許多的套裝軟體支援這部分的應用,諸如:Civil 3D、西谷資訊...等,僅供參酌使用。 與一般的套裝軟體不同,這次的Side Project可以同時支援AutoCAD與ZWCAD,並且由Excel97-2003的xls檔為主要驅動介面,透過引用AutoCAD與ZWCAD的library來操作。 主要功能包括:展點、取點、連線、定線、定樁、橫斷面、縱斷面,進行一系列的全測站點位資料加值應用,以下將進行相關內容的介紹。 圖文並茂簡報檔: ( 點我下載 ) 大綱 展點:  於工作表('總表')中的資料表PNEZ CD直接展開至CAD檔。 P.S : WebGIS展點方法 取點: 與地籍圖套疊完畢後,點位經過旋轉校正,再由CAD檔轉移至Excel總表的過程。 連線: 依據CD碼的分類透過3種方式排序數據以及3種Feature的安排對聚合線進行處理。 定線: 採用雙邊的中心點連線,對於彎曲程度較高的中心線設定流心連線距離來取得中心線。 P.S: 定線定樁簡介 定樁: 指定中心線後,可以自行決定下一段距離後設定橫斷面樁,解決原先的DIV指令無法進行特定距離分段的缺點。 橫斷面: 透過取樣橫斷面樁與圖面特徵線的交點進行內插,並且可以經由假設線段的操作方式節省現地測量作業的時間。 縱斷面: 為符合水利會機關的範本,可以決定顯示於表格與不顯示於表格的內容,並且可以決定輸入的X軸與Y軸比例。 P.S: 縱斷面自動繪圖

鋼筋CAD圖面撿料與彎折示意圖

圖片
流程:配筋圖→鋼筋撿料→鋼筋數量表→鋼筋彎折示意圖。 最近在畫一個設計案,為了簡化上述流程所遇到的問題: 1.配筋圖已經畫過一次鋼筋形狀,彎折示意圖仍重複描繪一次。 2.鋼筋撿料過程中,若編碼過多,常忘記編碼到幾號以及文字顯示的置中問題還有圓形外框。 呈上所述,乾脆將近期發展的AutoCAD資料庫中的鋼筋數量表拿來操作看看,沒想到有意外的好用,與各位分享一下。 圖一、配筋結果圖(若為圓形的會再加外框) 使用有包含四種功能: 1.SteelNumMain:點選鋼筋(線或多段線),快捷鍵:ST 2.SteelNumTemp:點選鋼筋(垂直紙面的部份,只呈現一個圓形的狀況),快捷鍵:STC 3.ExcelToCAD:單純將鋼筋數量表貼到CAD,請參考  Excel表轉出到CAD 4.StShow:透過資料庫將已存資料自動描繪至CAD,並依據各鋼筋"形心"放置於指定編號下方固定距離,快捷鍵:STSHOW P.S有關快捷鍵設定LISP請參考  LISP自訂函數呼叫VBA 圖二、從資料庫透過ExcelToCAD的鋼筋數量表。 圖三、鋼筋彎折示意圖結果。 ------- 2019/08/30 Update ------- 新增功能"PLOTTMPST":點選CAD圖面上某一POLYLINE,可以將該POLYLINE上繪製類似ARRAY功能的溫度筋。

LISP自訂函數呼叫VBA巨集

圖片
身為一名工程人員,繪圖時能夠 精簡步驟 ,節省時間是最好不過的事情。 即便已經會使用VBA,但操作的過程還是需要 點選"執行VBA巨集"→選擇要執行的VBA 。 當很多的SUB一一被寫出來,要從一整排的VBA找到正確功能的去點擊,也是很不容易的事情(當VBA執行視窗無法完整顯示巨集名稱的時候)。 此時, 如果VBA的執行能夠像是從一般介面去點擊或者是指令操作,那就太完美了! 為達成上述功能有以下方式可供嘗試: 1. 使用者介面(CUI)新增自訂方法編寫CAD巨集語言指定VBA。 2. VBA操作menu物件去指定VBA。 3. 透過LISP語言去新增自訂函數 。 其中,最為方便的乃為LISP,日後只需要設定指令即可達成VBA的效果,相關步驟如下: 1.開啟筆記本(notepad),將以下代碼貼上後,存檔並將副檔名更改為.lsp。  (defun c:bk() ;自訂函數名稱     (vl-load-com)     (setvar "cmdecho" 0)     (command "-vbarun" )     (command "BreakLine" ) ;要執行的sub名稱     (setvar "cmdecho" 1) ) P.S:更改副檔名的方式,先至資料夾選項中,將隱藏副檔名取消勾選即可更改。 2.開啟CAD後,點擊"載入應用程式"→選取已編寫完成的.dvb檔案。 3.點擊"載入應用程式"→載入此lsp檔案。 4.如果需要常駐也可以加入至啟用套件,就省得每次重開圖面就要再執行一次了。 之後在圖面上只要打入 bk 就會自動執行Sub BreakLine() ....End Sub 該程序的內容了!!!!

Excel VBA @數量計算表-2

圖片
有關上回所提到的  Excel VBA @數量計算表  經八河局沈大哥提點,為求符合一般工程使用還是更完善的函數來解決某些問題。 1.數量計算式中需要有中文字以提醒使用者現在正在計算什麼項目。 2.使數量計算式的結果透過函數處理後,如原本連結其他欄位跑出計算結果。 圖一、沈大哥提供的檔案。 P.S: H欄位的黃色網底部分為C1所需要的基本資料,個別註解的部分為單位。 程式運作流程: 1.  E欄填寫 =H18*H9*H15  2.  C欄填寫 =DetailSum(FORMULATEXT(E3) 3.  D欄填寫 =Eval(C3) FORMULATEXT可將參考欄位的公式計算結果轉成公式輸出,屬於Excel的內建函數。 DetailSum可將輸出公式的字串取得其數值跟單位,屬於自訂函數。 Eval可取得計算結果,屬於自訂函數。 有關各項原始碼如下: Function Eval(ByVal s As String) Dim cal As String For i = 1 To Len(s) ch = Mid(s, i, 1) If IsNumeric(ch) Then '判斷是否為數字 cal = cal + ch ElseIf ch = "(" Or ch = "[" Or ch = "{" Then '左括弧 cal = cal + "(" ElseIf ch = ")" Or ch = "]" Or ch = "}" Then '右括弧 cal = cal + ")" ElseIf ch = "+" Or ch = "-" Or ch = "*" Or ch = "/" Then '運算符 cal = cal + ch ElseIf ch = "." Then '其他項目 cal = cal + ch End If Next Eval = A

Excel VBA @數量計算表

圖片
數量計算表中常在A欄打入計算式,B欄產生結果: 圖一、感謝鑒恩學長提供使用範例。 1.  A欄打計算式,B欄再打一次計算式前面補個"="。 2.  A欄打計算式,設定定義名稱指定到A欄,於參照欄位中使用內建函數Evaluate產生值。      B欄填寫"=AA" 即可產生數值。 圖二、AA定義名稱中的參照為內建函數Evaluate 3.  將第2點的方式再更改成較為精簡的自訂函數。 進入開發人員中→檢視程式碼→新增模組→打入以下程式碼。 Public Function Eval(ByVal s As String)     s = Replace(s, "{", "(")     s = Replace(s, "[", "(")     s = Replace(s, "]", ")")     s = Replace(s, "}", ")")     Eval = Application.Evaluate(s) End Function P.S:因為在使用Evaluate內建函數的時候,他無法偵測小括號"("")" 以外的符號,Ex:{[]},故將程式碼多做一次代換的工作,日後就可以在計算式中比較好辨識優先順序。 日後使用時,一樣在A欄打計算式,B欄打入"=Eval(指定到A欄的儲存格)"即可產生數值囉~ 圖三、自訂函數 圖四、操作範例(A1為計算式,C1為值) 有關更進一步的討論連結在此  Excel VBA @數量計算表-2

AutoCAD VBA 橫斷面繪製自動化(疏濬用)

圖片
新版本請參考  VBA @ 一般渠道疏濬圖 前言: 因應筆者所在的灌溉給水區域為濁水系統,外加上坡度比較緩和,常需要有疏濬的工作要執行,每次在計算疏濬土方量的時候,畫一下縱橫斷面也是不可避免的。現地的狀況由該擔當區的人員最能理解土方分布情況,但又受限於繪製CAD斷面也是一門學問,因而引發我寫了一個side project將原本在CAD中設定斷面高程的部分以Excel表的形式代替,爾後再由CAD中的dvb檔去連結設定檔,達到參數化製圖的目的。 使用方法: 1. 設定該灌溉系統的起訖點、渠道形式(U型溝、內面工)及尺寸(Unit:M)。 圖一、排序必須由上到下遞增,不能有空白。 2. 點選 " 斷面填寫 " 後依照指示填寫。(會先偵測前次的最後樁號,填入樁號需比它 後面 ) 圖二、Buttom位於工作表1:橫斷面繪製資料。 P.S:如左側有剩餘資料,請先點選 " 刪除資料 "。 3. 填寫時若是板橋、箱涵等較難疏濬的地方,請在樁號填寫上or下,代表上斷面or下斷面 4. 填寫左右環境參數後、各點高程以及是否為結束點(END?),如已知下一個的樁號可填寫 下      一個間距 ,點按OK後不會再進行詢問。 圖三、Excel VBA中的userform。 P.S2:結束點代表為板橋或箱涵的上斷面,在土石方計算表中會多安插一列空白行隔開。 5.如果要更改已經填寫的最後一道樁號資料,可以透過 " 上一動 " 將其引入。 6.填寫完後點按 " 結束 " 再進行檢查各項資料後即可儲存備用。 7.進入AutoCAD中,將dvb檔引入後並且將該Excel開啟中,即可繪製一連續的斷面。 8.回到Excel中,點擊 " 土石報表 " ,即可得到老大們需要的土石方報表。 ' 'This project is to solve the complex and boring things in dredge event 'Made by Hank Lin 2018/3/19 @ MelinStation '

Excel VBA @竣工文件

圖片
範例影片: 前言: 工程報竣工後會有一堆文件需要輸出給上級機關簽核,尤其是當下載下來後都是 分散 的話,每個輸出都要點擊一次列印、調整列印份數,可是會相當麻煩,因此寫了一個VBA來簡化這些問題。 圖一、上級機關需要的文件的一部分。  使用方法: 必須先將所有要輸出的文件與"竣工派驗VBA.xlsm" 放在同一個資料夾 。 檢查該文件的工作表名稱及相對應的文件編號(需要在程式碼   Arrange 中更改)。 若有資料先清除資料。 詳細檢查各個文件的內容正確性。 列印。 圖二、Arrange中的一部分程式碼( arr與arr2數量需要相同 ,否則會出錯) 結論: 因應每家機關需要的文件不同,需要透過更改程式碼量身打造需要的文件名稱與編號,故提供的程式碼僅供參考使用。 程式碼: Sub main() Call GetFile Call MoveData Call Arrange Call sortvba Sheets(1).Select End Sub Sub GetFile() Path = ThisWorkbook.Path '相對路徑 ChDir Path f = Dir("") Do Until f = "" If Not f Like "竣工派驗VBA*" Then Workbooks.Open f, False End If f = Dir() Loop End Sub Sub MoveData() For Each Workbook In Workbooks wbn = Workbook.Name Workbooks(wbn).Activate If Not wbn Like "竣工派驗VBA*" Then i = 0 For Each Sheet In Sheets wpt = InStr(1, wbn, ".")

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

圖片
新版本請參考:  監造日報表Ver2.0 前言: 工程線流程:測量→設計→發包→監造→驗收→移交。 其中,監造有相當多的文件及注意事項,比如施作數量、成本監控、品質管制(查驗表)、重大期程(工程督導、說明會、變更(修正)設計、展延工期...等等),在文件上的處理可說是相當的繁瑣。 光是品質管制的查驗表就分為: 開挖(放樣)工程查驗表 土方工程施工查驗表 鋼筋施工組立查驗表 模版施工組立查驗表 混凝土施工作業查驗表 模版及混凝土施工完成作業查驗表 職業安全衛生暨環境保護措施查驗表 在查驗表的表頭須註明工程名稱、工程位置、施作內容、施作日期...等, 已經在監造日報表中出現過 的部分,配合監造日報表的數量、單價、預定進度可以輕易的找到累積數量、累積成本、累積進度,去判斷是否有落後。 主要構想: 以往都是以複製的方式去拉出一連串的日報,只要連結錯誤,就是整批的更改連結,相當麻煩。因此寫了一個Side Project 用ExcelVBA去執行監造日報表的填寫過程,將工作表分為: 監造日報表     (輸出的樣版長相) 日報基本資料 (單價、數量、是否變更、基本工程綱要、試體、渠道數等重要資料) 數量及計算     (進度、天氣狀況、施作單價、施作數量) 施工日誌         (工程位置、施作內容、查驗項目、重大期程) 查驗總表         (與查驗有關的項目及查驗後內容都在此) 經基本資料填寫後,取得預算書(將PCCES的資料丟入,會依照主體工程、雜項工程、職業安全衛生、環境保護措施...等主要項目匯入到日報基本資料的工作表中,日後 僅需要進行填寫數量 ,就會將所有相關資料導入至數量及計算、施工日誌、查驗總表...等工作表,減少重複的資料一直出現,再透過主介面的"監造日報表"、"查驗表",選擇列印模式即可批次列印。 圖一、程式主要介面 圖二、填寫數量介面 圖三、監造日報表樣版產出 圖四、某一查驗表產出

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("總表")