如何使用Excel試算表作程式資料輸入
文章推薦指數: 80 %
Excel是一套智慧型電腦試算表(Spread Sheet),可以使用在工程計算、資料統計、資料排序、圖表製作,甚至於股票分析、公司資產及庫存分析、商業或營建工程等管理決策分析 ...
2018年12月02日
如何利用Excel作VB程式之資料輸入
1.前言
Excel是什麼?Excel檔案是一個活頁簿(Workbook),也是一個Project。
一個活頁簿包含許多工作表(WorkSheets),工作表是由欄(Columns)與列(Rows)間之儲存格(Cells)所組成[每一個工作表有256列(2^8),65536欄(2^16),每一個儲存格可存放32767(=2^15-1)中英字元]。
Excel是一套智慧型電腦試算表(Spread
Sheet),可以使用在工程計算、資料統計、資料排序、圖表製作,甚至於股票分析、公司資產及庫存分析、商業或營建工程等管理決策分析等,應用範圍十分普遍、廣泛。
Excel有三百多個工作表函數及不計其數之外部程式。
Excel多可以像一般商業軟體一樣,可拿來開發複雜之計算程序。
Excel
VBA可以做的事更多,他可以像一般軟體一樣,可以開發比較複雜及重複性計算多之程式。
Excel
VBA可以提高工作表計算效率、減少程式篇幅,提昇程式可看性、促進程式自動化功能等等。
Excel
VBA可以呼叫外部執行程式(包含Ms_Dos版),利用Excel作為其他程序之輸入樣板(Input
template)能使您的輸入工作更簡便;以Excel工作表做為輸出表格檔後,更能利用工作表函數分析及美化圖表及報告;Excle亦可以製作報告封面及撥放音樂;從網路上直接擷取資料,還有其他功能………。
有關如何利用Excel及Excel
VBA作複雜之程式設計之詳細內容,有興趣之讀者可參考筆者另一著作『Excel在邊坡工程之應用(戴清河,2008,科技圖書)』。
一般市面上常用之商業繪圖程式,大多不考慮以輸入大量資料來繪製圖形,就算有,也是相當複雜煩瑣,有的更必須由使用者自行編寫程式方配合。
舉例來說如果讀者因工作需要繪製如y=3sin(5x)cos(x)+exp(x),或z=5x(x+3y)之圖形,則一般Cad程式可能無法直接以輸入公式方式處理。
您是可以先將自變數區分為若干段分別代入公式,分段繪製方式完成,但等畫完後您可能已精疲力盡,而成果是否
達到要求還必須再確認?當然如您有數學專用軟體如MatLab(MatrixLabaratory)
、CAS(Computer
AlgebraSystem)、Methmatica或Maple,Derive就另當別論。
如果沒有,您可以自己D.I.Y一番,利用Excel來完成它。
下面所要介紹就是如何利用Excel來做VB畫圖程式,或以Excel工作表作為Ms_Dos版本之執行程式之輸入樣板及利用其輸出成果以繪製圖形之觀念。
2.Excel工作表公式輸入方式介紹
計算是Excel
最重要之功能之一。
Excel公式和一般數學公式類似,而Excel公用函數則與一般電腦程式(序)之庫存函數相似。
如工作表中A1:A5儲存格分別儲存1、3、5、7及9數值,則計算A1:A5之總和『=A1+A2+A3+A4+A5』=25為公式計算方式;而利用Excel工作表公用函數SUM()則為『SUM(A1:A5)』=25。
工作表函數可以有引數(Arguments),也可以不需要引數如π(PI()函數)者,但一般公用函數多需要引數,前述之A1:A5就是SUM()之引數。
2.1
公式介紹
不論是公式或函數都是以等號”=”開頭,公式是由位址、定義名稱或函數與運算符號所組成。
函數之引數可以是數值、位址、定義名稱、陣列等。
Excel
的公式大體上可分成三種:
項次
類別
說
明
範
例
1
數學公式
由數學運算因子(+、-、*、/、%、、)、數值、儲存格等組成
『=A1*5/B1』
2
文字連接公式
用”&”連接者
『=B2&”Cat”』
3
比較公式
由儲存格、數值或公式比較後傳回True或False邏輯值
『=B3>SUM(A1:A5)/4』
各運算符號之優先順序如下表所示。
優先順序
類
別
運算符號
說
明
最高級
數學運算符號
-
負號
%
百分比
^
指數或乘方
*及/
乘除
+及-
加減
文字連結符號
&
文字連結
最低級
比較運算符號
=
、<>、<=、>=、<>
比較運算
有關公式運算時應注意下列幾項規則:
(1)公式中如優先順序相同者,運算是由左至右。
(2)可以小括弧改變運算次序,小括弧內者優先處理。
(3)負號不需另外使用小括弧。
(4)公式中容許使用函數當引數,如『=SUM(5+SUM(A2:F2))』。
2.1
公式輸入介紹
在介紹Excel公式輸入前,讓我們先介紹公式輔助輸入器,公式輔助輸入器是在資料編輯列與名稱方塊間之三個按鈕
,當我們在作用儲存格輸入”=”時,此三個按鈕便立即出現。
Excel
公式輸入相當簡單,一般而言,
(1)可在作用儲存格直接輸入如『=A2+B2+C2+D2+E2』,後直接按ENTER或滑鼠左鈕。
(2)在資料編輯列內點選”=”,然後輸入”A2+B2+C2+D2+E2”,再點選
ü。
第(1)種輸入方式要輸入”A2”時,是可以改採用滑鼠點選儲存格A2代替,其餘”B2”、”C2”、”D2”及”
E2”亦同。
3.
函數介紹
Excel公用函數,其名稱是內定的。
公用函數除極少數之常數函數如PI()、TRUE()或FALSE()等外多需要引數,所謂引數就是函數在運算時,需要輸入之數值、位址、作用範圍、文字、其他函數資料。
如TAN(PI()/4.)中PI()/4.就是TAN()函數之引數,公用函數一般多由(1)函數名稱,(2)小括弧(
),及(3)引數所組成。
型態
範
例
說
明
數值
『=Sum(1,2,3.2)』
數值引數可為整數、負數、小數
文字
『=RIGHT(“LOVE”,2)』
RIGHT()中之文字引數必須使用雙引號””,如LOVE不用雙引號且未事先定義名稱時,則會出”#NAME?”錯誤訊息。
邏輯值
『=AND(4>=3,5<6,TRUE)』
邏輯值只有TRUE及FALSE兩種,故範例中三個引數邏輯值全部為TRUE,故傳回TRUE。
錯誤值
『A1=0,B1=1/A1』,『B1=ISEROR(A1)』
Excel錯誤訊息資料有”#DIV/0!”、”#N/A”、”#NAME?”、”#NULL!”、”NUM!”、”#REF!”及”VALUE!”等七種。
如範例A1儲存0,B1輸入1/A1,則B1出現”#DIV/0!”錯誤訊息,因此B1傳回TRUE。
位址
A1=2,B1=4,C1=-3.125
『D1=SUM(A1:C1)』
如A1:C1儲存數值,則SUM()以位址當引數,其可以是相對位址、絕對位址或混合位址。
名稱
如A1=PI()/180,並定義A1為RA,令『B1=30,C1=COS(B1*RA)』
A1定義為”RA=3.14159/180”,則C1=
COS(B1*RA)中之引數RA為合法之函數引數。
其他函數或公式
『=SUM(A1:F1,AVERAGE(B2:F2))』,『=AVERAGE(1,3,5,5*6/2)』
函數AVERAGE(B2:F2)傳回值作為SUM()之引數;範例2公式5*6/2計算值作為AVERAGE()之引數之一
陣列
D1=『MDETERM({1,3,5;2,3,4;3,4,5})』
D1=『MDETERM(A1:C3)』
如A1=1,B1=3,C1=5;A2=2,B2=3,C2=4;A3=3,B3=4,C3=5。
則{1,3,5;2,3,4;3,4,5}為陣列;=MDETERM(A1:C3)亦為陣列之表示法,其可直接輸入,或在輸入公式=MDETERM
(A1:C3)後同時按Ctrl&Shift&
Enter鍵。
混合型態
『=SUM(AVERAGE(A1:D1)』,
『MDETERM({100,300;500,50}),G6,$G$10,季銷售金額,100*20)』
為前述各型態組合類型,範例中之季銷售金額為定義名稱,{100,300;500,50}為陣列。
4.
名稱定義
在Excel儲存格輸入冗長之計算公式比較容易出錯,因此屬常數或全域變數(Global
variables,指在同一個活頁簿中之共同變數)名稱,便可利用「插入(I)/名稱(N)/定義(D)」工具,將該常數或全域變數以特定名稱定義以方便作業。
如前數之數學函數公式中x或(x,y)定義為Xx或(Xx,Yy)。
為何一定要將其名稱定義,此部份是我們利用Excel工作表設計一個通用繪製程式之重要觀念,首先觀察如下圖之工作表,本工作表主要是為繪製任何三維函數圖形所設計者。
舉例來說,如果我們要畫方程式z=8.0[0.25(x+y)]在(-8≦x≦8,-8≦y≦8)範圍內之圖形,而且我們也要設計好之繪畫程式能適用在所有之外顯型函數,如果您朋友不會編寫VB程式,但他想分享您的成果,而您手上僅有Excel軟體(合法)那麼您應該如何完成使命?
表4.1a三維函數資料轉譯工作表
表4.1b三維函數資料轉譯工作表
在設計整個繪圖程式前必須先瞭解Excel工作表中變數名稱定義與VB或Excel
VBA變數名稱之差異。
以公式z=8.0[0.25(x+y)]來說,如在Excel任何一個工作表中將其定義為Xx,Yy(大小寫不分),則在同一個活頁簿(WorkSheet)中任何儲存格都可以引用它,它是屬全域變數,其值永遠等於您定義它為Xx或Yy處之儲存格所存放之資料(文字、數據或公式等);而在VB或Excel
VBA所定義之Xx或Yy變數其資料型態,完全取決您是如何宣告,其可為整數或實數,至於是屬全域變數或局部變數則視以Public或Dim宣告及其擺放位置而定。
如表4.1a將儲存格A6及B6分別定義為XX及YY,D6儲存公式=8*EXP(0.25*(XX*XX+YY*YY)),則在同一個Project(即活頁簿)工作中,如引用xx(或Xx,或XX)時其值都等於A6所存放之資料,如A6及B6分別儲存-8與8,則D6=8*(0.25*((-8)*(-8)+(8)*(8)))。
Excel工作表有如此特性,因此我們可以利用其來轉譯及建立自變數變化範圍為(-8≦x≦8,-8≦y≦8)之資料檔案。
5.建立資料檔
設計三維函數繪圖VB電腦程式,如果有合法之VB電腦程式開發軟體,您可以直接以自訂函數來計算Z=8*EXP*(0.25*(XX*XX+YY*YY))值及繪製函數圖形;如果沒有,就只好退而求其次,利用Excel工作表繪製函數圖。
最直接之方法是可準備類似如表5.1之資料,將xy設定成x=8,y=-8,x=8,y=-7,x=8,y=-6,……x=-8,y=7,x=-8,y=8以計算對應之z值,然後分條(固定x,y=-8~8),分段(y=-8~-7,y=-7~-6,……)畫線,逐條完成。
不過這種方式實在太不科學也完全沒有考慮到自動化。
下面我們所介紹之方式,原則與上述方法相似,但採全自動化作業。
工程表(表5.1)中儲存格A6及B6,只存放xx(再次提醒不分大小寫)及yy值,而C6存放公式,因此我們可以設計一個小程式:
(a)將自變數xx及yy變化翻範圍及每次計算增量(儲存格A4、B4、C4及E4、F4、G4)傳遞給程序。
(b)然後由程序自動指派xx及yy值給工作表儲存格A6及B6。
(c)由工作表依C6所儲存之公式以計算z值,計算完成後z值再回傳程式
(d)由程式自動將每一組之(x,y,z)寫入資料檔案中。
如此重複進行直至x=-8,=8為止。
為區別每一條線,我們可以在xx變化時第一筆資料之旗標(Iflag)設定為0,其餘則Iflag=1以為區分。
(e)由VB程式或Excel
VBA滑製圖形。
表5.1三維函數資料表
x
y
z
x
y
z
x
y
z
x
y
z
x
y
z
x
y
z
x
y
z
x
y
z
8
-8.00
102.40
7.00
-8.00
90.40
6.00
-8.00
80.00
5.00
-8.00
71.20
4.00
-8.00
64.00
3.00
-8.00
58.40
2.00
-8.00
54.40
1.00
-8.00
52.00
8
-7.00
90.40
7.00
-7.00
78.40
6.00
-7.00
68.00
5.00
-7.00
59.20
4.00
-7.00
52.00
3.00
-7.00
46.40
2.00
-7.00
42.40
1.00
-7.00
40.00
8
-6.00
80.00
7.00
-6.00
68.00
6.00
-6.00
57.60
5.00
-6.00
48.80
4.00
-6.00
41.60
3.00
-6.00
36.00
2.00
-6.00
32.00
1.00
-6.00
29.60
8
-5.00
71.20
7.00
-5.00
59.20
6.00
-5.00
48.80
5.00
-5.00
40.00
4.00
-5.00
32.80
3.00
-5.00
27.20
2.00
-5.00
23.20
1.00
-5.00
20.80
8
-4.00
64.00
7.00
-4.00
52.00
6.00
-4.00
41.60
5.00
-4.00
32.80
4.00
-4.00
25.60
3.00
-4.00
20.00
2.00
-4.00
16.00
1.00
-4.00
13.60
8
-3.00
58.40
7.00
-3.00
46.40
6.00
-3.00
36.00
5.00
-3.00
27.20
4.00
-3.00
20.00
3.00
-3.00
14.40
2.00
-3.00
10.40
1.00
-3.00
8.00
8
-2.00
54.40
7.00
-2.00
42.40
6.00
-2.00
32.00
5.00
-2.00
23.20
4.00
-2.00
16.00
3.00
-2.00
10.40
2.00
-2.00
6.40
1.00
-2.00
4.00
8
-1.00
52.00
7.00
-1.00
40.00
6.00
-1.00
29.60
5.00
-1.00
20.80
4.00
-1.00
13.60
3.00
-1.00
8.00
2.00
-1.00
4.00
1.00
-1.00
1.60
8
0.00
51.20
7.00
0.00
39.20
6.00
0.00
28.80
5.00
0.00
20.00
4.00
0.00
12.80
3.00
0.00
7.20
2.00
0.00
3.20
1.00
0.00
0.80
8
1.00
52.00
7.00
1.00
40.00
6.00
1.00
29.60
5.00
1.00
20.80
4.00
1.00
13.60
3.00
1.00
8.00
2.00
1.00
4.00
1.00
1.00
1.60
8
2.00
54.40
7.00
2.00
42.40
6.00
2.00
32.00
5.00
2.00
23.20
4.00
2.00
16.00
3.00
2.00
10.40
2.00
2.00
6.40
1.00
2.00
4.00
8
3.00
58.40
7.00
3.00
46.40
6.00
3.00
36.00
5.00
3.00
27.20
4.00
3.00
20.00
3.00
3.00
14.40
2.00
3.00
10.40
1.00
3.00
8.00
8
4.00
64.00
7.00
4.00
52.00
6.00
4.00
41.60
5.00
4.00
32.80
4.00
4.00
25.60
3.00
4.00
20.00
2.00
4.00
16.00
1.00
4.00
13.60
8
5.00
71.20
7.00
5.00
59.20
6.00
5.00
48.80
5.00
5.00
40.00
4.00
5.00
32.80
3.00
5.00
27.20
2.00
5.00
23.20
1.00
5.00
20.80
8
6.00
80.00
7.00
6.00
68.00
6.00
6.00
57.60
5.00
6.00
48.80
4.00
6.00
41.60
3.00
6.00
36.00
2.00
6.00
32.00
1.00
6.00
29.60
8
7.00
90.40
7.00
7.00
78.40
6.00
7.00
68.00
5.00
7.00
59.20
4.00
7.00
52.00
3.00
7.00
46.40
2.00
7.00
42.40
1.00
7.00
40.00
8
8.00
102.40
7.00
8.00
90.40
6.00
8.00
80.00
5.00
8.00
71.20
4.00
8.00
64.00
3.00
8.00
58.40
2.00
8.00
54.40
3.00
8.00
58.40
下面為建立資料檔案及複製公式之程式碼,是不是很簡單?資料計分兩組,檔案名稱為內定,無法在工作表變更檔名,如須改名稱則需在原程式碼修改。
Excel此種規定,應該是在防止非程式開發者胡亂修改資料檔案?資料檔案中之”c:\電腦製圖\三維函數xyzA.inp"是固定xx變化yy的曲線資料;另"c:\電腦製圖\三維函數xyzB.inp"是固定yy變化xx的曲線資料。
如此利用兩組資料繪製之曲線時便成格網形狀。
PrivateSubCopyEquation_Click()
‘複製公式
DimStEqAsString
StEq=Range("B2")
Range("D6")="="&StEq
EndSub
PrivateSub
建立資料檔案_Click()
DimXminAsSingle,XmaxAsSingle,DelXAsSingle
DimYminAsSingle,YmaxAsSingle,DelYAsSingle
DimFilename1AsString,Fileno1AsInteger,Filename2As
String,Fileno2AsInteger
DimXxAsSingle,YyAsSingle,ZzAsSingle,IflagAs
Integer
Fileno1=FreeFile
Open"c:\電腦製圖\三維函數xyzA.inp"
ForOutputAsFileno1’內定檔案名稱
Fileno2=FreeFile
Open"c:\電腦製圖\三維函數xyzB.inp"
ForOutputAsFileno2’內定檔案名稱
Xmin=Range("A4")
Xmax=Range("B4")
DelX=Range("C4")
Ymin=Range("E4")
Ymax=Range("F4")
DelY=Range("G4")
ForXx=XminToXmaxStepDelX
‘固定xx變化yy的曲線
Iflag=0
‘旗標=0
ForYy=YminToYmaxStepDelY
Range("A6")=Xx
Range("B6")=Yy
Zz=Range("D6")
Print#Fileno1,Xx;Yy;Zz;Iflag;’資料寫入檔案"c:\電腦製圖\三維函數xyz1.inp"
Iflag=1
‘旗標=1
NextYy
Print#Fileno1,""
NextXx
Close#Fileno1
ForYy=YmaxToYminStep
–DelY
‘固定yy變化xx的曲線
Iflag=0
ForXx=XminToXmaxStepDelX
Range("A6")=Xx
Range("B6")=Yy
Zz=Range("D6")
Print#Fileno2,Xx;Yy;Zz;Iflag;’資料寫入檔案"c:\電腦製圖\三維函數xyz1.inp"
Iflag=1
NextXx
Print#Fileno2,""
NextYy
Close#Fileno2
EndSub
下面是根據Private
Sub建立資料檔案_Click()程序所建立之檔案
"c:\電腦製圖\三維函數xyzA.inp"中之部分內容,第一曲線第一筆資料為(8
-8 6.317037E+14 0),同條曲線最後一筆資料為(8
8 6.317037E+14 1),第二條曲線第一筆資料為(7-8
1.485625E+13 0),此處要特別注意每一條第一筆資料之旗標都是0,資料是以空格區分,因此以後要由此檔案讀入(x,y,z,Iflag)資料時,也只能以空格分離資料。
8-8
6.317037E+14 0
8-7.5 9.100554E+13 1 8-7 1.485625E+13 1 8-6.5
2.748129E+12 1 8-6 5.760392E+11 1 8-5.5 1.368213E+11 1 8
-5 3.682495E+10 1 8-4.5 1.123098E+10 1 8-4 3.881321E+09 1
8-3.5 1.519947E+09 1 8-3 6.744726E+08 1 8-2.5
3.391461E+08 1 8-2 1.932396E+08 1 8-1.5 1.247649E+08 1 8
-1 9.127994E+07 1 8-0.5 7.567372E+07 1 8 0 7.108889E+07 1
8 0.5 7.567372E+07 1 8 1 9.127994E+07 1 8 1.5
1.247649E+08 1 8 2 1.932396E+08 1 8 2.5 3.391461E+08 1 8
3 6.744726E+08 1 8 3.5 1.519947E+09 1 8 4 3.881321E+09 1
8 4.5 1.123098E+10 1 8 5 3.682495E+10 1 8 5.5
1.368213E+11 1 8 6 5.760392E+11 1 8 6.5 2.748129E+12 1 8
7 1.485625E+13 1 8 7.5 9.100554E+13 1
8 8 6.317037E+14 1
7-8
1.485625E+13 0
7-7.5 2.140245E+12 1 7-7 3.493854E+11 1 7-6.5
6.462981E+10 1 7-6 1.354714E+10 1 7-5.5 3.217729E+09 1 7
-5 8.660399E+08 1 7-4.5 2.641272E+08 1 7-4 9.127994E+07 1
7-3.5 3.574574E+07 1 7-3 1.586207E+07 1 7-2.5 7975952 1
7-2 4544561 1 7-1.5 2934189 1 7-1 2146698 1 7-0.5
1779675 1 7 0 1671850 1 7 0.5 1779675 1 7 1 2146698 1
7 1.5 2934189 1 7 2 4544561 1 7 2.5 7975952 1 7 3
1.586207E+07 1 7 3.5 3.574574E+07 1 7 4 9.127994E+07 1 7
4.5 2.641272E+08 1 7 5 8.660399E+08 1 7 5.5 3.217729E+09
1 7 6 1.354714E+10 1 7 6.5 6.462981E+10 1 7 7
3.493854E+11 1 7 7.5 2.140245E+12 1 7 8 1.485625E+13 1
6.ExcelVB繪圖方法簡介
ExcelVBA所提供的繪圖工具是沒有VB多樣及實用,Excel
VBA可以用來畫圖之方法主要有Addline(畫線)、Addshape(畫圖案)、Addcurve(Bessel函數曲線)、AddDdiagram(建立圖案)、Addpolyline(集合線)、Buildfreeform(任意多邊形)等;書寫文字之工會及方法,則有Callout(圖說文字)、Addlabel(可以書寫垂直文字標籤)、Addtextbox(建立文字方塊)等。
畫圖方法中,除畫線及畫圖案外,其餘在利用工作表作畫布之Excel
VBA電腦繪圖程式中,作用似乎相當有限。
當然,ExcelVBA本身就不是為開發電腦繪圖程式所設計,我們把它用來設計簡單之繪圖程式使用,只不過是增加其邊際效益而已,反正不用白不用?上述所介紹之畫圖方法及屬性,座標原點都是以文件(主要為工作表)左上角,x軸朝右y軸朝下,與我們一般常用之x軸朝右y軸朝上的習慣並不十分契合,因此使用起來總是有些不方便,另外上述之畫圖方法或屬性之參數比較複雜,因此筆者特將常用之畫線、畫橢圓(含園)、畫框等改寫成以座標原點(x軸朝右y軸朝上)為參考點之自訂程序供讀者參考。
為方便說明,此處之立體圖示也捨棄前面透視投影圖之觀念,利用線性轉換三度空間轉換至二維平面之觀念以立體斜交座標系統(Skewed
axesxy-coordinatevsystem)表示方式呈現圖形。
如圖6.1之圖示,新x’軸與原三軸互相垂直之x軸夾角為α,新y’軸與原y軸夾角為β,新z’軸與原x軸夾角為γ,z軸伸縮係數為k。
則由三角形ABC正弦定理可得出:
x’=x+y+kz
(6.1a)
y’=x+y+kz
(6.1b)
以矩陣方式表示為:
=
(6.2)
上述公式(6.2)如令α=0,β=0,k=0.5時,則公式(6.2)就變成傾斜投影(oblique
projection)之箱匣投影(Cabinetprojection):
=
(6.2)
6.1繪圖程式設計
ExcelVBA畫圖方法中有關畫線Addline及畫圖案Addshape方法,尤其是畫線可以以說是Excel
VBA畫圖中最基本的方法,有Addline方法後,其餘畫圖方法多可以以自訂程序來完成。
利用Excel
VBA畫圖要在圖上寫字或標示數字似乎就比較麻煩,雖然可以利用可以在shapes圖案中寫字或利用Callout、Addlabel、Addtextbox方式處理,但上述方法的寫字外框多會遮蓋住部份圖形線條。
以下是筆者將常用幾種畫圖方法改寫成以x軸朝右y軸朝下之程式碼。
PublicSub
畫線(直線起點_H
AsSingle,直線起點_VAsSingle,直線終點_H
AsSingle,_直線終點_VAsSingle,線形代號
AsInteger,線寬代號AsInteger,紅色指數
AsInteger,綠色指數AsInteger,藍色指數
AsInteger)
Dim
直線起點左
AsSingle,直線起點上,直線終點右
AsSingle,直線終點下AsSingle
直線起點左
=Scren_cenH+直線起點_H
直線起點上
=Scren_cenV-直線起點_V
直線終點右
=Scren_cenH+直線終點_H
直線終點下
=Scren_cenV-直線終點_V
With
ActiveSheet.Shapes.AddLine(直線起點左,
直線起點上,直線終點右,
直線終點下).Line
.DashStyle
=線形代號
.Weight=
線寬代號
.ForeColor.RGB
=RGB(紅色指數,
綠色指數,藍色指數)
End
With
EndSub
PublicSub
畫框及寫字(框下水平位置座標
AsSingle,框下垂直位置座標AsSingle,框寬
AsSingle,_框高AsSingle,文字內容
AsString,字體AsString,大小
AsInteger,字紅色指數AsInteger,字綠色指數
AsInteger,字藍色指數AsInteger,外框色代號
AsInteger)
Dim
框起點左
AsSingle,框起點上AsSingle
框起點左
=Scren_cenH+框下水平位置座標+框寬
框起點上
=Scren_cenV-框下垂直位置座標-框高
ActiveSheet.Shapes.AddShape(msoShapeRectangle,
框起點左,
框起點上,框寬,框高).Select
Selection.Characters.Text
=文字內容
With
Selection.Characters(Start:=1,Length:=5).Font
.Style=字體
‘如細明體
.Size=大小
.Color
=RGB(字紅色指數,
字綠色指數,字藍色指數)
End
With
With
Selection.ShapeRange.Line
.ForeColor.SchemeColor
=外框色代號
'=1外框變成白色
End
With
EndSub
PublicSub
圖案及寫字(圖案編號
AsInteger,框下水平位置座標AsSingle,
框下垂直位置座標AsSingle,框寬As
Single,_框高AsSingle,文字內容
AsString,字體AsString,大小
AsInteger,字紅色指數AsInteger,字綠色指數
AsInteger,字藍色指數AsInteger,外框色代號
AsInteger)
Dim
框起點左
AsSingle,框起點上AsSingle
框起點左
=Scren_cenH+框下水平位置座標+框寬
框起點上
=Scren_cenV-框下垂直位置座標-框高
ActiveSheet.Shapes.AddShape(圖案編號,
框起點左,框起點上,
框寬,框高).Select
Selection.Characters.Text
=文字內容
With
Selection.Characters(Start:=1,Length:=5).Font
.Style=字體
‘如細明體
.Size=大小
.Color
=RGB(字紅色指數,
字綠色指數,字藍色指數)
End
With
With
Selection.ShapeRange.Line
.ForeColor.SchemeColor
=外框色代號
'=1外框變成白色
End
With
EndSub
PublicSub
畫圓及寫字(圓心水平位置座標
AsSingle,圓心垂直位置座標AsSingle,半徑
AsSingle,_文字內容AsString,字體
AsString,大小AsInteger,字紅色指數
AsInteger,字綠色指數AsInteger,字藍色指數
AsInteger,外框色代號AsInteger)
Dim
框起點左
AsSingle,框起點上AsSingle,框寬
AsSingle,框高AsSingle
框起點左
=Scren_cenH+圓心水平位置座標-半徑
框起點上
=Scren_cenV-圓心垂直位置座標-半徑
框寬
=半徑*2
框高
=半徑*2
ActiveSheet.Shapes.AddShape(msoShapeOval,
框起點左,
框起點上,框寬,框高).Select
Selection.Characters.Text
=文字內容
With
Selection.Characters(Start:=1,Length:=5).Font
.Style=字體
‘如細明體
.Size=大小
.Color
=RGB(字紅色指數,
字綠色指數,字藍色指數)
End
With
With
Selection.ShapeRange.Line
.ForeColor.SchemeColor
=外框色代號
'=1外框變成白色
End
With
EndSub
Public
SubAllshapes_delete()
‘清除儲存格
ActiveSheet.Range("A1:W100").Delete
EndSub
PublicSub
畫箭頭(直線虛實代號
AsInteger,箭頭起點_HAsSingle,箭頭起點_V
AsSingle,箭頭終點_HAsSingle,_箭頭終點_V
AsSingle,紅色指數AsInteger,綠色指數
AsInteger,藍色指數AsInteger)
'BeginX ,BeginY
必選的
Single。
相對於文件的左上角,以點為單位指定直線的起點位置。
'EndX ,EndY
必選的
Single。
相對於文件的左上角,以點為單位指定直線的終點位置。
Dim箭頭起點左
AsSingle,箭頭起點上,箭頭終點右
AsSingle,箭頭終點下AsSingle
箭頭起點左
=箭頭起點_H+Scren_cenH
箭頭起點上
=Scren_cenV-箭頭起點_V
箭頭終點右
=箭頭終點_H+Scren_cenH
箭頭終點下
=Scren_cenV-箭頭終點_V
With
ActiveSheet.Shapes.AddLine(箭頭起點左,
箭頭起點上,箭頭終點右,
箭頭終點下).Line
.DashStyle=
直線虛實代號 '如msoLineDashDotDot代號為6,msolineSolid代號為1
.ForeColor.RGB
=RGB(紅色指數,
綠色指數,藍色指數)
.BeginArrowheadLength
=msoArrowheadShort
.BeginArrowheadStyle
=msoArrowheadOval
.BeginArrowheadWidth
=msoArrowheadNarrow
.EndArrowheadLength
=msoArrowheadLong
.EndArrowheadStyle
=msoArrowheadTriangle
.EndArrowheadWidth
=msoArrowheadWide
End
With
End
Sub
下面為三維函數f(xx,yy)=8.*exp(-0.15*(xx*xx+yy*yy))利用Excel
VBA繪圖之程式碼。
PrivateSubCmd3DFdig_Click()
Dim
Fileno1AsInteger,Fileno2AsInteger
Dim
Nop_IAsInteger,Coord(1500,3)AsSingle,Xmin_orgIAsSingle,
Ymin_orgIAsSingle,Zmin_orgIAsSingle
Dim
Xmax_orgIAsSingle,Ymax_orgIAsSingle,Zmax_orgIAsSingle,
Iflag(1500)AsInteger
Dim
XtptAsSingle,YtptAsSingle,ZtptAsSingle,IflagtptAsInteger,I
AsInteger
DimX1
AsSingle,Y1AsSingle,X2AsSingle,Y2AsSingle,Xyz_minI(3)As
Single,Xyz_maxI(3)AsSingle
DimSt1
AsString,AngXp_XAsSingle,AngYp_YAsSingle,AngZp_XAsSingle,Xout
AsSingle,YoutAsSingle
Fileno1
=FreeFile
Open
"c:\電腦製圖\三維函數xyzA.inp"
ForInputAsFileno1
Call
datain(8)
'********3D函數原始資料讀入
Sheet1.Range("E19")="xy軸比例"
Sheet1.Range("E20")="螢幕半高"
Sheet1.Range("E21")="螢幕半寬"
Sheet1.Range("E22")="新x舊x夾角"
Sheet1.Range("E23")="新y舊y夾角"
Sheet1.Range("E24")="新z舊x夾角"
Sheet1.Range("E25")="z軸伸縮係數"
Xyscale=Sheet1.Range("G19") 'xy軸比例
Scren_cenV=Sheet1.Range("G20") '螢幕半高
Scren_cenH=Sheet1.Range("G21")
'螢幕半寬
AngXp_X=Sheet1.Range("G22") '新x舊x夾角
AngYp_Y=Sheet1.Range("G23") '新y舊y夾角
AngZp_X=Sheet1.Range("G24") '新z舊x夾角
Kfct=Sheet1.Range("G25") 'z軸伸縮係數
Sheet2.Select
CallAllshapes_delete
Nop_I=0
DoWhileNotEOF(Fileno1)
Nop_I=Nop_I+1
Input#Fileno1,Xtpt,Ytpt,Ztpt,Iflagtpt
Coord(Nop_I,1)=Xtpt
Coord(Nop_I,2)=Ytpt
Coord(Nop_I,3)=Ztpt
Iflag(Nop_I)=Iflagtpt
Loop
Call最小座標2(Nop_I,
Coord(),Xyz_minI())
Call最大座標2(Nop_I,
Coord(),Xyz_maxI())
Xmin_orgI=Xyz_minI(1)
Ymin_orgI=Xyz_minI(2)
Zmin_orgI=Xyz_minI(3)
Xmax_orgI=Xyz_maxI(1)
Ymax_orgI=Xyz_maxI(2)
Zmax_orgI=Xyz_maxI(3)
CallR3TranR2(AngXp_X,AngYp_Y,AngZp_X,Xmin_orgI,Ymin_orgI,Zmin_orgI,
0.5,Xout,Yout)
Xmin_orgI=Xout*X方格長
*Xyscale
Ymin_orgI=Yout*Y方格長
*Xyscale
CallR3TranR2(AngXp_X,AngYp_Y,AngZp_X,Xmax_orgI,Ymax_orgI,Zmax_orgI,
0.5,Xout,Yout)
Xmax_orgI=Xout*X方格長
*Xyscale
Ymax_orgI=Yout*Y方格長
*Xyscale
ForI=1ToNop_I-1
CallR3TranR2(AngXp_X,AngYp_Y,AngZp_X,Coord(I,1),Coord(I,2),
Coord(I,3),0.5,Xout,Yout)
X1=Xout*X方格長
*Xyscale
Y1=Yout*X方格長
*Xyscale
CallR3TranR2(AngXp_X,AngYp_Y,AngZp_X,Coord(I+1,1),Coord(I+1,
2),Coord(I+1,3),0.5,Xout,Yout)
X2=Xout*X方格長
*Xyscale
Y2=Yout*X方格長
*Xyscale
IfIflag(I)=0Then
St1=Trim(Str(Coord(I,1)))
Call畫框及寫字(X1
-2*Xyscale,Y1,15,15,St1,"ITALIC",6,150,0,0,1)
EndIf
IfIflag(I)=1AndIflag(I+1)=1ThenCall
畫線(X1,
Y1,X2,Y2,1,1,50,50,50)
NextI
Call畫箭頭(1,
0,0,200,0,0,0,250) '畫x軸
Call畫框及寫字(200
+1*Xyscale,0,15,15,"x","ITALIC",6,150,0,0,1)
Call畫箭頭(1,
0,0,0,200,0,0,250) '畫y軸
Call畫框及寫字(0,
200+1*Xyscale,15,15,"y","ITALIC",6,150,0,0,1)
DoEvents '加此陳述句後電腦在畫圖時,user可以利用點進行其他工作
100
Close
EndSub
下面為利用Excel
VBA繪圖之程式所畫出函數f(x,y)=8.*exp(-0.15*(x*x+y*y))
之三維箱匣投影圖形。
有關二維函數畫圖之ExcelVBA程式設計,其作業方式類似,此部份由讀者自行練習。
下圖為利用Excel
VBA建立資料檔後,以VB所畫之3D透視圖形(Din
=30:vDin=420:Thetain=30:Phiin=80:Ssin=2#)。
7Excel與VB應用程式互動及整合
7.1VB呼叫外部執行程式
前面各節我們所討論的大多屬如何在Excel或Excel
VBA工作表中建立資料檔,並未曾涉及Excel或Excel
VBA與VB間互動及整合應用。
在VB應用程式中,可以透過Shell()函數來呼叫外部應用程式如Microsoft
Excel、Word,PowerPoint及其他應用執行程式(**.exe延伸檔為”exe”者),其語法為:
Shell(PathName[,Windowstyle]
參數
說明
PathName
必要參數,資料型態為Variant,為要呼叫之外部執行程式名稱及路徑
Windowstyle
選擇參數,資料型態為Variant,為要呼叫之外部執行程式視窗樣式。
如果省略,則呈現具有焦點之最小化視窗。
Windowstyle常數名稱
常數值
說明
VbHide
0
隱藏視窗,焦點仍在隱藏視窗上
VbNormalFocus
1
視窗有焦點,其大小為原應用程式視窗大小
VbMinimizedFocus
2
視窗以具有焦點之圖示呈現
VbMaximizedFocus
3
視窗以具有焦點之最大化圖示呈現
VbNormalNotFocus
4
視窗會還原至最近使用的大小及位置,目前作用中之視窗不受影響
VbMinimizedNotFocus
6
視窗會以圖示來顯示,目前作用中之視窗不受影響
下面為在VB程式中呼叫Excel工作表之圖示,其程式碼為:
PrivateSubCommand2_Click()
DimIAs
Variant
'請檢查"c:\電腦製圖\三維函數資料檔.xsl"是否存在
I=
Shell("C:\ProgramFiles\MicrosoftOffice\OFFICE11\excel.exe",3)
EndSub
7.2VB開啟Excel工作表
利用Shell()函數所能呼叫之外部程式,是一個空白之應用程式,如果需要開啟一個已經存在之工作表(如表4.1),則必須再用人工方式開啟,使用上好像並不十分方便,所幸VB蠻貼心的提供GetObject()函數與CreateObject()函數可以直接開啟我們需要之工作表。
有關CreateObject()函數之語法及應用,讀者請利用VB物件瀏覽(Q)自行查閱。
下面我們所披露開啟Excel工作表程式碼,係參考及修正自VB所提供GetObject()函數應用範例者。
Declare
FunctionFindWindowLib"user32"Alias_
"FindWindowA"
(ByVallpClassNameasString,_
ByVallpWindowNameAsLong)AsLong
Declare
FunctionSendMessageLib"user32"Alias_
"SendMessageA"
(ByValhWndasLong,ByValwMsgasLong,_
ByValwParamasLong,_
ByVallParamAsLong)AsLong
SubGetExcel()
Dim
ExcelWasNotRunningAsBoolean '
用來標示最後是否要關閉MicrosoftExcel的旗標。
Dim
FileName_ExcelAsString
FileName_Excel="L:/電腦製圖數學/VB用函數資料檔new.xls"
'
檢查
MicrosoftExcel是否已經在執行。
On
ErrorResumeNext '
將錯誤狀況處理方式指定成「繼續下一行」。
'
以省略第一個引數的方式來呼叫Getobject
函數,傳回應用程式的執行個體之引用。
如果該程式尚未執行,將會產生錯誤。
Set
MyXL=GetObject(,"Excel.Application")
If
Err.Number<>0ThenExcelWasNotRunning=True
Err.Clear '
若錯誤發生時,清除Err物件。
'
查看
MicrosoftExcel。
如果MicrosoftExcel
正在執行,
'
將它加入執行中的物件資料表中。
Call
DetectExcel
'
將程式的引用儲存到物件變數中。
Set
MyXL=GetObject(FileName_Excel)
'
利用
Application屬性將MicrosoftExcel顯示出來。
然後
'
使用
MyXL物件引用的Windows集合物件將工作表視窗顯示出來。
MyXL.Application.Visible=True
MyXL.Parent.Windows(1).Visible=True
'
如果
MicrosoftExcel先前未執行,
'
則使用
Application屬性的Quit方法將之關閉。
'
請注意,當您試圖關閉MicrosoftExcel時,
'
標題列會閃爍,並出現一訊息詢問您是否
'
要儲存已載入的工作表檔案。
If
ExcelWasNotRunning=TrueThen
MyXL.Application.Quit
End
If
Set
MyXL=Nothing '
釋放程式與工作表的引用。
EndSub
SubDetectExcel()
'
該程序檢測並註冊一個執行中的Excel。
ConstWM_USER=1024
Dim
hWndAsLong
'
如果
Excel正在執行,則該API呼叫將傳回它的物件代碼。
hWnd
=FindWindow("XLMAIN",0)
If
hWnd=0Then '0meansExcelnotrunning.
ExitSub
Else
'Excel
正在執行,因此可以使用SendMessageAPI
'
函數將其放入執行中的物件資料表。
SendMessagehWnd,WM_USER+18,0,0
End
If
EndSub
另外一個是不必使用到API程式宣告的簡單程式碼寫法,其內容如下:
SubCmdOpenExcel_Click()
DimstrFileNameAsString
OnErrorGoToErrHandler
DimxlsAppAsObject
DimxlsWorkBookAsObject
strFileName="L:\電腦製圖數學\VB用函數資料檔new.xls"
'此檔案必須在指定之硬碟中確實存在
SetxlsApp=CreateObject("Excel.Application")
xlsApp.Visible=True
SetxlsWorkBook=xlsApp.Workbooks.Open(strFileName)
'開啟VB用函數資料檔new.xls工作表
ExitSub
ErrHandler:
MsgBox"開啟VB用函數資料檔new.xls工作表發生錯誤???
"&_
"
請檢視檔案!!!",
vbCritical,"資料檔錯誤"
EndSub
7.2VB利用Excel圖表精靈
利用VB程式所提供之繪圖函數或方法,是可以編寫程式碼繪製圖表(Chart),不過其所畫出來之圖表,似乎就沒有Excel的圖表精靈畫的好看及多樣性,必竟製作圖表是Excel擅長之功能之一,另外,Excel有三百多種工作表函數,如能善加利用,對VB程式開發幫助甚大。
Excel所提供圖表類別有七十幾種(詳下表)。
項次
圖表類別
說明
0
xlLine
折線圖
1
xlLineMarkersStacked
堆疊資料點折線圖
2
xlLineStacked
堆疊折線圖
3
xlPie
圓形圖
4
xlPieOfPie
子母圓形圖
5
xlPyramidBarStacked
堆疊橫條金字塔圖
6
xlPyramidCol
立體直條金字塔圖
7
xlPyramidColClustered
叢集直條金字塔圖
8
xlPyramidColStacked
堆疊直條金字塔圖
9
xlPyramidColStacked100
百分比堆疊直條金字塔圖
10
xlRadar
雷達圖
11
xlRadarFilled
填滿雷達圖
12
xlRadarMarkers
資料點雷達圖
13
xlStockHLC
最高-最低-收盤
14
xlStockOHLC
開盤-最高-最低-收盤
15
xlStockVHLC
成交量-最高-最低-收盤
16
xlStockVOHLC
成交量-開盤-最高-最低-收盤
17
xlSurface
立體曲面圖
18
xlSurfaceTopView
曲面圖
(俯視圖)
19
xlSurfaceTopViewWireframe
曲面圖
(俯視框線圖)
20
xlSurfaceWireframe
立體曲面圖
(框架圖)
21
xlXYScatter
散佈圖
22
xlXYScatterLines
折線散佈圖
23
xlXYScatterLinesNoMarkers
無資料標記折線散佈圖
24
xlXYScatterSmooth
平滑線散佈圖
25
xlXYScatterSmoothNoMarkers
無資料標記平滑折線散佈圖
26
xl3DArea
立體區域圖
27
xl3DAreaStacked
立體堆疊區域圖
28
xl3DAreaStacked100
百分比堆疊區域圖
29
xl3DBarClustered
立體叢集橫條圖
30
xl3DBarStacked
立體堆疊橫條圖
31
xl3DBarStacked100
立體百分比堆疊橫條圖
32
xl3DColumn
立體直條圖
33
xl3DColumnClustered
立體叢集直條圖
34
xl3DColumnStacked
立體堆疊直條圖
35
xl3DColumnStacked100
立體百分比堆疊直條圖
36
xl3DLine
立體折線圖
37
xl3DPie
立體圓形圖
38
xl3DPieExploded
分裂式立體圓形圖
39
xlArea
區域圖
40
xlAreaStacked
堆疊區域圖
41
xlAreaStacked100
百分比堆疊區域圖
42
xlBarClustered
叢集橫條圖
43
xlBarOfPie
圓形圖帶有子橫條圖
44
xlBarStacked
堆疊橫條圖
45
xlBarStacked100
百分比堆疊橫條圖
46
xlBubble
泡泡圖
47
xlBubble3DEffect
立體泡泡圖
48
xlColumnClustered
叢集直條圖
49
xlColumnStacked
堆疊直條圖
50
xlColumnStacked100
百分比堆疊直條圖
51
xlConeBarClustered
叢集橫條圓錐圖
52
xlConeBarStacked
堆疊橫條圓錐圖
53
xlConeBarStacked100
百分比堆疊橫條圓錐圖
54
xlConeCol
立體直條圓錐圖
55
xlConeColClustered
叢集直條圓錐圖
56
xlConeColStacked
堆疊直條圓錐圖
57
xlConeColStacked100
百分比堆疊直條圓錐圖
58
xlCylinderBarClustered
叢集橫條圓柱圖
59
xlCylinderBarStacked
堆疊橫條圓柱圖
60
xlCylinderBarStacked100
百分比堆疊橫條圓柱圖
61
xlCylinderCol
立體直條圓柱圖
62
xlCylinderColClustered
叢集直條圓錐圖
63
xlCylinderColStacked
堆疊直條圓錐圖
64
xlCylinderColStacked100
百分比堆疊直條圓柱圖
65
xlDoughnut
環圈圖
66
xlDoughnutExploded
分裂式環圈圖
67
xlLineMarkers
資料點折線圖
68
xlLineMarkersStacked100
百分比堆疊帶有標記的折線圖
69
xlLineStacked100
百分比堆疊折線圖
70
xlPieExploded
分裂式圓形圖
71
xlPyramidBarClustered
叢集橫條金字塔圖
72
xlPyramidBarStacked100
百分比堆疊橫條金字塔圖
在VB程式中,呼叫引用Excel之圖表精靈繪製圖表,其作業方式主要有:
(1)在VB程式或在Excel工作表中利用下拉式清單方塊選取圖表類型。
(2)載入已設計完成之Excel工作表,並將需要繪製圖表之資料檔(含水平軸及垂直軸座標、刻度、標題及圖名等)匯入Excel工作表儲存格或寫入資料檔儲存備用。
(3)點按工作表中資料性質自動分析按鈕,分析匯(或讀)入之資料之筆數及儲存格範圍。
(4)點按工作表中自動插入圖表按鈕利用,Excel的圖表精靈製作圖表。
(5)關閉Excel工作表,匯出圖表至VB圖像方塊。
下面是所使用之設計表單式樣及點按(1)圖表類別查詢按鈕後之畫面。
上述作業方式並非不能改變,讀者可依個人喜愛及需求作適度之修正。
有關VB之程式碼設計並不困難,下面提供部份較重要程式的程式碼供讀者參考。
PrivateSubChartPlot(ChartTypeNameInAsString,XaxilNameInAsString,
YaxilNameInAsString,ChartcaptionInAsString,_XscaleUnitAsString,
YscaleUnitAsString)
DimstrFileNameAsString
DimUt(100)AsString,FF(4,100)AsString,NdataTypeAsInteger,
NdataEachAsInteger
DimJAsInteger,IAsInteger,utMAXAsSingle,utMINAsSingle,ffMAX
AsSingle,ffMINAsSingle,utTptAsSingle,ffTptAsSingle
'OnErrorGoToErrHandler
DimxlsAppAsObject
DimxlsWorkBookAsObject,MySheetAsObject
strFileName="L:\電腦製圖數學\自動繪製圖表與VB之互動final.xls"
'此檔案必須在指定之硬碟中確實存在
SetxlsApp=CreateObject("Excel.Application")
xlsApp.Visible=True
SetxlsWorkBook=xlsApp.Workbooks.Open(strFileName)
'開啟VB用函數資料檔new.xls工作表
SetMySheet=xlsWorkBook.Worksheets(1)
CallBlendinF(NdataType,NdataEach,Ut(),FF())
'呼叫產生圖表資料之程序
ForI=1To1'NdataEach
'資料Ut()匯入工作表Cells(7,
I)儲存格中
MySheet.Cells(7,I).Value=Ut(I)
NextI
ForJ=1To1'NdataType
'資料FF()匯入工作表Cells(J
+7,I)儲存格中
ForI=1ToNdataEach
MySheet.Cells(J+7,I).Value=FF(J,I)
NextI
NextJ
utMAX=-9999999#
utMIN=9999999#
ForI=2ToNdataEach
'求Ut()最大最小值
utTpt=Val(Ut(I))
IfutTpt>=utMAXThenutMAX=utTpt
IfutTpt
延伸文章資訊
- 1Excel VBA 小程式代客撰寫開發 - 蝦皮購物
開發環境:Win10 + Excel 2016 程式相容:Excel 2010、2013、2016 請注意: 此商品具備以下性質,依據《消費者保護法》規定屬於不適用鑑賞期之例外商品,不適用7天鑑...
- 2專業Excel程式撰寫
Home; 關於Excel工作室; 服務內容; 案例展示; 影片展示; 常見問題; 聯絡我們. 您每天花很多時間在Excel上面嗎? 我們提供一個按鈕就完成您所有複雜的運算比對.
- 3Chapter 01 EXCEL VBA 程式設計基本介紹
Access、Excel、PowerPoint、FrontPage和Outlook等. 程式中的解決方案。 Page 4. 結束. 什麼是VB. VB(Visual Basic ) ...
- 4如何使用Excel試算表作程式資料輸入
Excel是一套智慧型電腦試算表(Spread Sheet),可以使用在工程計算、資料統計、資料排序、圖表製作,甚至於股票分析、公司資產及庫存分析、商業或營建工程等管理決策分析 ...
- 5EXCEL VBA從頭來過-基本語法(上篇) - 張凱喬
是一種Windows 下的巨集程式語言其語法承襲傳統的Visual Basic 在微軟Office 之中的各種軟體(如Word、Excel 等) 都可以直接使用,不需要另外安裝.