發表文章

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

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