變更瀏覽模式

201312132210摘取網頁段落文字

更新:2013.12.13
因應網頁變更。
下載範例檔案:QSentence4.xls

要處理網頁,VBA有兩個有用的項目:Microsoft Internet Controls及Microsoft HTML Object Library。
網友torrent在Excel Help Forum發了一個帖子 [如何用excel的功能,用單字查例句?] ,內容如下
『前一陣子在考GRE,所以要大量背單字,也會順便讀例句來背,不過都是用查字典的方式背例句,前幾天忽然想到可以用excel自動去The British National Corpus(http://www.natcorp.ox.ac.uk/,longman字典的例句就是用套資料庫)抓例句。但不知道該怎麼回傳例句到excel上,用「新增web查詢」好像功能也有限。
BNC的搜尋其實蠻簡單的,我把GRE所有的單字列在A欄,在B欄套上「="http://sara.natcorp.ox.ac.uk/cgi-bin/saraWeb?qy="&A1」,就可以了。
B欄產生網址,用IE去看網頁,結構也簡單,只是不知道怎麼把第一段及第二段例句回傳到C欄及D欄。因為BNC每次搜尋也是亂數在跑的,所以有時可以看單字學固定例句,有時還可以跑亂數的例句回過頭來考單字詞義,其實用來學英文蠻不錯的。

所以想請問版上的高手,要如何用excel的功能,做到上述的要求?』

(繼續閱讀)

201310081028摘取交易所當日即時集中市場大盤資訊

更新內容:證交所網頁表格變動,及市場資訊每15秒更新一次。
請下載更新檔案   ---2013.10.08

更新內容:證交所網頁表格變動,及市場資訊每15秒更新一次。
請下載更新檔案   ---2011.5.20

本範例演示如何取得http://mis.twse.com.tw/market_index.html?market=1網頁中 [大盤指數] 表格中的資料,每7秒更新轉存於工作表。當按了 [Start] 按鈕後即開始執行上述動作並將Excel視窗固定在最上層,按 [Stop] 按鈕後停止動作與解除Excel視窗在最上層,並關閉所開啟的網頁,請確實注意[Stop]程序是否執行,否則多按幾下。

其他相關問題請參考http://blog.xuite.net/crdotlin/excel/17713849

201305312120Excel VBA外傳

能不能打開Excel,將引數值賦予開啟的工作簿?
例如:
Excel myBook.xls abc 123
這樣將myBook.xls打開後,將”abc”放在myBook.xls的Sheet1中A1儲存格, “123”在B1儲存格?

不能吧!

可是電腦世界真的沒有不可能的!而且「山不轉人轉」,只要繞個圈子同樣可以達到目的。

這就是要跟大家介紹的「啟動帶引數的Excel,並執行巨集」-【Excel VBA 747】最後一題。

因為這一題主要是VB Script,不是VBA,所以叫 [外傳] 。其中要件為:

1. 使用記事本或WordPad寫一個附加檔名為*.vbs,這個例子是wstestRem.vbs。內容如下

'這是Excel VBA 747最後的範例--算是Excel VBA 外傳.
'文字檔案"wshtest.vbs"
'貼在記事本等上面並以"wshtest.vbs"為名儲存
Option Explicit
Dim objXLApp   '宣告Excel應用程式變數
Dim objXLBook   '宣告工作簿物件變數
Dim i
Set objXLApp = WScript.CreateObject("Excel.Application")    '創建Excel應用程式
objXLApp.Visible = True '顯示Excel
'開啟含有巨集"wshmacro"的工作簿
Set objXLBook = objXLApp.Workbooks.Open(WScript.Arguments(0))
If IsObject(objXLBook) Then     '測試是否正常開啟
    For i = 1 To WScript.Arguments.Count - 1 '遍歷輸入的參數
        objXLBook.Names.Add "theArg" & i, "=" & WScript.Arguments(i)   '新增名稱, 並賦予參數值
    Next
End If
'以下的巨集會將顯示輸入的參數值
objXLApp.Run "wshmacro"   '執行巨集"wshmacro"
objXLBook.Saved = True  '不要儲存工作簿
objXLBook.Close     '關閉工作簿
Set objXLBook = Nothing '釋放工作簿物件
objXLApp.Quit   '關閉Excel
Set objXLApp = Nothing   '釋放Excel應用程式物件
WScript.Quit     '關閉Script

2. 根據上面的Script,要準備一個含有一個名稱為wshmacro巨集的工作簿。此例就叫做Q_Sample065.xls,而其巨集內容如下

Sub wshmacro()
    Dim theArg As Name
    Dim theMsg As String
    For Each theArg In ThisWorkbook.Names
        theMsg = theMsg & theArg.Name & theArg.Value & vbCrLf
    Next
    MsgBox theMsg   '"第一個參數: " & [theArg1] & vbCrLf & "第二個參數: " & [theArg2]
End Sub
'假設路徑是d:/mydata/
'檔名為Q_Sample065.xls
'透過「執行」來執行, 格式如下
'"檔案路徑/wshtest.vbs"半形空白"d:/mydata/Q_Sample065.xls"半形空白"參數1"半形空白"參數2"...

假設路徑是d:/mydata/,檔名為Q_Sample065.xls

透過「執行」來執行, 格式如下:

d:/mydata/wshtest.vbs d:/mydata/Q_Sample065.xls 參數1 參數2...

也可以製作一個捷徑如圖

而執行結果會巨集會顯示輸入的參數值,如圖

從上面看會發現這裡的做法與書本的有兩點不同:

1. 本例是將參數放置在 [名稱] 中,不是放在儲存格。
2. 本例第一個參數是要開啟的檔案全路徑。

附件參考 [Excel VBA 747] 最後一題.

下載範例檔案

 

201301311517一個排列 (Permutation) 演算法

完成 [一個組合 (Combination) 計算程式] 後,即想依樣畫葫蘆做 [一個排列 (Permutation) 演算法],卻腦筋打結一直做不出來。因此,遍訪各網頁,計算排列 (Permutation) 的程式倒是不少,大部分看不懂或不符合心裡想的所謂 “依樣畫葫蘆” ,皇天好像總是不負苦心人,終於在 [Calculating Permutations and Job Interview Questions] 找到了。其中我選擇一個看起來滿好用的 [University of Exeter algorithm],將它改成VBA提供大家參考。

排列元素多於 8個時就會大於一張工作表的最大列數且運算費時,使用上應該以符合實際應用為考量。

(繼續閱讀)

201301292209Web查詢現在股票行情

? Web
更新內容:
  1. 改用QueryTables抓取個股行情表
  2. 工作表nameid更新,只要刪除舊資料,從http://brk.tse.com.tw:8000/isin/C_public.jsp?strMode=2http://brk.twse.com.tw:8000/isin/C_public.jsp?strMode=4複製表格直接貼上去即可。

更新內容:
  1. 首先向所有網友致最大的歉意,先前兩版因使用保護工作表導致賣出時無法使用篩選功能。本版已經更正。
  2. 改善IE的操作,大幅改善更新的速度。
  3. 本版在XP、Vista、Excel2007、Excel2003、IE7及IE8測試均OK。
請下載更新檔案 -2009.7.29
第二下載區
請下載更新檔案 -2009.7.29

更新內容:
  1. 捨棄QueryTable物件,改使用 [摘取網頁資料 – getElementsByTagName]。
  2. 開啟網頁程序,請參考 [

(繼續閱讀)

201206141723UserForm的最大化、最小化、正常化與全螢幕

? API

版本更新: (2012.06.14更新) 

更新內容:新增全螢幕,按ESC鍵則unload userform。

下載範例檔案


Excel 的UserForm所提供的sizing非常死板,不方便動態改變其大小。因此需要自行程式控制。
以下的代碼就讓你的UserForm大小的變化十分具有彈性:

Private Declare Function SetActiveWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const GWL_STYLE = (-16)
Private Const SW_SHOWMAXIMIZED = 3
Private Const SW_SHOWNORMAL = 1
Private Const SW_SHOWMINIMIZED = 2
Private Const WS_THICKFRAME = &H40000
 
Dim hWndForm As Long
Dim IStyle As Long

 
Private Sub UserForm_Initialize()
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
IStyle = GetWindowLong(hWndForm, GWL_STYLE)
IStyle = IStyle Or WS_THICKFRAME
IStyle = IStyle Or WS_MINIMIZEBOX
IStyle = IStyle Or WS_MAXIMIZEBOX
SetWindowLong hWndForm, GWL_STYLE, IStyle
End Sub

 
Public Sub myShowMin()
SetActiveWindow hWndForm
ShowWindow hWndForm, SW_SHOWMINIMIZED
End Sub

 
Public Sub myShowNor()
SetActiveWindow hWndForm
ShowWindow hWndForm, SW_SHOWNORMAL
End Sub

 
Public Sub myShowMax()
SetActiveWindow hWndForm
ShowWindow hWndForm, SW_SHOWMAXIMIZED
End Sub

201204131820繪製風花圖 (Wind Rose Chart)

版本更新: (2012.04.13更新)
八方位的範例圖

下載範例檔案   2011.05.03


版本更新: (2011.05.03更新)
  1. 適用於Excel 2007版本以上。
  2. 以m/s為風速單位
  3. 風向分成16方位
  4. 字體與線條全以黑色繪製,方便影印。

效果如下圖:

下載範例檔案   2011.05.03


本版加入了風速頻率分布,還包括靜風與風向不定的頻率分布。
 
因為有網友有這樣的需求,但是都不肯提供資料格式,因此我就自己製造一個 [風向風速統計表格] 來做依據,格式如下
 

 
風花圖的樣式,請參考下圖

如圖所示,紅色表大風區(風速大於10KTS者),綠色表中風區(風速大於3KTS且小於等於10KTS者),藍色為微風區(風速小於3KTS者)而深灰色表靜風百分比。其中靜風與風向不定以單一橫軸表示,中間為0值分隔,向左是屬靜風頻率,向右是為風向不定頻率。

下載範例檔案


Wind Rose  風花圖(亦稱風頻圖)

為表示某地在某時期內所出現風向分布情況而設計之圖;在此項圖上可顯示盛行風向。最常見之形式為自一圓圈伸出八條或十六條線,每線代表一羅盤方位,其長度與該方向吹來風之頻率成正比。
 
風花圖或風向玫瑰圖雖是氣象上常見的應用,卻沒有想到一般論壇上會出現(我做的风向玫瑰,请求改正)。
 
如果你是圖表王,真的可以用 「雷達圖」 來實現,我只會用VBA一條線一條線的劃出來。所謂慢工出細活,看起來真的還不錯。

當然這只是一個示例圖,其實還可以加上風速分布。而風向還有静風及風向不定兩種需要另行標示。

下載範例檔案

201110082258英漢字典

? Web

說明:

  1. 本範例使用YAHOO字典,僅載入第一筆中文解釋
  2. 本範例引用OfficeFans:不懂网页数据的提取
  3. 已在Sheet1工作表中手動插入了一個WindowsMediaPlayer物件,並隱藏之
  4. 在A欄填入英文單字,輸入後即自動查詢
  5. 點擊 [音標] 可發音

請下載檔案 -2011.10.08

201105211010抓取證交所即時大盤指數及總委買委賣張數

? Web
更新內容:優化程式碼

請下載更新檔案   ---2011.5.21

若網頁資料無法經由網頁查詢(QueryTables)取得,請用這個範例的方法試試看。

關於 [自動新增與解除引用項目] 請參訪http://blog.xuite.net/crdotlin/excel/9017920

 

201101221230自動新增與解除引用項目

? VBE

對於VBE的操作必須核取「信任存取Visual Basic專案」選項及引用「Microsoft Visual Basic for Application Extensibility 5.3」,如此已經違背本篇內容的初衷了。所以我們對於有關VBIDE物件的相關屬性與方法均以Variant宣告,這樣我們就不必引用「Microsoft Visual Basic for Application Extensibility 5.3」了,至於核取「信任存取Visual Basic專案」選項,請參閱「Sendkeys萬能篇 -- 改變巨集安全層級」一文。  

第一頁  上一頁  1 2 3 4 5 6 7 8 9 10 下一頁  最後頁 
關鍵字
    沒有新回應!
累積 | 今日
loading......