昱得資訊工作室
麻辣學園
歡迎光臨, 訪客. 請先 登入註冊一個帳號.
您忘了 啟用您的帳號嗎?
2009-01-07, 06:31:14
世界展望會助學計劃
首頁 說明 登入 註冊 贊助論壇 想當作者?
新聞: 會員注意!!麻辣家族討論區[通用版規],請詳閱!!


+  麻辣家族討論區
|-+  MS Office 系列
| |-+  EXCEL
| | |-+  Excel程式區 (版主: hsieh)
| | | |-+  希望學習VBA (學習方式及編程技巧)
0 會員 以及 1 訪客 正在閱讀本篇主題. « 上一篇主題 下一篇主題 »
頁: [1] 向下 列印
作者 主題: 希望學習VBA (學習方式及編程技巧)  (閱讀 4467 次)
ms.kuo
中學生
*
離線 離線

文章: 12


希望學習VBA (學習方式及編程技巧)
« 於: 2005-04-22, 23:23:23 »

leonchou版大:
一直希望能從此處學習VBA寫作技巧,但在吾等因半桶水及英譯不懂之下該如何學習起希望才能得事半功倍之效果望能指教
« 最後編輯時間: 2005-04-23, 20:23:05 由 leonchou » 已記錄
leonchou
論壇維護群
*
離線 離線

文章: 1204


Re: 希望學習vba
« 回覆文章 #1 於: 2005-04-23, 16:02:33 »

這個題目很大...

請先從本版的FAQ與精華連結開始看起,
有什麼問題再討論吧。
已記錄

oobird
凸槌的木工
論壇維護群
*
離線 離線

文章: 4679


Re: 希望學習vba
« 回覆文章 #2 於: 2005-04-23, 16:29:28 »

建議:首先要有一本書,這本書不要買太深的,看不懂也是白買。
由錄製開始,經由錄製可認識很多程式碼及寫入方式,因為是自己錄的,較容易看懂說些什麼。
然後再試著刪掉一些沒用的序述。逢到須要變量判斷不知怎麼寫時,先用定址錄製,再請教人家如何改。
已記錄

結廬待慧君
ms.kuo
中學生
*
離線 離線

文章: 12


Re: 希望學習vba
« 回覆文章 #3 於: 2005-04-23, 19:31:33 »

感謝leonchou板大及oobird大的教導和提示
看樣子應好好k點書不可

« 最後編輯時間: 2005-04-23, 20:23:43 由 leonchou » 已記錄
leonchou
論壇維護群
*
離線 離線

文章: 1204


Re: 希望學習VBA (學習方式及編程技巧)
« 回覆文章 #4 於: 2005-04-23, 20:34:25 »

VBA的寫作技巧,我在一些討論區發表過了。
以下再做點補充整理,給新手參考。

VBA的寫作技巧與增進效能

經由錄製產生的巨集,通常程式碼都會含有很多 Select,甚至往後自己寫的程式也習慣用一堆 Select。寫程式的人以為必須 Select 一個物件後才能對它做處理,但這是 [錄製巨集] 誤導的錯誤觀念 (自己也沒有徹底了解語法),而且是造成巨集執行效率不佳的原因之一。

一、數數看你的程式裡有多少 "Select" ?
除非程式就是要依使用者選取的物件來做動作,否則 Select 和 Selection 都是多餘的.
◎ 標準的物件控制語法:
  物件.方法 (例如 Range("A1").Copy)
  物件.屬性 = 值 (例如 Range("A1").ColorIndex = 15)
而不是一定要先 Select 物件然後再對 Selection 做動作.

舉例而言,你要複製 Sheet1.A1 的值到 Sheet2.B1 --
 Range("A1").Copy
 Sheets(2).Select
 Range("B1").Select
 Range("B1").PasteSpecial xlPasteValues
其實可以這麼寫 --
 Sheets(2).Range("B1") = Sheets(1).Range("A1")
如果內容與格式都要複製,可以這麼寫 --
 Sheets(1).Range("A1").Copy Sheets(2).Range("B1")

不要看這沒什麼,你的VBA觀念和程度能否更進一步,這是很重要的一點。

二、關閉螢幕更新 (Application.ScreenUpdating)
程式裡做的動作越多,螢幕更新的問題就越明顯。例如選取了儲存格、選取物件、複製、貼上、切換工作表... Excel 都會改變焦點 (Focus). 每改變一次,就是一次螢幕更新。想想看,在一連串的螢幕更新之中,不但令使用者眼花撩亂,程式執行的整體效能也會下降。

這與減少 Select 是一體兩面的事,其實很多選取儲存格、選取物件、複製、貼上、切換工作表... 的動作都是不必要的。只要技巧用的好,ScreenUpdating 幾乎可以束之高閣。

三、過多/不必要的迴圈也會降低執行效率
迴圈 (如 For...Next、Do...Loop等等) 是很重要的寫作技巧之一,它能大幅簡化程式中重複的動作,而且是錄製不出來的。
這裡所謂不必要的迴圈是指處理的範圍太大,浪費過多時間。例如
For Each cell In Columns(1)
 ......
Next
For Each cell In [A1:A65536]
 ......
