2008年11月21日星期五

懶人計劃 3 – 自動製作文件的二次進化 PART 08 – 記得要修改哦 ~~

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

~ 聲明事項 ~

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

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

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

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

Picture



哈哈哈 ~ 之前的習題很簡單吧 ~ 不過好像反應不太好似的 , 可能是編程不是每個人都喜歡吧 ~ 有時候我也覺得滿煩的 ~ 哈哈 ~

好了 ~ 現在先處理好 INVOICE 頁面的設定吧 ~


( Pic8_1 )

看到圖片嗎 ? 圖片中 , 紅色圈中的位置是我們之前加上去的 , 你不會想被人看到你打印出來的東西有這些奇怪的符號吧 ~ 行 G 的位置還好 , 程式會把他刪掉的 , B 的那個真的受不了 … XD

最簡單又最直接的方法 ~ 來 ~ 看我的利害 ~


( Pic8_2 )

利害吧 ~ 直接把文字的顏色改成白色 ~ 哈哈 ~ 利害利害 ~ 我真佩服我自己 ~ 哈哈 ~

記得哦 ~ 跟之前的一樣 , 先設定好 INVOICE 頁面才可以給其他人用哦 ~ 還有就是千萬要提醒你的使用者 , 不可以修改任何的東西 ~ 這個可是絕對的哦 ~

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

好 ~ 這次的更新完成了耶 ~ 哈 ~ 鬆一口氣呢 ~ 還以為這個麻煩的問題要把我打敗了 ~ 哈哈 ~

不過說真的 , 解決程式上的問題 , 比起把解決問題的方法和過程用文件打一次出來簡單多了 ~ =_=”

再補充一下關於這個設計的使用問題 , 這個設計在使用時的限制是 , 必須在每一個 REF# 所包含的資料中輸入 REF 2# , 否則程式會出問題的 , 這個必須要緊記 ! 另外 , 如果你有嘗試過運用 VLOOKUP 這個函數 , 其實之前的這些改變可以是全部都多餘的 , 因為你只需要調整一下 VLOOKUP 的查詢位置就可以做到這個效果 , 方法是 , 把 “ 已打印 ” 和 “ 打印日期 ” 往後移 , 之後在識當的位置加上輸入第二個資料的位置 , 然後在 INVOICE 頁面中 , 修改一下 VLOOKUP 函數式的查找位置就行了 . 不過 , 因為在 SUMMARY 頁面所記錄的是整個倉庫或者是出貨的數據 , 如果記錄的方式那麼奇怪的話 , 當你要查看一共出了什麼貨物的時候 , SUMMARY 頁面的記錄就會讓你看得快瘋 , 嗯 … 就是因為這個問題 , 我才會一次過把程式刪掉再寫 … 嗯 …

這次的教學可能比較複雜 , 因為我都快不知道自己在寫什麼了 ~ 哈哈 ~ 這次就到這裡吧 ~ 給點支持嘛 ~~~~ 哈哈哈哈 ~ 打個招呼就是最好的支持哦 XD

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

謎之音 : 完了 !? 那上一次習題的答案呢 !? 快告訴我 ~

我說啊 ~ 你不貼你的答案出來 , 我是不會告訴你的 ~

謎之音 : 那我怎知道你有沒有寫 , 有沒有答案 , 可能你只是等人來幫你解決問題罷了 ~

我說啊 ~ 我能給出提示 , 這就正好證明了我並不笨吧 ~~~ 雖然有時候都有一點點 …

謎之音 : 那你告訴我哦 ~

你貼你的出來 , 我就告訴你我的解決方法 ~ 哈哈哈哈 ~ 不貼就不要問我拿答案了 ~ 呵呵呵呵呵 ~~~~~~~~~~

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

21 留言:

匿名 說...

真的是很好的敎學文章,看完了之後,引發了我學 Excel VBA 的興趣。
其望着下一篇新的文章。

威廉先生 說...

哈哈 ~ 謝謝支持 ~

因為最近工作比較忙 , 所以嘛 ~ 下一編教學可能要遲一點才有空寫了~

