2008年10月23日星期四

懶人計劃 2 - 自動製作文件進化版 PART 04 - 尋找條件 if then else ~

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

~ 聲明事項 ~

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

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

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

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

Picture



大家好嗎 ~ 這一回要開始寫程式囉 ~~~

如果大家有想過上一次我給你的提示 , 那這一章在開始之前 , 你應該也嘗試過自己動手做了 ~

最初學習的時候 , 我有給你說過 , 其實電腦也很笨的 , 你不叫它做 , 它就什麼也不做 , 你要它做 , 它就什麼也會做 , 只是你要先告訴它怎樣做 . 所以 , 我們第一件要做的事情 , 就是要利用程式碼 , 告訴電腦要怎樣做 .

第一 , 上次我們增加了 " 已打印 " 和 " 打印日期 " 這兩個東西 , 這兩個東西的資料 , 理論上來說是電腦加上去的 , 看的也只是電腦 , 不是使用者 .


( Pic4_1 )

按照上一回所說的條件 , 和之前的準備功夫 , 第一件要做好的事 , 就是要告訴電腦 , 條件在那裡 .

看一看上面的圖 , " 已打印 " 和 " 打印日期 " 分別是 "H" 和 "I" , 條件的位置已經知道了 , 之後我們來想一想上次給的提示 : 如果 xxx 成立 , 就進行 xxx , 否則就進行 xxx . 英文是 if ~ then ~ else . 也就是說 : 如果 " 已打印 " 的值出現 "Y" , " 打印日期 " 有記錄 , 那就不用打印 . 兩個都沒有記錄的話就要打印 .

條件有了 , 尋找的方法都有了 , 那麼 , 現在就開始動手把 VBA 程式做出來吧 ~

在懶人計劃 1 的時候 , 大家應該明白到如何讓電腦分辨出條件是否成立吧 , 今次 , 我們的第一個任務 , 就是教電腦怎樣才是條件成立 . 上面有說過 , 今次的衡量條件是 , 只要記錄 " 已打印 " 和 " 打印日期 " 都沒有資料 , 就給我把文件打印出來 . 就是這麼簡單 , 如果我們要告訴電腦 , 請你記得一件事情 : 電腦是很笨的 !

對 , 就是要你抓住它的手 , 一步一步的教它向前走 . 有沒有發覺 , 你用幾千塊買了一台高頻低能回來 ?? 哈 ~ 當然 , 程式完成後 , 它就不是高頻低能 , 而是終於有點實用價值 ~

好吧 ~ 廢話又太多了 ~ 來 , 開始吧 ~

確定條件成立的方法 :

if Worksheets("Summary").Range("H??").value ="Y" and worksheets("Summary").Range("I??").value <>""

簡單地解釋一下這句是什麼東西 , 如果 SUMMARY 頁面的 H?? 的值是 Y 和 SUMMARY 頁面的 I?? 不是空白 .

開始明白了吧 ~ 配合一下之前說過的 , IF 之後是 THEN 之後是 ELSE ( IF ~ THEN ~ ELSE ~ ) , 這次 , 我們只需要用到 IF ~ THEN ~ 就可以了 . 不過 , 由於條件多於一個 , 所以 , 中間多了一個 AND , 目的就是要告訴電腦 , 要多條件成立的情況下才做 .

等等 ! 上面說的是不是有問題 ?? H 是記錄 " 是否已打印 " , I 是記錄 " 打印日期 " , 那麼 , 上面的程式碼不就是廢話了嗎 ?

呵呵呵 ~ 當然囉 ~ 我可不會便宜你的 ~ 你要懶嘛 ~ 就要自己學會技術哦 ~ 哈哈哈哈哈 ~

習題 !!!!

上面的是例子 , 你要做的 , 就是寫一句當 " 已打印 " 沒有記錄 , " 打印日期 " 又沒有記錄的程式碼 . ( 只要你細心地想一下就會想到了 , 其實是很簡單的 XD )

下一回 , 我們就跟上次的懶人計劃 1 一樣 , 不廢話 ( 又是小一點吧 ~ 哈哈 ~ ) , 直接來寫程式 , 然後 , 就再一次把你每天都在重複中步驟一次過消滅 ~ 讚美吧 ~~~~~~~~

哈 ~~~ 利路亞 ~~~ 哈 ~~~ 利路亞 ~~~ 哈利路亞 ~~~ 哈利路亞 ~~~ 哈利 ~~~~ 路亞 ~~~

2 留言:

匿名 說...

