贊贊小屋

VBA程式設計以Excel物件為導向:Application.ThisWorkbook. ActiveSheet.Cells.value

VBA是物件導向語言,本文以財務報表期間更新為範例,介紹Cells().Value、Font.Name、Font.Size、ActiveSheet、Application.ThisWorkbook.Worksheets()等Excel常用對象,並且以簡單程式說明集合與元素、物件.屬性等基本概念。

一、資產負債表日期

財務報表每個月結帳都要更新,Excel操作方式是選取C3儲存格,資料編輯列裡直接輸入。

VBA程式設計以Excel物件為導向:Application.ThisWorkbook. ActiveSheet.Cells.value VBA自動化 第1張

二、Cells().Value、Font.Name、Font.Size

Cells(3, 3).Value = “2020年7月31日”

Cells()是儲存格對象,定位方式和Excel通常用法不太一樣,它括號裡面可以有兩個數字,第1個數字代表第幾列,第2個數位代表第幾欄,所以Cells(3,3)等同於C3儲存格。Cells.()Value指的是儲存格的值,因此這一行程式碼的效果便是由VBA在ExcelC3儲存格裡輸入「2020年7月31日」。

Cells.Font.Name = “微軟正黑體”

Cells如果忽略(),代表工作表上所有儲存格,這裡統一設置字型為「微軟正黑體」。

Cells.Font.Size = 12

統一設置字型大小為12。

VBA程式設計以Excel物件為導向:Application.ThisWorkbook. ActiveSheet.Cells.value VBA自動化 第2張

三、集合.元素、對象.屬性

VBA是一門程式語言,既然是語言,可以從文法的角度學習。以上第二步驟的程式碼為例,涉及到兩個很重要的VBA基本觀念:集合與元素、對象與屬性。

工作表上所有的儲存格就是一個集合,Cells(3,3)是這個集合裡面其中一個元素,也就是工作表C3這個特定儲存格。

另外英文文法中都有基本句型,VBA程式語言也有兩大基本句型。其中之一是其中之一是主持,點動詞代表要針對這個對象進行種種操作,第二個主要句型是主詞.形容詞,代表要設定這個對象的屬性值,例如這裡是將C3儲存格的值設定為「2020年7月31日」。

第1個步驟是在Excel輸入內容,VBA則是設定特定儲存格對象的屬性值,兩者在意義上有點差別。

VBA程式設計以Excel物件為導向:Application.ThisWorkbook. ActiveSheet.Cells.value VBA自動化 第3張

四、財務報表期間及格式更新

執行程式之後,不但C3儲存格已更新資產負債表日期,工作表所有儲存格也都更改格式了。

VBA程式設計以Excel物件為導向:Application.ThisWorkbook. ActiveSheet.Cells.value VBA自動化 第4張

五、綜合損益表期間

除了資產負債表,綜合損益表、權益變動表、現金流量表等財務報表也要更新期間,而且有可能在不同位置,例如綜合損益表的期間是在A3儲存格。

VBA程式設計以Excel物件為導向:Application.ThisWorkbook. ActiveSheet.Cells.value VBA自動化 第5張

六、ActiveSheet、Application.ThisWorkbook.Worksheets()

為了一次更新四大財務報表的期間,設計VBA程式如下:

ActiveSheet.Cells(3, 3).Value = “2020年7月31日”

ActiveSheet意思是作用中的儲存格,前面第二步驟只有Cells,VBA在執行時會預設為ActiveSheet。所以注意到這裡一定要在資產負債表執行程式,如果執行程式時是在綜合損益表,VBA會在綜合損益表的C3儲存格輸入,顯然有誤。

Application.ThisWorkbook.Worksheets(“綜合損益表”).Cells(3, 1).Value = “2020年7月”

前面提到Cells是省略了ActiveSheet,其實更完整的是省略了Application.ThisWorkbook.Worksheets,這是Excel最主要的物件結構,Excel應用軟體、活頁簿、工作表,如此從上到下的層級。

ThisWorkbook.Worksheets(“權益變動表”).Cells(5, 1).Value = “2020年7月”

這裡省略了Application,其實除了要執行非活頁簿工作表儲存格等操作,通常都不會特別書寫Application,因為沒有特別指定的需要。

Worksheets(“現金流量表”).Cells(4, 1).Value = “2020年7月”

這裡省略了ThisWorkbook,因為都是在目前的活頁簿執行,沒有必要特別指定。

VBA程式設計以Excel物件為導向:Application.ThisWorkbook. ActiveSheet.Cells.value VBA自動化 第6張

七、Excel VBA對象結構

整理上個步驟的程式,可以得到VBA物件的基本觀念。

首先,物件是有層級結構,要依照「大對象.小對象」的規則指定操作對象,類似英文文法的「A of B of C」這樣的語句。再者,

再者,和有些Excel函數引數一樣,大對象可以省略,省略的話VBA會有預設值,而且通常預測值會跟Excel操作時的直覺非常接近。

VBA程式設計以Excel物件為導向:Application.ThisWorkbook. ActiveSheet.Cells.value VBA自動化 第7張

Excel VBA物件結構和程式語言文法

這篇文章是用Excel最常操作的活頁簿工作表儲存格作為範例介紹VBA物件結構。不過其實在整個VBA裡面還有其他非常多的對象結構,例如樞紐分析表、圖形圓表,甚至是上方功能區和工具列,或者是VBA的模組,都可以是程式對象。就本質來說,只要是在Excel軟體應用可以操作執行的東西,便是VBA可以設計執行的對象。

Vba是以物件為導向的程式語言,它的概念是在設計程式時要先確定對象是什麼,然後根據這個對象(主詞)執行屬性設定(形容詞)或者指令操作(動詞),掌握住這個基本概念,等於是掌握了基本文法,在寫VBA程式時比較不會無所適從。

本網站所有內容皆受版權保護,网站备案编号:苏ICP备14051307号-1