天天看點

Excel VBA 不可一世的錄制宏,是否真的是萬能的

上篇文章說到什麼是Excel VBA,那麼你就會有疑問宏是如何應用到我們的Excel中呢?他真的是萬能的嗎?他具體可以做啥?其實可以這麼說,宏是我們通過Excel錄制進而得到VBA代碼,而我們有時候自己寫的代碼也稱之為VBA代碼。其實他們本質是相同的。

上篇文章:​​Excel VBA的前生今世,花樣年華,等待着綻放花朵​​

我們先看Excel的宏可以在Excel中做什麼事情?如下圖有某個公司的出庫報表。

Excel VBA 不可一世的錄制宏,是否真的是萬能的

每天出貨的編碼,品名,數量,單價,這些需要我們自己手動錄入Excel中,當我們完成了這個單據,需要把他儲存到我們的記錄Sheets中。

我們一般手動操作是複制A2:F6單元格區域,點選COPY,然後激活記錄工作表,點選A2單元格,進行粘貼,完成這個動作。

那麼我們如果我們一天有幾百個這個的出庫報表,您是否需要這樣重複操作一百遍?這樣的工作效率是不是很低?

這個時候我們就可以用VBA代碼來實作這個功能。我們先看看動畫是怎麼通過錄制宏得到代碼的吧!

Excel VBA 不可一世的錄制宏,是否真的是萬能的

看到上面的操作,是不是感覺原來需要我們自己手動進行操作的,現在隻要點選按鍵,就可以自動的執行,是不是感覺是如此之簡單的?

我們先一起看看通過錄制得到的宏代碼。

Excel VBA 不可一世的錄制宏,是否真的是萬能的

如下是我們自己手動自己寫的代碼,是不是發現我們通過錄制得到的代碼十分繁瑣,多了很多無用的代碼,通過錄制的宏代碼的執行效率也是非常低的。是以我們一般是通過錄制宏,得到相應代碼是使用方法和功能性代碼,并不是我們都能記得起來所有的代碼,有時候也需要通過錄制宏間接的得到我們所需的代碼

Excel VBA 不可一世的錄制宏,是否真的是萬能的

這句代碼的意思是複制A2:F6單元格區域,就相當于我們自己手動進行複制操作。

Range("A2:F6").Copy

這句代碼的意思是,把我們剛剛複制的内容,粘貼到我們需要存放的工作表中。

Sheets("記錄").Range("A2").PasteSpecial

或者你想說,如果每次複制單元格區域大小是改變的,這個時候代碼應該如何去寫,我們隻需要把上面的代碼稍作修改即可:

Range("A2:F"& Cells(Rows.Count, 1).End(3).Row).Copy

Sheets("記錄").Range("A" &Sheets("記錄").Cells(Rows.Count, 1).End(3).Row +1).PasteSpecial

上面這個就可以自動識别區域大小,進行記錄操作。

Excel VBA 不可一世的錄制宏,是否真的是萬能的

我們看看修改後的代碼執行效果。​

Excel VBA 不可一世的錄制宏,是否真的是萬能的

這個代碼其實也許開始學習的你還是有點疑惑,但是不要緊,我們會逐一開始和你介紹如何去學習和自己寫出來代碼。

是以在某些層面上說,錄制宏其實并不是萬能的,有些複雜的操作,通過錄制宏我們并不能得到我們所需要的代碼。我們在後期,并不推薦你用通過錄制宏來得到想要的代碼。

繼續閱讀