Daily Dose of Excel近日更新了插件 – vbhelper. 這是一個非常好用的插件,可以快捷地在vba中創建class. 具體功能詳見此介紹.

然而,該插件是在英文版的Excel中開發的,因此,假如所用的Excel為其他國家語言的版本的話,將會報錯. 原因很簡單,該插件會在Tools(中文版為工具)的最底插入一個Menu.不幸的是,中文版Excel中’菜單條’已經本地化將菜單翻譯成中文’工具’,代碼無法找到該項Menu,自然就無法添加菜單了.加上,作者沒有進行任何ErrorHandling,所以用家很可能不知所措.
修復的方法很簡單,只需將
改為
(至於如何得知應該修改為’菜單條’跟’工具(&T)’, 可以通過監視窗口, 更深入的研究,可參見此文),
假如在增加,刪減菜單欄過程中遇到誤刪Menu的情況,可以通過以下語句將菜單條重置.
當VBA運行時間比較長的時候, 最好有指示告知程序在運行, 否則用戶會認為死機. 若能計算出剩餘時間的話,當然最好了. (通常計算運算時間都通過線性估算,然而,對於複雜的計算, 這並不可行.)
Progress Bar, Excel界面左下角的Status Bar都可以作為指示器. 個人認為,Status Bar不明顯,很容易會給忽略.
下列Form
這個Bar用了新思路,利用Microsoft ProgressBar Control 6.0,加載Controls插件
Andy Pope將Progress Bar進行了演化,引入了多種形式. 基本理念就是與普通bar一致,計算出現位置,DoEvents
![]()
Excel本身並不具備下載文件的功能,除了前面所述方法外,我們還可以通過ADODB.Stream去下載文件.首先要建立一個XMLHTTP的object,向服務器發送一個請求,然後再對返回的信息進行二進制編碼,寫到本地磁盤.
在Excel中下載文件,需要運用到win32API的URLDownloadToFile.
(注: 還可以通過模擬鼠標動作,進行下載)
Loop一個Recordset之前,先檢查Recordset object是否為空.
BOF為真,假如現時指針位置在第一條記錄之前. EOF為真,假如現時指針位置在最後一條記錄之後.
於是,只要兩者同時為真,證明Recordset為空集.
ADO Recordset
假如recordcount=-1,表示為空集
使用rs.MoveNext之前,需先確認current record在BOF與EOF之間
正確做法:
切記假如rs.MoveNext
用rs.find(criteria)搜索record時,假如沒有搜到任何record的時候,會報錯. 於是,利用rs.NoMatch,確保有結果之後,再進行操作.
當往一個Recordset中加入,一條新的Record后,需要強制更新.
當用ADO搜索NULL的時候,不能使用下述代碼,否則報錯.
下面語句會報錯
需改為Filter
Postscript: DAO vs. ADO
Within the Visual Basic world, there are two Recordset objects: Recordset and Recordset1 (new with 2007). It’s important to remember that neither the DAO nor ADO versions of these objects are interchangeable, as they support different methods, properties, and events. That can be confusing if you think ADO is just an improved or later upgrade of DAO. In fact, the two libraries solve different problems. DAO was designed specifically for the Microsoft Jet database engine. ADO was designed for OLE DB providers and can be much simpler and more flexible than DAO. However, DAO is almost always more efficient when working directly with Jet.
Know how you plan to use a Recordset and then use the most appropriate library. My best advice is to choose one library and use it exclusively when possible. The similarities and differences are too numerous to list here, but you can find information online:
要獲取SharePoint List item的數量,當然可以通過web service來獲取,然而web service并沒有提供aggregate方法,如count等. 於是,需要將ajax返回的xml進行loop,求和.假如item比較多的時候會需要比較多的時間.
假如對於List的View沒有太大要求時,可以用Group View,利用SharePoint內置aggregate方法,如count,計算好,展示在List表頂部.通過jQuery截取就可以快速獲知item的數量.