如果你在學習上遇上問題的話, 也可以來問哦 ~ 有討論才會有進步嘛 =)

bkchu 說...

感謝威廉
剛好路過,才發覺這裡正式我想學得,
先打聲招呼,
正在慢慢閱讀中.

威廉先生 說...

HI~ BKCHU ~

謝謝支持 ~ 有疑問可以問哦 ~ 希望我的文章幫到你吧 =)

匿名 說...

我是Horien

謝謝威廉先生的文章,讓我對VBA產生興趣並學習自行開發.真的很期待下一篇的文章.

另想請教excel中的 formula."VLOOKUP"在VBA中應如何表達,煩請多多指教!!

威廉先生 說...

HIHI ~ Horien~

恭喜發財 ~ 哈哈 ~

對於你所指的問題 VLOOKUP 在 EXCEL VBA 中要怎樣表達嘛 ... 其實 , 在我個人的開發經驗當中 , VLOOKUP 的運作模式是當某個條件成立 , 就找出相應位置的資料 , EXCEL VBA 程式碼大概是 :

IF 什麼什麼 ( 一個變量 ) = 什麼什麼 ( 指定值 ) THEN WORKSHEETS("SHEET1").RANGE("A1").VALUE = 什麼什麼 ( 某一個值

情況就是這樣了 , 不過 , 你也可以嘗試一下 , 利用 EXCEL VBA 在程式碼上動一點手腳 , 利用程式碼在報表的指定儲存格中增加 VLOOKUP 等等的 FORMULA .

當然 , 這個方法其實我有時候也會用到的 , 當中有不少的東西要記住 .

第一 : 一句公式有可能要先分開再合併
第二 : 小心注意在 VBA 程式碼中 " 這個符號
第三 : 當同一個報表的運算公式太多 , 報表打開時就會變得很慢了 ( 忘了在那編文章中有提過 XD )

有疑問的話可以隨時再問哦 ~ 有交流才會有進步 :)

匿名 說...

謝謝威廉先生的建議,

由於現階段我在報表中的公式太多,所以太慢.我會再一試.謝謝

真的很期待你的新教學:)

HORIEN

威廉先生 說...

Hi Horien~

其實也不算是什麼建議嘛~ 只是一點經驗分享而已~ 哈哈~ 因為我自己增經測試過利用不同的 FORMULA 來使報表自動化, 但是得出來的結果是 : 計算速度太慢 .... ( 當時測試是單一頁面內有接近 4 千條不同的公式 XD )

結果我再一次用 VBA 把公式加進報表內, 不過, 有所改變的地方是, 當公式得到結果後, 就把得出的值來取締原來的公式, 而測試結果是 : 程式運作速度提高 , EXCEL 檔容量減少 ( 注意哦~ 其實 EXCEL 檔大於 1.5MB 開始, 很大機會出問題的 , 所以檔案容量降低會是一件不錯的事情 ^^ )

有疑問可以拿來一起研究哦 :) 多交流才會更進步嘛 :)

匿名 說...

您好威廉先生,

我想問Userform1.show之後,如果想Userform1.消失,應用甚麼?找不到:(

Horien

威廉先生 說...

Hi Horien ~

不要灰心哦 :) 很簡單的啦 ~ 遇到多點問題才會學習到更多東西嘛 :)

只要你把 SHOW 換成 HIDE 就可以了~ 快點試試看吧 :)

匿名 說...

威廉先生您好,

未尋找到解答, 請問是公佈了還是還沒

小的測試是如下

Private Sub CommandButton1_Click()

Worksheets("Summary").Range("B3").Select
ActiveCell.End(xlDown).Select
LastB = ActiveCell.Row
Worksheets("Summary").Range("I3").Select
ActiveCell.End(xlDown).Select
LastI = ActiveCell.Row
If LastB = LastI Then GoTo MsgShow Else GoTo Start

MsgShow:
MsgBox ("沒有資料待處理!麥來亂!")
GoTo Finish

