Excel 股市資料抓取服務

提供Excel 股市資料抓取服務
可透過下列方式聯絡我
Email: iamaraymond@yahoo.com.tw
(FB請先加我好友再私訊,不然會跑到陌生訊息)

課程:
Excel VBA 金融資料抓取 | 打造股票研究系統 (學生數: 602,學員評價5顆星)
無痛起步-Excel VBA超入門實戰(學生數: 413,學員評價5顆星)


2018年5月21日 星期一

Excel VBA Find語法+SelectionChange事件

Excel VBA 網路資料蒐集 完整教學:
http://raymondchiendtrt.blogspot.tw/2018/05/vba_72.html

在麻辣家族中有網友問到:

請問有什麼方式可以點選上方,小明的名子,然後接跳到A8位置
點選小王 位置移動到A25 小綠A40 小黑A65

http://forum.twbts.com/thread-20816-1-1.html







因此做了一個範例檔



在此範例檔中,只要按下第三列的某個名子,就會跳到A欄相對應的位置
例如按下C3的Agnes會跳到A14,按下D3的Alice會跳到A17

這個其實只是用worksheet的SelectionChange事件加上find語法就可以達到這個效果
語法:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Target.Row = 3 And Target.Column >= 3 And Target.Column <= 5 Then
    Set Rng = Range("A5:A46")
    Set myFind = Rng.Find(what:=Target.Value, lookat:=xlWhole)
    myFind.Select
End If
Application.EnableEvents = True

End Sub

首先要先停止觸發事件的機制,也就是
Application.EnableEvents = False
為什麼呢?
因為如果沒寫這行,那麼當程式執行到myFind.select時
SelectionChange又會被觸發一次,有時一不小心就會造成無窮循環
而在最後面也要加一句
Application.EnableEvents = True
讓事件能夠被觸發,否則以後當所選儲存格又改變時
就不會觸發SelectionChange事件
這邊再補充一下,如果真的不小心忘記在最後加
Application.EnableEvents = True
導致之後的事件無法被觸發時,該怎麼辦呢?
這時我們可以直接將這句語法放入即時視窗,按下Enter就OK了

接下來使用Find語法
用Target(也就是你按下去的那個儲存格)的值,來找出一段範圍內(Range("A5:A46"))一樣的值
這時myFind是符合條件的物件
因此可以直接用myFind.select來選到
myFind的一些常用屬性都可以用區域變數視窗來看到

好久沒用到這兩個好用的語法,趁此機會複習一下


沒有留言:

張貼留言