發表文章

目前顯示的是 2021的文章

應用Google Apps Script實現雲端授權驗證

圖片
緣起: 耗費心力完成的Excel檔案,一旦發布給別人之後,其他使用者便可以無限的複製然後傳給下一個使用者,如果能夠對於Excel檔案的流向進行追蹤便能夠避免一些使用者不尊重智慧財產權的處境,畢竟VBA的保護效力太過薄弱,網路上隨便Google都有一堆破解的方式,如果能夠透過雲端進行管控作業,將陌生的硬體資訊或IP位址進行管制,對於一些程式小白來說,還是有一定的作用的。 需要進行管控勢必要連上網路,如果只要在程式發布過程中進行管控,必須先把帳號密碼資料表先建立起來,但這部分一旦被流出去,只要寫個使用說明把可通過驗證的帳號密碼跟主程式一起發布就失效了,因此採用Google SpreadSheet利用Google Apps Script傳入參數去判斷是否驗證通過,會是比較理想的狀況。 方法: Google Apps Script可以部署成網頁應用程式,透過VBA引用XMLHTTP物件發送一組帶有參數的URL,驅動GAS在Google SpreadSheet中進行查找判斷是否驗證通過並顯示到HTML上,VBA再去針對HTML進行解析,驗證通過即可使用,無法通過便關閉檔案不存檔。 一般來說,判斷的VBA都會寫在程式的執行開頭裡面,要把判斷的指令刪除是輕而易舉的事,但若是將所有的邏輯都包裹在DLL裡面那就非常棘手了,因為DLL也很難進行編輯,只能照程式的流程安排,雖然一樣可以用網路上破解的方式將EXCEL的程式碼編輯器打開觀看,但是真正的邏輯全綁在DLL中,DLL開頭就能寫個雲端授權進行判斷,想要用就一定會執行到,這樣才有辦法真正的保護到原始碼並且可以在雲端進行控制。 預期結果: 1.透過SpreadSheet創立一工作表,以IP的方式或帳號密碼方式控制其授權。 2.當陌生IP或帳號密碼要進入程式前先行判斷。 3.如果不符合白名單,則顯示登入註冊介面。 4.如要使用必須點選註冊後填寫資料發送至SpreadSheet 5.註冊後資料會留存於URL指定的位置(也就是管理者的Google帳號才看得見的SpreadSheet)。 6.如果透過該電腦進行註冊則未來不用輸入帳號密碼就會自動判斷是否有無授權,如果換電腦的話,透過輸入帳號密碼也能通過授權。 7.通過授權後就能正常使用囉~ 8.如果不想給陌生IP或帳號密碼使用的話,此時只要在Google管理者的SpreadSheet上的授權打上

不同CAD版本間也可以引用的Library(clsACAD)

圖片
一般常用的CAD大多是 AutoCAD ,關於AutoCAD VBA的資源也滿多可以搜尋的到,因此起初開發的主力通常是AutoCADVBA。 另外還有一種常用的CAD叫做 ZWCAD (中望CAD),本來筆者的機關還沒有改制前還可以使用,但自從被政府接收之後就不能使用了,在轉換期間我意外發現,ZWCAD專業版竟然也有支援VBA的功能,雖然安裝程序跟AutoCAD不太一樣,而且重點是引用物件只要把AutoCAD改成ZWCAD即可,還有一些要判斷物件名稱的時候可能會稍微不一樣。 一直到筆者機關改制之後,我們又換了一個新的CAD,叫做 PorgeCAD ,更讓我意外的是,他竟然也有支援VBA,看到這裡,果然VBA還是一個很有用途的工具,但天不從人願,他的物件已經不是改幾個字就能處理了,筆者在研究了一陣子,做了一個轉換的工具,將AutoCAD、ZwCAD、PorgeCAD,之間所有可以引用的項目,把他們串起來了,只需要透過一開始的選單去決定便可以呼叫裡面各式功能。 PorgeCAD跟AutoCAD最主要的差異就在於點跟點群組的物件概念不同,其他都大同小異,因此只要把點資料處理好,基本上其他就能直接沿用。 Private mo As Object Private pa As Object Public acaddoc As Object Public CADVer As String Private Sub Class_Initialize() If Sheets("總表").optAutoCAD = True Then     strCAD = "AutoCAD.application"     CADVer = "AUTOCAD"      ElseIf Sheets("總表").optZWCAD = True Then          strCAD = "ZWCAD.Application"     CADVer = "ZWCAD"      ElseIf Sheets("總表").optICAD = True Then     strCAD = "ICAD.application"     CADVer =