Start:
Worksheets("Summary").Range("I4").Select
If Worksheets("Summary").Range("I4").Value = "" Then FirstUse.FirstTimeUse Else SecondUse.SecondTimeUse


Finish:
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

威廉先生 說...

答案其實是沒有公佈過的~ 哈哈~

看你的程式碼 , 你應該測試過了 :) 我雖然沒有做測試 , 但是你的程式碼是應該可行的 :) 不過 ~~~~ ( 別緊張 XD ) 如果程式是第一次執行的話 , 這一組程式碼就不能正常運作了~ 所以要記得注意哦 ~

哦 ~ 還有 ~ 記得要習慣寫註解 ~ 不然的話可能自己都會忘了那些程式碼在做什麼呢~ :) 記得哦 ~ 註解很重要 :)

匿名 說...

威廉先生 您好

在下是上篇留言者
還不太懂第一次執行不能正常運作的意思 @.@a
能否開示一下

謝謝提醒,註解註解

威廉先生 說...

:) 其實很容易理解的, 首先, 你要記得 END(XLDOWN) 的運作原理, 之前有教過的, 細心找一找吧 XD ( 沒辦法 , 要多騙幾個顯示量 XD ), 簡單的解釋一下, END(XLDOWN)是用來找出最後一個有數據的儲存格的東西 , 當整個程式 " EXCEL 檔 " 第一次執行的時候 , 報表內跟本沒有東西 , 而你的程式碼是從儲存格 B3 開始往下找, 什麼都沒有輸入過的話, 找到的位置就會變成儲存格 B65536 , 同樣地 I 的也是一樣 , 當大家都是 65536 , 程式還是會繼續執行的 , 所以要記得哦 ~ 這個方法不要在第一次執行時使用 , 否則肯定會出問題的 :P

( 想一想 , 好像之前有點理解錯誤 , 所以使你誤會了呢~ 哈哈~ 不好意思哦 ~ 閃 ! XD )

匿名 說...

威廉先生 您好

你的VBA文章對我好有用.
我之前冇用過VBA.只係係excel入面用VLOOKUP 同 IF .
睇完你的VBA文章後,學到在VBA中可以有好多變化.For next同do loop until對初學來說真的好有用^^

我有個問題想問威廉先生
range("A1").value="today()"同
range("A1").formula="today()"
有什麼分別??

威廉先生 說...

Hi 伝 ,

剛下班回來就看到你的回應了 ~ 先要講一句謝謝 :)

首先 , 如果你的程式碼是 ="today()" , 那麼儲存格 A1 的值就會是 today() , 並不會變成當日日子

而你的第二句程式碼又會變成什麼呢 ?? 答案就是錯誤了 :)

RANGE("A1").FORMULA = "=TODAY()"

你的程式碼小了一個等號 :)

不過有一件事我要說明一下 , 其實理論上來說 , 這個種把函數式加進儲存格的方法 , 理論上來說都是可行的 , 不過我比較偏向於用 .FORMULA 這種做法 , 因為一方面是比較合理 , 另一方面是查看程式碼時會比較方法 , 第三是這是通常做法 :)

有空再一起研究研究 :)

先去睡一下 , 過幾天有空我會再過來的 :)

匿名 說...

hi 威廉先生

請問可以教下其他vba碼的用途嗎?

我見到人地d碼有好多都有 dim
eg.
arr Dim i&, arr(1 To 240000) As Long
For i = 1 To 240000

arr(i) = Rnd * 1000000

Next i

見到其他人寫do loop 沒有end do
不會有問題嗎?
Do
xxxxxxxxx
Loop

威廉先生 說...

Hi 伝 ,

其實 dim 是用來定義一些變量的 ... 嗯 ... 類型吧 , 類型包括很多種 , INTEGER , STRING 等等 , 我都不知道用中文要怎麼寫 ~ 哈哈 ~

而你所提供的 dim i & , arr(1 ..... )

這是一個 array ... 嗯 ... 又一個中文難題 ... 要想一想再可以跟你詳細解釋了 XD

