2010年1月28日 星期四

V005 常數變數化, 變數參數化

這一篇我們要談的是一般程式設計的技巧, 不只適用於 VBA, 所有程式語言都一樣.

我們在 V002 修改 Web 外部資料的 URL 中製作了 ChangeX() 和 ChangeY() 兩個函數, 可以依據 Monitor 工作表中的某些特定儲存格的內容變更外部資料的網址. 好的程式設計可以考慮到 重複使用性 (reusability), 我們所寫的程式可以放在不同的地方使用. 最簡單的方法就是將現有的程式彈性變大, 利用變數化和參數化的技巧, 讓我們的程式可以用在更多地方.

現在我們有兩個自訂函數, 程式如下圖


我們先前錄製巨集的時候, 第二行 URL 的部份是一個常數 AMD (下圖取自  V002)


我們在 V002 修改 Web 外部資料的 URL 中將 AMD 這個常數值改為可以讓我們輸入資料的變數 Range("B3"), 這個動作是 常數變數化. 經過變數化的動作, 讓我們的程式彈性大大的提昇了.

再來我們要做的是 變數參數化 的動作. 我們可以發現這兩個程式幾乎是完全一樣, 只有前兩行有兩個 Range 不一樣, 一個是外部資料的位址, 一個是股票代碼的位址. 我們將這兩個變數提昇到參數的階層, 另外寫一個程式叫 ChangeURL(rangeData, rangeCode), 再修改 ChangeX 和 ChangeY 呼叫 ChangeURL, 程式變得簡單多了.


寫程式有時候會為了方便, 直接將程式複製很多份再修改內容, 這樣子的程式要維護非常麻煩. 參數化的自訂函數最大的好處是當需要修改函數的時候, 不需要每個地方都修改一次, 在我們的例子裡只要修改 ChangeURL 的功能, 不需要修改 ChangeX 和 ChangeY 兩次.

延伸習作
  1. V001 利用巨集錄製功能開始寫 VBA錄製的 ImportX, ImportY 參數化

沒有留言:

張貼留言