大頭照當EXCEL工作表的資料庫.讓別的表來抓資料.

大頭照當EXCEL工作表的資料庫.讓別的表來抓資料. 請參考這題的架構與檔案: 取得知識圖示檔2.xlshttp://tw.knowledge.yahoo.com/question/question?qi... 新增一個工作表叫WK格式A:URLB:KIDC:將圖片抓入此處 假如方便的話.將[知識圖示檔]抓大頭照的程式改一下.讓這個工作表.形成一個資料庫.原有的都不要動.只要將新增的項次與URL往下打入.一執行就會自己往下新增.

Update:

假如能夠設計成2種功能.那最好:

一.整批的URL與KID維護:

Do While的方式

用URL或KID都可以維護.

這個用在[平時]的[整批的]來自我運作.所以是整批.

二.單一的URL與KID維護:

每次只讀一筆來做比較與運作.

這個用在與別的程式來運作.所以是一筆.

假如辦不到就不要理這部份.

Update 2:

還真是很難。都看不懂。哈!

給我時間測一測。有問題再請教!

Update 3:

WK幫忙加個暱稱好嗎_D欄_資料靠左_THANKS.

請提供要改的程式碼_以及要放在總程式碼的何處_然後我來測.或是改了_再提示改到哪些地方_以利學習.

Update 4:

是全自動的.

Update 5:

等了好久呢.賢大是不是上班族.真辛苦嚕!

經測試.可以產生暱稱了.可否幫忙指導一下.動了哪些地方.我是找到2處.如下.

但是還是無法順利執行==>我自己的問題.請教一下喔.3Q!

擷取暱稱 "WK", "D" & j, kid

Sub 擷取暱稱(ByVal SheetName As String, ByVal myRange As String, ByVal kid As String)

Update 6:

好棒喔.2位高手互動心意真誠.令人感動.謝謝啦!

Update 7:

假如大家沒意見.明日就結案嚕.真是隔行如隔山.

4 Answers