請問我有兩個檔案,一個是"主檔",記錄資料如下:
編號 名稱 庫存 銷售量
001 AAA 50
002 BBB 100
003 CCC 90
004 DDD 80
005 EEE 70

另外一個"銷售檔"記錄資料如下:
編號 消售量
001 5
003 10
004 15

請問要如何做可以將"銷售檔"的[銷售量]資料自動套入"主檔"同編號內的[銷售量]欄呢?期盼版主能解惑,感激不盡!

ps.資料筆數約1千多筆

匿名 說...

您可以參考一下
說明:
◎ 巨集 寫在 主檔.xlsm
◎ 銷售檔.xlsx ----> 過帳前 ---> 把 每個編號 的 銷售量 彙總 (一個編號 只有 一個銷售量)
----> 每個月都新增一張工作表,
工作表名稱:2009_09 ---> 表示2009年9月份銷售量彙總
◎ 開啟 主檔.xlsm 及 銷售檔.xlsx
◎ 在 A2 及 B2 輸入工作表名稱
◎ 按過帳的 button (已經指定" 銷售數量與主檔合併"巨集)

Dim s As Integer
Dim m As Integer
Dim totalRec_s As Integer ' 總列數-銷售檔
Dim totalRec_m As Integer ' 總列數-主檔
Dim WorkSheetName As String ' 工作表名稱
Dim WorkSheetNameA As String ' 工作表名稱
Dim productNo_s As Integer ' 銷售檔的編號
Dim productNo_m As Integer ' 主檔的編號
Dim salseAmount As Integer ' 銷售檔的銷售數量

Sub 銷售數量與主檔合併()
'
' 銷售數量與主檔合併
'
' 把[主檔.xlsx 的 "銷售檔過帳"工作表 的 "B2"儲存格]作用儲存格
' 把"B2"儲存格的內容放到WorkSheetName變數中
' 把"A2"儲存格的內容放到WorkSheetNameA變數中
Windows("主檔.xlsm").Activate
Sheets("銷售檔過帳").Select
WorkSheetName = Range("B2").Text
WorkSheetNameA = Range("A2").Text
' 選取 "2009"工作表 的 "D1"儲存格
Sheets(WorkSheetNameA).Select
' 清除D欄內容, 才不會與新的內容混在一起
Columns("D:D").Select
Selection.ClearContents
' 把 WorkSheetName變數內容+"_銷售量" 放到 "D1"儲存格, 作為欄位名稱
Range("D1") = WorkSheetName + "_銷售量"
' 找出 "主檔.xlsx" 的總筆數-->totalRec_m
Range("A1").Select
ActiveCell.End(xlDown).Select
totalRec_m = ActiveCell.Row

排序_A ("D" & totalRec_m)
'========================================
' 找出 "銷售檔.xlsx" 的總筆數-->totalRec_s
Windows("銷售檔.xlsx").Activate
Sheets(WorkSheetName).Select
Range("A1").Select
ActiveCell.End(xlDown).Select
totalRec_s = ActiveCell.Row
Range("A1").Select

排序_A ("B" & totalRec_s)
'========================================
' 比對產品編號,
' 沒有檢查 銷售檔 的 編號---->是否在 主檔的範圍內,
' 沒有檢查 銷售檔 的 銷售量---->是否超過主檔的庫存數量
For s = 2 To totalRec_s
' 把銷售檔的編號 放到 productNo_s
Windows("銷售檔.xlsx").Activate
Sheets(WorkSheetName).Select
Range("A" & s).Select
productNo_s = Range("A" & s).Text
salseAmount = Range("B" & s).Text

For m = 2 To totalRec_m
' 把主檔的編號 放到 productNo_m
Windows("主檔.xlsm").Activate
Sheets(WorkSheetNameA).Select
Range("A" & m).Select
productNo_m = Range("A" & m).Text

' 如果 編號 相等, 就把 銷售量 放入 主檔的D欄
If productNo_s = productNo_m Then
Windows("主檔.xlsm").Activate
Sheets(WorkSheetNameA).Select
Range("D" & m) = salseAmount
End If
Next
Next
Range("A1").Select
End Sub
'========================================
'========================================
Sub 排序_A(pos) ' pos=最後一個儲存格
' 排序A欄 Macro
Dim s As String
s = "A2:" & pos
Range(s).Select
Range("A2").Activate
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlStroke, DataOption1:=xlSortNormal
End Sub
==============
我是阿佩,如需檔案,請留下E-mail,我會寄給你的.我用的版本是office 2007, 如果要存成office 20033 要跟我說.
祝工作順利

最新回應

Loading...

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


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