Next
以上兩個迴圈都是處理 A 欄 6 萬多個儲存格。
說實在的,連幾千個Cell我都有點擔心了,何況幾萬個 -- 有必要嗎??
何不判斷好資料的範圍再來做迴圈 --
For Each cell In Range([A1], [A65536].End(xlUp))
 ......
Next

參考: 如何判斷資料範圍
http://gb.twbts.com/index.php/topic,315.0.html
http://gb.twbts.com/index.php/topic,584.0.html

四、釋放物件變數佔用的記憶體空間
在這裡尤指對應用程式(Appliation)的引用與存取,下例從Word表格取回資料至Excel工作表 --

Sub get_word_table( )
Dim wrdApp As Object
Set wrdApp = CreateObject("Word.Application") '建立引用Word應用程式的物件
Set wrdDoc = wrdApp.Documents.Open("D:\Temp\ole_test.doc") '引用Word文件
With wrdDoc.Tables(1)
 For r = 1 To .Rows.Count
  For c = 1 To .Columns.Count
  Cells(r, c) = .Cell(r, c)
  Next c
 Next r
End With
wrdDoc.Close 'close the document
wrdApp.Quit 'close Word
Set wrdDoc = Nothing '釋放物件變數
Set wrdApp = Nothing
End Sub

初學者常常會忽略最後兩句,如果不寫雖然不會影響程式的運行,但從記憶體管理和效能控制的角度而言,這是個很不好的習慣。

當省則省,省的是多餘重複的程式碼;
當用則用,用的是不可或缺的程式碼。


大家認為有不足或疑問之處,歡迎提出補充和討論。
已記錄

paul70
訪客


電子郵件
Re: 希望學習VBA (學習方式及編程技巧)
« 回覆文章 #5 於: 2005-04-26, 17:10:24 »

請問leonchou大大

我錄了一個巨集,不知能不能改的簡單點?謝謝^^
 Sheets("Day").Select
 Range("A1").Select
 Selection.Copy
 Sheets("資料").Select
 Range("A65536").End(xlUp).Offset(56, 0).Select
 Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
     SkipBlanks:=False, Transpose:=False
 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
     :=False, Transpose:=False
已記錄
leonchou
論壇維護群
*
離線 離線

文章: 1204


Re: 希望學習VBA (學習方式及編程技巧)
« 回覆文章 #6 於: 2005-04-26, 19:17:51 »

請問leonchou大大

我錄了一個巨集,不知能不能改的簡單點?謝謝^^
...

這篇主題的版面不是用來解題的,
其他有相同需求的人請另發主題,下不為例了。


像這題也請對照上面所說標準的物件控制語法,
如果看不懂再針對不懂之處提問。

簡化之後 --

Sheets("Day").[A1].Copy Sheets("資料").[A65536].End(xlUp).Offset(56, 0)

雖然論理上應排除格式與值以外的屬性而不是完全複製,
不過實務上通常不需考慮到這麼細節。
已記錄

paul70
訪客


電子郵件
Re: 希望學習VBA (學習方式及編程技巧)
« 回覆文章 #7 於: 2005-04-26, 19:27:39 »

謝謝leonchou大大
我是初學者
還要多向各位學習
感恩∼
已記錄
jerick
訪客


電子郵件
Re: 希望學習VBA (學習方式及編程技巧)
« 回覆文章 #8 於: 2005-05-03, 15:43:46 »

請問有無初學者可閱讀的書籍,謝謝:)
已記錄
yahawa
小學生
*
離線 離線

文章: 2


Re: 希望學習VBA (學習方式及編程技巧)
« 回覆文章 #9 於: 2006-05-09, 17:14:56 »

小弟個人學EXCEL的過程,提出來和大家分享,希望對後進能有助益。也希望真正的高手大大,若知道更好的學習路徑,也能提出來分享一下。

用EXCEL的VBA之前,先要會EXCEL大部份的功能,這大概花了我一年的時間,因為小弟的統計學功力是三修,程度差到可以。等到會活用EXCEL後,學VBA就比較容易。至少看到那些陌生的英文指令,不會連執行出來,都還不知道它的作用是什麼!?

學習VBA的過程:
1.錄製巨集;
2.將巨集的內容,改成比較像是用程式碼的寫法,就是前面大大說的「標準化」。這部份,請隨時用關鍵字去查Help,然後一步一步改。

自然地,修改的過程,我們就可以為程式加入一些彈性,或是分離出一些常用的SUB或Function。然後就越來越厲害了。

記得當初學EXCEL和學VBA,就是靠HELP!當然,遇到沒頭緒的問題,最簡單的,就是「錄製巨集」,就會知道使用的物件、方法和屬性是什麼了。至於坊間的書,我是覺得不如HELP來得完整,也沒辦法直接用關鍵字搜尋。

至於怎麼把VBA寫得漂亮。那還是要學習完整的語言,靠開發一套程式或軟體,來建立完整的觀念。那VBA才會寫得更漂亮。但到了那個時候,或許您反而會選擇用VBA直接呼叫已編譯的程式,而不是使用VBA來撰寫自訂功能。
已記錄
頁: [1] 向上 列印 
« 上一篇主題 下一篇主題 »
自訂搜尋
跳到:  

本頁花了 0.344 秒, 以及 20 次的資料庫查詢.