Rating
  • 世賢
    Lv 7
    10 years ago
    Favorite Answer

    1011071702349.xls

    此為全自動版本,只要在 WK 工作表輸入 url or kid 就會自動擷取 知識圖示檔 裡面的圖片,如果 知識圖示檔 裡面不包含 WK 所輸入的 url or kid 資料,便會自動至網路抓圖

    1011071702349_1.xls

    此為手動單一筆記錄更新執行版,只要在 WK 工作表輸入 kid 並執行 模組 內的 單一執行抓圖 副程式,就會自動填網址並從 知識圖示檔 中擷取圖片,如果 知識圖示檔 裡面不包含 WK 所輸入的 kid 資料,便會自動至網路抓圖

    2011-07-21 07:18:11 補充:

    是改全自動的版本還是手動單一的版本??

    2011-07-21 17:57:27 補充:

    http://dl.dropbox.com/u/14075439/knowledge/Excel/1...

    2011-07-21 18:46:40 補充:

    擷取暱稱 "工作表名稱", "哪一個儲存格存放暱稱",kid

    就只有加了一個副程式跟

    擷取暱稱 "WK", "D" & j, kid

    而已

    2011-07-22 20:22:09 補充:

    試問:用你的方式是否能夠取得回答記錄的題目名稱?

    例如本題的:【大頭照當EXCEL工作表的資料庫.讓別的表來抓資料.】

    2011-07-22 20:43:03 補充:

    發現 vbKGP.dll 放在同個資料夾下也沒辦法執行呢(執行階段錯誤 '53':找不到檔案:vbKGP.dll)

    2011-07-23 08:55:12 補充:

    一樣找不到檔案:

    https://www.dropbox.com/gallery/14075439/2/Excel/1...

    2011-07-23 22:05:27 補充:

    有的時候 ImageURL 會擷取的不完全

    2011-07-24 09:22:41 補充:

    https://www.dropbox.com/gallery/14075439/2/Excel/1...

    我是用我的 kid

    有執行數次,時好時壞(僅擷取部份)

    Excel 還會發生問題!

    本人的作業系統:Windows XP SP3

    Excel 版本:2003

    2011-07-24 09:33:40 補充:

    http://dl.dropbox.com/u/14075439/knowledge/Excel/1...

    突然發現不需要再擷取網路的暱稱即可直接在 知識圖示檔中 擷取暱稱

    原本的:

    擷取暱稱 "WK", "D" & j, kid

    改為:

    Sheets("WK").Range("D" & j) = Sheets("知識圖示檔").Range("C" & i)

    至於 擷取暱稱 的函數可以刪了

    2011-07-27 18:03:57 補充:

    是 知識圖示檔 的資料還是 WK 的資料一直新增???

    2011-07-28 19:19:38 補充:

    我測試的時候,的確有發生資料重覆新增的問題,但也就只發生那麼一次而已,所以新增資料重覆的問題的機率是很小的!

    Source(s): Excel VBA and Me
  • 10 years ago

    感謝東邪大:

    已下載.有2個檔案.但是有看沒懂.

    不知如何套入我的EXCEL VBA系列.

    可能要賢大與東邪大.TALK一下喔.

    2011-07-24 14:14:58 補充:

    好棒喔.2位高手互動心意真誠.令人感動.謝謝啦!

    追求真善美.是大家所渴望的.加油喔.希望共同找出一個最佳點.

    延五天嚕!!!!

    2011-07-28 07:38:17 補充:

    東大可能是以理論來判斷............

    我以KID=AA00000000來測試_只會增加一筆_不會一直新增_而且可以從圖片欄來自我管制_凡是空白者可以自己加程式來刪除_我想專家們給的只是原則而已_其他的就得靠自己了_我要的只是單純的EXCEL+VBA而已_因為我只會這個_其它實在真的不得其門而入_所以請您2位繼續研究_有空我會來看看的.

  • 10 years ago

    免驚,忙裡偷閒,來送個禮。

    看世賢寫了一系列抓知識檔案大頭照的程式,皆透過IE來擷取,很辛苦。

    由於個人對IE沒好感,偏愛用 FireFox,

    所以花了一點點的時間,針對這個用途,用 C 寫了個 dll 。

    直接連上YAHOO擷取,避開了IE的絆手絆腳,

    套用在你的VBA程式,可大幅縮減程式碼和執行效率。

    2011-07-22 16:00:43 補充:

    vbKGP.dll

    用途:擷取 YAHOO 知識檔案的大頭照和暱稱。給VBA使用的。

    下載 URL: http://www.funp.net/478973

    用法:

    參閱解壓後的 vbKGP.txt 說明。

    2011-07-22 18:45:53 補充:

    範例:

    Declare Function GetKgp Lib "vbKGP.dll" (ByVal kid As String, ByVal ImageURL As String, ByVal Kname As String) As String

    Sub test()

    Dim kid As String, ImageURL As String, Kname As String, BIG5 As String

    2011-07-22 18:46:17 補充:

    kid = "AF02803765"

    ImageURL = Space(256): Kname = Space(64): BIG5 = Space(64)

    Kname = GetKgp(kid, ImageURL, Kname)

    Cells(1, 1) = kid

    Cells(2, 1) = "《" & Kname & "》"

    Cells(3, 1) = ImageURL

    End Sub

    2011-07-22 18:51:58 補充:

    範例中的 BIG5變數是不相關的,我整理時沒刪乾淨,範例中出現兩處皆可刪。

    這個 vbKGP.dll 請與 xls檔放在同一個目錄(資料夾)內。

    若要放在其他位置,則要配合修改 Declare 述句。

    2011-07-22 19:47:01 補充:

    沒料到暱稱有超長的,

    如:kid 是 AA01108429 ,其暱稱如下:

    小龍-繼續敗光點數.支持知識家好友.助人是一件很快樂的事喔

    會侵犯到 ImageURL的空間。

    為預防這種例外發生,也很簡單,

    把 Kname = Space(64) 改成 Kname = Space(128)

    字串空間預留大一點,便不是問題了。

    (還好,我這個應景而寫的 dll 尚可從容應付)

    2011-07-22 22:54:39 補充:

    SORRY,忙中有錯,漏了一個被間接引用的 dll。

    已重新封包,下載URL如下:

    http://www.funp.net/620972

    解壓後,參閱 vbKGP.txt 文件說明。

    造成不便,請海涵。

    至於意見009所提,當然可以做到。

    這裡一大串和知識檔案有關問題的,理應都可做到,只是值不值得而已!

    2011-07-23 12:31:43 補充:

    把 dll 和 xls 放在同一目錄,是可順利執行的,

    但必須在EXCEL中,用 [開啟舊檔] 的途徑去擇啟你的xls程式,

    否則便會出現找不到自訂dll的錯誤。

    (我猜你可能是在 xls 檔上點擊執行,或是在EXCEL的快速開啟窗中點選的,才會找不到dll。)

    但每次這樣,又太麻煩了,所以我在說明文件中另提及,

    也可把這二個dll放在 C:\\Windows\\System32 內,

    便可不受上述之限制,隨時可找到自訂的 dll。

    2011-07-24 00:53:45 補充:

    擷取不完全的情況是有可能發生的,推測其因:

    1.YAHOO對 Cliejnt 端的 request 需求是動態回應的,有時會凸鎚。若是這種情況,再次執行便不會發生,

    2.由於我的dll在網路讀取介面設置的Buffer僅設1K Bytes,所以有可能所要的資料恰好落在邊界而導致不全。這是可以加些防錯的措施來解決,但那又牽涉到值不值得的抉擇了。

    建議你可把出錯的KID列幾個出來,我或許可找出其因。

    2011-07-24 01:09:31 補充:

    我又擴增了一個函式在該dll內,

    ==> 傳入QID,可擷取該[問題的標題] 和 [發問者的KID]。

    下載位址:

    http://www.funp.net/497375

    其他詳參其內的說明文件。

    2011-07-24 10:03:56 補充:

    若是時好時壞,那麼伺服端的問題便可能占較大機率。

    至於Excel發生問題,可能是傳入函式的參數不正常所導致,若預留字串空間不足,會造成字串溢漏,是記憶體的問題,任何程式都極可能產生例外事件。(當然我也可輕易的在程式中預防這情況發生,但在Beta版沒必要。)

    dll內函式並未額外配置記憶體,因此若發生 memory leak,主要來自不正確的呼叫所導致。就算是呼叫VBA內建函式,若不正確呼叫也會凸鎚的。

    2011-07-25 11:38:44 補充:

    原先在 dll函式內自動去除字串尾端空白的做法,恐會造成記憶體缺漏之後遺症,

    改成保留其多餘的空白字元, 返回後再用 RTrim去除右側多餘的空白,

    這樣的做法對系統比較安全。

    另,在 VBA 呼叫的方式由 Function 改成 Sub,語意較不易混淆。

    下載網址:

    http://www.funp.net/675812

    新版較周延,之前網址文件已無留存必要,將刪除。

    使用說明,詳參隨附之文件。

    2011-07-27 11:51:37 補充:

    我以為讓你們自行發覺「自動版」程式的BUG比較好,免得又落人口實。

    現在結案了,我就略提一下好了:

    難道你們沒碰到「資料一直擴增不停」的毛病?

    我是碰到了。

    於是簡略看了一下程式,[至少]發現一個嚴重的邏輯錯誤:

    main 函式用了遞迴,可是沒有參數又沒有整體變數作為遞迴的終止條件,這終究難逃無止境的循環。

    2011-07-27 19:20:06 補充:

    是 知識圖示檔 會一直新增。

    我沒時間去詳看,推測是錯誤處理所導致(如:在 wk, 輸入kid不正確時)。

    2011-07-28 16:23:47 補充:

    >東大可能是以理論來判斷..

    非也,非也!

    實測上,錯誤的情況是很明確的。

    你沒碰到這情況?

    依此看來,測試程式也要經驗才行。

    放心啦!改天你一定有機會碰到。

    我猜錯因可能在:

    1.ERROR Handler 有盲點。

    2.遞迴條件未完全掌控。

    我相信世賢應已發現問題所在了,若他有空,很快便可把這個BUG排除。

    2011-07-28 22:56:46 補充:

    程式設計者本人在測試的時候,因瞭解程式運作流程,操作時大多能迎合程式的要求,當然較不易踩到程式的地雷。但其他人呢?可能就會頻踩地雷了!

    一般程式若由設計者本人親測還會出錯,以程式圈人的眼光來看,那事情就很大條了,若心存只發生那麼一次而已的心理,實在不宜。而且事實上發生的機率是蠻大的,並非如你所言的很小機率。

    問題的確存在,而且是蠻嚴重的邏輯錯誤,這種錯誤還附帶後遺症,會在工作表上添增許多垃圾資料,將它一一刪除也是很累人的。

  • 10 years ago

    太難了

    應該沒人答的出來

    已達外包的條件了

    建議您花錢去外包

    不然只有浪費時間

    如需外包跟我聯絡

Still have questions? Get your answers by asking now.