tft每日頭條

 > 科技

 > vba對象常用屬性和方法

vba對象常用屬性和方法

科技 更新时间:2025-01-24 14:36:18

這篇技術文章我們講一下:怎麼用VBA模塊計算一些稍微複雜的表。

(今天發的的幾個短視頻段子,播放量團滅,很難過。還是講技術吧)

用AccessVBA模塊來對表進行計算,相當于用Excel的函數來計算,二者在本質上沒有區别。了解Excel函數的人能夠理解我在講什麼。

vba對象常用屬性和方法(用VBA模塊計算課時費)1

用Access數據庫計算的效果

和Excel函數相比,用VBA模塊對表進行計算有利有弊:

優點是:

1.計算能力強。用Excel計算兩三個字段就比較吃力了,在Excel單元格裡寫代碼,會導緻單元格比較臃腫。而Access的VBA模塊在這方面能力強一些。

2.調整容易。用VBA模塊計算,便于函數的維護和拓展,計算過程清楚不容易亂。接下來會用案例來解釋這個問題

vba對象常用屬性和方法(用VBA模塊計算課時費)2

Access數據庫VBA模塊

用VBA模塊計算也有缺點:

1.學習成本高。得了解什麼叫變量,Function怎麼用。編程就沒有輕松的,會有一些坑。

2.會被鄙視。搞編程的碼農會鄙視你,說你用VBA很low,搞得你很煩。(很奇怪,按這個原理,搞Excel函數不是更“low”嗎?)

下面講一下這個案例:

一、本案例的需求介紹

這個案例是一所高中的真實案例:以周為單位,計算每名老師的課時費。

這個工作用Excel完成有些麻煩(但不是不行),主要計算需求如下(為了循序漸進的教學,進行了适當的簡化):

1.該學校的教課老師有100多名,有6個學科:

語文

數學

英語

物理

化學

生物

2.每周20小時内,語文數學英語100元小時,物理化學生物80元1小時

3.每周超過20小時,所有科目都是200元每小時。

在實際的案例中,每個老師教的班級還有快慢之分,給快班講課的補助價格更高一些。但為了講解方便,我今天先省略這個需求。

二、表設計思路

1.必須設計成一維表形式

用Excel也可以這個計算,用函數就可以。

但是表的設計必須遵循一維表的形式,無論是Excel還是Access的表都必須遵循這個原則,不然設計容易亂。

尤其是Excel設計更容易亂。

2.表的字段要嚴格控制

這個表的字段一共就4個:

時間

老師

科目

課時

vba對象常用屬性和方法(用VBA模塊計算課時費)3

vba對象常用屬性和方法(用VBA模塊計算課時費)4

用Access來設計表的話,字段裡不需要設計價格、沒有星期。價格在VBA裡體現,星期用查詢(SQL)自動生成。

這就是Access框架的威力,Excel就很難做的這麼清爽簡約。據我所知,Excel做星期查詢很難。

3.表的更新

這個計算做成之後,隻要定期往表裡更新數據就行,老師上一天課就更新一條,更新完之後,計算結果就自動生成了,報表也能自動化生成。

三、查詢設計

簡單來說,這個課時費計算的Access查詢需要兩步:

1.生成周查詢表

2.在周查詢基礎上,加上計算字段,計算字段運用的是VBA的模塊(VBA模塊是本文的核心)

先要解釋一下為什麼要兩次查詢,因為這個需求的時間範圍是按周彙總,如果一次查詢完成計算的話,SQL會亂。

1.生成周查詢

這個技術我之前做過,代碼界面如下:

vba對象常用屬性和方法(用VBA模塊計算課時費)5

第一次查詢

2.計算字段

計算字段包括5個

一類課時量

二類課時量

一類課時費

二類課時費

總課時費

vba對象常用屬性和方法(用VBA模塊計算課時費)6

第二次查詢

一類課時就是每周20節以内的課時,二類課時就是每周超過20節的課時。

四、VBA模塊設計

下面是我們本文的核心,VBA模塊設計。本需求我采用的是一個模塊,下面四個函數,四個函數共用兩個變量就可以。

其實VBA模塊一點都不神秘,核心就是設計方程、解方程:

y=f(x1,x2)

再詳細一點,y=Function(x1,x2)

這個Function英語就是方程(也叫函數)的意思,也就是VBA模塊裡我們要設計的一種計算方法,原理沒什麼難的。

比如,我們設計一個函數

x1=2

x2=2

y=f(x1,x2)=(x1 x2)^2

x1和x2相加再平方這個過程,就是一個函數(Function)計算。

Excel裡要計算的話,就是直接新起個單元格,單元格裡輸入:

=(A1 B1)^2

用Excel來計算這個計算課時費需求也完全可以,但是如前所述,Excel很難計算複雜情況,比如我們本次需求就不這麼簡單,至少有兩個判斷:

1.判斷這個老師教的是什麼課,數學外語語文的課時費就高一些。

2.判斷這個老師這周上沒上夠20節,上夠是一個錢、沒上夠是一個錢。

用Excel來算就顯得不那麼簡單了。

更何況這個需求,比我實際交給客戶的需求還簡化的多:客戶要求的需求還有不同班級的不同費用,等于多了一個維度的計算。用Excel做就非常吃力了(這也是為什麼客戶找到我)。

我們這個需求的VBA代碼有5個函數(Function),分别對應上個章節的5個計算字段

模塊有兩個總的變量,一個是每周的總課時(通過第一次查詢計算得到的),第二個是科目。

vba對象常用屬性和方法(用VBA模塊計算課時費)7

兩個變量

每個函數用方程表示就是

一類課時費=f(每周總課時,科目)

二類課時費=f(每周總課時,科目)

以此類推

vba對象常用屬性和方法(用VBA模塊計算課時費)8

VBA模塊總界面

五、VBA代碼設計

每個函數的代碼設計,我承認對初學者有點難,但是學了一會就會覺得也不過如此,基本就是If Else語句判斷。

我們以一類課時量為例

分為以下兩種情況

1.當周上課沒到20節

一類課時量=f(每周總課時)=當周課時

2.當周上課超過20節

一類課時量就是20節。

vba對象常用屬性和方法(用VBA模塊計算課時費)9

第一檔課時數

二類課時量也分兩種情況

1.當周上課沒到20節,那麼:

二類課時量=0

2.當周上課超過20節

二類課時量就是:周課時量-20

vba對象常用屬性和方法(用VBA模塊計算課時費)10

第二檔課時數

(看懂了嗎?沒看懂公屏 1)

因為課時量不受科目的計算,所以方程裡沒有科目。如果計算課時費的話,就要加上科目,計算稍微複雜一些。

一類課時費:

1. 沒到20節

數學語文外語

一類課時費=當周課時量*100

其他科目

一類課時費=當周課時量*80

vba對象常用屬性和方法(用VBA模塊計算課時費)11

第一檔課時費

2.超過20節

數學語文外語

一類課時費=20*100

其他科目

一類課時費=20*80

邏輯就是這樣,二類課時費、總課時費的VBA,大家照貓畫虎做一下。

六、做報表

最好查詢之後,就是界面的設計和美化了。這方面技術我講的很多。不做贅述。

我建議用報表的形式,方便又快捷、簡約又大方。

vba對象常用屬性和方法(用VBA模塊計算課時費)12

總體效果

有問題就在評論區交流哈~想學習、想領取這個案例給我留言哈~

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved