2008年11月19日星期三

懶人計劃 3 – 自動製作文件的二次進化 PART 05 – 第一次執行 3

| |
~ 上傳‧分享‧網賺 ~
~ 免費上傳空間‧請即申請 Freak Share ~
~ 進入後請點選左上角 注冊 ! ~

~ 聲明事項 ~

如各位想把以下本文章轉貼 , 請記得要注明出處.

本文章之內容為本人之經驗所寫, 絕無抄襲成份, 特此聲明.

由於圖片製作需時, 所以更新會比較慢.

存放圖片的 SHARE A PIC SERVER 可能讀取速度較慢, 請耐心等待.

Picture



真的沒騙排版哦 ~ 哈哈 ~ ( 多騙一句不礙事吧 ~ 哈哈哈 ~ 閃 ~~~~~ )

現在開始再說一下 , 餘下的記錄要處理的地方吧 ~ 其實只不過又是那一些什麼地方又加些什麼 “ Y ” 字作記號 , 什麼什麼又加這個減那個的 , 所以這一編就不如直接把整個第一次執行程式時的模組貼出來吧 ~

==========================================

Sub FirstTimeUse()

'設定第一個記錄位置為 4
FirstRec = 4

'選擇 SUMMARY 頁面的儲存格 B3 , 利用 ActiveCell.End(xlDown).Select 向下尋找最後一個記錄
'利用變量 LASTREC 記錄目標位置
Worksheets("Summary").Select
Worksheets("Summary").Range("B3").Select
ActiveCell.End(xlDown).Select
LastRec = ActiveCell.Row

'選擇 INVOICE 頁面 , 清空儲存格 G6 到 G15 的值 , 把儲存格 A2 的值更改為 1
Worksheets("Invoice").Select
Worksheets("Invoice").Range("A2").Select
Worksheets("Invoice").Range("G6:G15").Value = ""
Worksheets("Invoice").Range("A2").Value = 1

'列印 1 次
ActiveSheet.PrintOut from:=1, To:=1, copies:=1

'利用變量 CHECKAREA 設定重複工作次數由 6 到 15
'儲存格位置利用 CHECKAREA 變數的值自動變更
For CheckArea = 6 To 15
If Worksheets("Invoice").Range("C" & CheckArea).Value <> "" And Worksheets("Invoice").Range("D" & CheckArea).Value <> "" And Worksheets("Invoice").Range("E" & CheckArea).Value <> "" And Worksheets("Invoice").Range("F" & CheckArea).Value <> "" Then Worksheets("Invoice").Range("G" & CheckArea).Value = "Y"
Next CheckArea

'選擇 INVOICE 頁面的儲存格 G16 , 利用 ActiveCell.End(xlUp).Select 向上尋找最後一個記錄
Worksheets("Invoice").Range("G16").Select
ActiveCell.End(xlUp).Select
LastShowing = ActiveCell.Row

'利用變量 REF2TTL 計算 每一個 REF # 中所包含的 REF 2# 的數量
Ref2TTL = LastShowing - 5

'選擇 SUMMARY 頁面
Worksheets("Summary").Select

'設定變量 COUNTER 的值為 4
Counter = 4

'利用變量 LOOPCOUNT 設定重複工作次數由 1 到 變量 REF2TTL 的值
For LoopCount = 1 To Ref2TTL

'變更 SUMMARY 頁面 I 及 J 適當儲存格的值
Worksheets("Summary").Range("I" & Counter).Value = "Y"
Worksheets("Summary").Range("J" & Counter).Formula = "=today()"
Worksheets("Summary").Range("J" & Counter).Value = Worksheets("Summary").Range("J" & Counter).Value

'變量 COUNTER 的值更改為 COUNTER 的值加 1
Counter = Counter + 1

Next LoopCount

'重複工作設定
Do

'選擇 SUMMARY 頁面 A 行的對應位置
Worksheets("Summary").Range("A" & Counter).Select

'利用變量 TEMPREC 記錄現時所選擇的儲存格所記錄的值
TempRec = ActiveCell.Value

'選擇 INVOICE 頁面 , 清空儲存格 G6 到 G15 的值 ,
'變更 INVOICE 頁面儲存格 A2 的值為變量 TEMPREC 的值
Worksheets("Invoice").Select
Worksheets("Invoice").Range("G6:G15").Value = ""
Worksheets("Invoice").Range("A2").Value = TempRec

'列印 1 次
ActiveSheet.PrintOut from:=1, To:=1, copies:=1

'利用變量 CHECKAREA 設定重複工作次數由 6 到 15
'儲存格位置利用 CHECKAREA 變數的值自動變更
For CheckArea = 6 To 15
If Worksheets("Invoice").Range("C" & CheckArea).Value <> "" And Worksheets("Invoice").Range("D" & CheckArea).Value <> "" And Worksheets("Invoice").Range("E" & CheckArea).Value <> "" And Worksheets("Invoice").Range("F" & CheckArea).Value <> "" Then Worksheets("Invoice").Range("G" & CheckArea).Value = "Y"
Next CheckArea

'選擇 INVOICE 頁面的儲存格 G16 , 利用 ActiveCell.End(xlUp).Select 向上尋找最後一個記錄
Worksheets("Invoice").Range("G16").Select
ActiveCell.End(xlUp).Select
LastShowing = ActiveCell.Row