另外你所提到的 DO LOOP 沒有 END DO 問題嘛 ... 嗯 , 這個可能是我之前的教學文章都沒說過的吧 ... 嗯 ...

其實 DO ~ LOOP ~ 這個傢伙本身應該是 DO ~ LOOP UNTIL 吧 , 嗯 ... 應該是的 , 而 LOOP UNTIL 其中的作用就是把循環結束 , 打個比喻 ~

A = 1
DO
A = A + 1
LOOP UNTIL A = 100
MSGBOX " DONE "

當 A 的值等於 100 那這個 DO ~ LOOP ~ 就結束了 , 然後就顯示訊息 " DONE " , LOOP UNTIL 就是重複操作直至條件成立為止的意思 , 所以就不會出現 END 這個傢伙了 .

而另外 , END 的功能其實是程式碼結束的意思 , 只有程式碼結束才會使用 END 的 , 你可以試一下 , 造一個使用者介面 , 然後加一個按鈕 , 按鈕內的程式碼只加上 END 三個字 , 當你執行這個介面時 , 只要一按下那個按鈕 , 整個程式就結束了 :)

就是這樣了 , 有疑問的話可以再發問 , 我能解答的一定回 :)

匿名 說...

請問威廉先生可以出1個dim的教學嗎?

还有,如果用函數做到的都不會用vba,
因為用函數可以馬上出答案.

昨天學了1個好有趣的東西
{=SUM(B1:B2-A1:A2)}

威廉先生 說...

Hi 伝 ,

關於 dim 的教學嘛 , 這個是一個好題目 , 有空一定寫 , 不過最近都比較忙 , 所以都很久沒寫教學文了 XD

我簡短地說一些基本的吧 , DIM 是用來定義一些變量類型的方法 , 而之前有提過的 INTEGER 和 STRING 類型其實是不同的 , INTEGER 是指整數 ( 好像是的 ... 嗯 , 不太記得 ... 哈 ) 而 STRING 是文字串 , 類型不同所用來記錄的變量就當然不同了 , 比喻說 , 你要使用者輸入名字 , 名字是字串 , 而不是數字 , 所以變量類型就要設定為 STRING , 等電腦知道這個變量要記錄的是文字而不是數字 ( 不過我自己很多時候都不會故意定義的 , 懶嘛 ~ 哈哈 ~ , 只要程式能跑就算了 ~ 哈哈 )

至於函數做到就不用 VBA 這個問題嘛 , 其實之前都有朋友問過我 , 為什麼要用 VBA 特意去寫程式呢 ?

其實是因為 VBA 能夠做到的比函數所做到的多很多嘛 , 增加工作頁 , 刪除工作頁 , 與WORD , ACCESS 等的連動等等 , 只要程式能順利完成 , 那麼工作就可以變得更輕鬆了 :)

至於函數呢 ? 如果有一些數字上的計算 , 當然是用函數方便多了 , 但是當同一個工作頁的函數公式太多 , 計算時間就會變得越來越長了 , 而檔案又會變成不合理的大容量 .

當然 , VBA 跟函數的功用有些是一樣的 , 但有些是不同的 , 我不會說那一個好那一個差 , 最重要的是 , 要學會利用 VBA 跟函數公式配合加快程式操作時間 , 這個才是真理呢 :)

我自己有一個用來工作的程式 , 當中包括了 VBA , 也包括了很多函數 , 例如 VLOOKUP , SUM , CONTENIENTE ( 好像寫錯了 ~ 忘了 ~ 哈哈 ) 很多都有 , 配合得好 , 程式就會跑得更順暢 , 更快了 :)

留意一下我的那些懶人計劃吧 :) 都是我習慣使用的 VBA 與函數的配合方法 , 參考參考 , 大家再研究研究 :)

匿名 說...

你好丫威廉先生,

我最近聽到係word中可以在指定的格中打上文字,完成之後就會按所輸入的文字自動貼至文件的指定位置上,以快速完成表格.

請問可否指點指點.
謝謝

horien

最新回應

Loading...

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


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