(不定期更新)使用VBA解決 excel web 查詢無法匯入、匯入太慢的股市資料

mouse擺平了,最近在學習244F及686F股權分散表的知識,看了七七八八,寫了一堆注釋,卻無從下手修改,不禁感慨snare碼神技術之全面,及思考之完整性,希望下周連假後,我能搞懂個五五六六,感恩,先預祝版友們中秋快樂。
請教版主:
1. 附件是244F股權分散表的程式碼,我已將[分身]取消,並用686F的網址做了更新,可是會在Set all_date = HTMLsourcecode.getElementbyid("scaDates")發生錯誤,想請您幫我看一下,是不是改的不正確。
2. 另外,想請教With GetXml 和 With CreateObject("WinHttp.WinHttpRequest.5.1")的差異,我看程式碼中,前者最後要釋放,後者是不是會自動釋放。謝謝

[點擊下載]
Dylan67 wrote:
請教版主:
1. 附件是244F股權分散表的程式碼,我已將[分身]取消,並用686F的網址做了更新,可是會在Set all_date = HTMLsourcecode.getElementbyid("scaDates")發生錯誤,想請您幫我看一下,是不是改的不正確。


改版很久了,從table改成json
下載日期,請參考686樓=>Update_TDCC_day 副程式



Dylan67 wrote:
2. 另外,想請教With GetXml 和 With CreateObject("WinHttp.WinHttpRequest.5.1")的差異,我看程式碼中,前者最後要釋放,後者是不是會自動釋放。謝謝


程式結束後,2種都會自動釋放
大型程式用set abc=CreateObject() 或 set abc=new object,這種方式比較好
可隨時手動釋放物件,增加記憶體空間、程式效率
幾百行那種小程式就不必太在意這個問題

https://docs.microsoft.com/zh-tw/office/vba/language/concepts/getting-started/creating-object-variables
https://docs.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/set-statement
https://docs.microsoft.com/zh-tw/previous-versions/office/troubleshoot/office-developer/binding-type-available-to-automation-clients
我參考686F做了一個Access資料庫,我想在[配息表]中根據[日期範圍],查詢出有多少[商品]配息
這段代碼可以找出我要的數據量
SQL = "SELECT count(商品) FROM 配息表 WHERE 除息日<= # 2020/09/31#
可是這段代碼會告訴我日期語法錯誤
SQL = "SELECT count(商品) FROM 配息表 WHERE 除息日<= # 2020/09/31# AND 除息日>= # 2020/01/31# "
想請各位高手指點一下?祝福各位中秋節快樂
手邊沒東西可試.......很久沒用Access了,之前用過SQL語法,還是在搞php+mysql的時候~~

Dylan67 wrote:
除息日<= # 2020/09/31#


雖然沒能肯定回您(沒差,晚點看看樓主的答案就好,哈~),不過好奇的是,9/31這個日期的寫法是OK的嗎?(9月不會有31日吧?.......不過您又提到第一句的執行是沒問題的.........)

那麼,加個 Between 試試?

Between #2020/01/31# And #2020/09/31#
Der,misser1
Dylan67 wrote:
可是這段代碼會告訴我日期語法錯誤


就如misser所說的,日期搞錯了,9月沒31號,日期錯了,就會出現語法錯誤

簡單範例請參考
(含access範例檔,除息日欄位為“日期格式”,如為文字格式sql是另一種寫法)



Sub access_test()

Dim DB As Object, RS As Object, Rsql As String
Set DB = CreateObject("ADODB.Connection")
Set RS = CreateObject("ADODB.Recordset")

DB.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.Path & "\test.accdb" & ";"

With Sheets("工作表1")
.Cells.Clear
Rsql = "SELECT * FROM 配息表 where 除息日>=#2020/1/6# and 除息日<=#2020/1/15#"
'Rsql = "SELECT count(商品) FROM 配息表 WHERE 除息日<= #2020/1/12#"
'Rsql = "SELECT count(商品) FROM 配息表 WHERE 除息日>= #2020/1/8# and 除息日<=#2020/1/14#"
RS.Open Rsql, DB, 3, 3
'Debug.Print RS.RecordCount
If RS.RecordCount <> 0 Then
.Cells(2, 1).CopyFromRecordset RS
End If
End With

RS.Close
DB.Close
Set RS = Nothing
Set DB = Nothing

End Sub



[點擊下載]
哎呀呀,9/30成功,真的是低級錯誤,暈
Snare版主:

我在學習資料庫又遇到新的問題了,由於股票會有上市及下市的問題,想請教,

怎麼引用Excel的[代碼表],比方多了代碼(上市),或少了代碼(下市),

1.新建及刪除Access的資料表(我的程式碼只能新建1次)

2.修改Access的[代碼清單]資料表的內容(我設了不重複主鍵)

感謝

[點擊下載]
Dylan67 wrote:
1.新建及刪除Access的資料表(我的程式碼只能新建1次)

2.修改Access的[代碼清單]資料表的內容(我設了不重複主鍵)


詳細sql語法,請google

建立表格
google create table sql

新增表格內資料
google INSERT INTO sql
或參考acer範例中,Get_Online_Data() 副程式


更新資料表
google UPDATE access sql
(使用 Access SQL 插入、更新及刪除資料表中的記錄)
https://docs.microsoft.com/zh-tw/office/vba/access/concepts/structured-query-language/insert-update-and-delete-records-from-a-table-using-access-sql


Sub test()

Dim DB As Object
Set DB = CreateObject("ADODB.Connection")

DB.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.Path & "\test.accdb" & ";"

'增加 table
DB.Execute "CREATE TABLE " & "2002" & "(識別碼 int IDENTITY(1,1) PRIMARY KEY," & "日期 text(8),持股 text(25))"
'DB.Execute "CREATE TABLE " & "2412" & "(識別碼 int IDENTITY(1,1) PRIMARY KEY," & "日期 text(8),持股 text(25))"

'刪除 table
DB.Execute "DROP TABLE 2002"
'DB.Execute "DROP TABLE 2412"

DB.Close
Set DB = Nothing

End Sub
Snare版大:
想請教271F的這張圖是什麼用[下載軟體]截屏的,我找不到相符的畫面,
用GoogleF12及Fiddler也找不到這個網址Key,



再請教,272F批量下載的CSV若想改存在Access,是不是只能一個一個在Excel[不存檔直接開啟後]→再用ADO存入Access,您方便給點提示嗎?感謝
關閉廣告
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 144)

今日熱門文章 網友點擊推薦!