'利用變量 REF2TTL 計算 每一個 REF # 中所包含的 REF 2# 的數量
Ref2TTL = LastShowing - 5

'選擇 SUMMARY 頁面
Worksheets("Summary").Select

'利用變量 LOOPCOUNT 設定重複工作次數由 1 到 變量 REF2TTL 的值
For LoopCount = 1 To Ref2TTL

Worksheets("Summary").Range("I" & Counter).Value = "Y"
Worksheets("Summary").Range("J" & Counter).Formula = "=today()"
Worksheets("Summary").Range("J" & Counter).Value = Worksheets("Summary").Range("J" & Counter).Value

'變量 COUNTER 的值更改為 COUNTER 的值加 1
Counter = Counter + 1

Next LoopCount

'選擇 SUMMARY 頁面儲存格 I3 , 利用 ActiveCell.End(xlDown).Select 向下尋找最後一個記錄
'變更變量 FIRSTREC 的值為 I 行最後一個記錄的位置
Worksheets("Summary").Range("I3").Select
ActiveCell.End(xlDown).Select
FirstRec = ActiveCell.Row

'如果變量 FIRSTREC 的值與變量 LASTREC 的值相等便停止運作 , 否則重複 DO 到 LOOP UNTIL 中間的所有步驟
Loop Until FirstRec = LastRec

End Sub

==========================================

嘩 ~ 會不會長了點 …

好吧 ~ 不管了 ~ 繼續寫 , 因為下一編要開始講解一下 , 程式在第二次執行時的模組編寫問題 ~ 嗯 … 繼續 ~

如果你有細心地留意 , 其實在後半段的程式碼大部份都只是上半段的複製品 , 只不過是方在一個 DO ~ LOOP UNTIL ~ 的中間罷了 , 裡面的東西就不作詳細解釋了 , 留給你慢慢地細心地去想一下程式的運作原理 .

現在先講解一下關於 DO ~ LOOP UNTIL ~ 這個東西 , DO ~ LOOP UNTIL ~ 顧名思義就是 “ 做 … ( 某一段程式碼 ) … 直到 … ( 條件成立 ) … ” , 這東西很有用的 , 記得多點練習這個 ~

另外值得特別注意的是 LOOP UNTIL 的條件設定 , FirstRec = LastRec 中的 LastRec 就是在程式最初時 , 在 SUMMARY 頁面的行 B 找出來的最後一個數據 , 那 FirstRec 的值是什麼呢 ? FirstRec 這個變量的值 , 在程式開始時已經設定為 4 了~

==========================================

'設定第一個記錄位置為 4
FirstRec = 4

==========================================

然後 , 在程式執行到結尾的時候 ( 即 LOOP UNTIL 語句之前 ) , 我要求電腦去做一件事來把變量 FirstRec 的值更新一下 ( 嗯 … 好像沒跟你講過變量FirstRec 是代表著什麼吧 ~ 就是要處理的第一個記錄的位置了 ~ 之前設定為 4 是因為第一個記錄是 SUMMARY 頁面的第 4 列 ~ )

==========================================

'選擇 SUMMARY 頁面儲存格 I3 , 利用 ActiveCell.End(xlDown).Select 向下尋找最後一個記錄
'變更變量 FIRSTREC 的值為 I 行最後一個記錄的位置
Worksheets("Summary").Range("I3").Select
ActiveCell.End(xlDown).Select
FirstRec = ActiveCell.Row

==========================================

執行完這幾句程式碼之後 , 變量 FirstRec 的值就順利變更了 ~ 當變量FirstRec 的值與變量 LastRec 的值相同 , 就可以完成工作 , 嗯 , 這句不用解釋了吧 ~

好 ~ 這一回就先到這裡 , 下一回就開始編寫 “ 程式在第二次執行時的程式碼 ”

記得跟我打個招呼哦 ~ 否則我只是在自言自語的話 , 我可能會把心一橫 , 就把這個站關了 ~ 哈哈 ~

1 留言:

麥克弗™ 說...

謝謝威廉老師,你的『白話文』真的讓初次接觸VBA的我很快就上手了。
不過,我想陸續就會有一堆疑問開始跑出來了,到時在麻煩你指教一下囉

最新回應

Loading...

有事啟奏‧無事閒聊 ~ 哈 ~


米高積遜全復刻 哈利波特 Michael Jackson 妙麗 金曲獎 MJ 迈克尔杰克逊其实没有死!美国CBC电台已证实 哈利波特 hongkong168 蓮花河畔景苑 盧廣仲 鄧麗欣 不想放手New! 陳珊妮 方大同 巨乳排球 痞子英雄 23 東風 蕭閎仁 米高積遜全復刻 上海 倒塌 南王姐妹花 周杰倫 變形金剛2下載 michael jackson 去世 天文台 米高積遜 花拉科茜 天圖佈局 浪卡 耳廓狐 神探俏嬌娃 韶关旭日玩具厂 譚曉風 严妍 僧老少閒 地下天文台 金泰浩 百老匯 巨乳排球 陳振聰 柯柏文 aika 麥可傑克森