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





[點擊下載]

Snare大神:
我想在工具列增加1個連接至某個程序的觸發圖案或文字按鈕,
圖一已指定了msoBarPopup,但ShowPopup加不進工具列,且End Sub後就不見了
圖二是手動加入巨集命令後修改圖標的方式,我不想用自帶的圖標,可是我找不到添加圖標的路徑
以上這兩種效果比較接近我要的功能,
我另外還試過加入增益集再轉至工具列的方式,可是這樣是整個群組加入,不是我要的
您有什麼好方法嗎?
Dylan
Dylan67 wrote:
圖二是手動加入巨集命令後修改圖標的方式,我不想用自帶的圖標,可是我找不到添加圖標的路徑


vba CommandBars.Add 才能用圖片
要放在系統內建的工具列,只能改xml,才能用另外的圖案

這裡有教學
https://gregmaxey.com/word_tip_pages/modify_qat_button_image_text.html
https://bettersolutions.com/vba/ribbon/custom-ui-editor.htm

修改工具載點
https://github.com/fernandreu/office-ribbonx-editor/releases/tag/v1.9.0
Dylan67
謝謝您,理解, CommandBars.Add 才能用圖片,我昨天也試了,可以,但沒辦法放在系統內建的工具列,xml..不會,不過您給的教學看起來已經很詳細了,我得另找時間好好研究一下,抱拳感謝


[點擊下載]

Snare大神:

這是一個很簡單的呼叫程序,在Test2運行時判斷是否源自Test1呼叫,可是我不想用K變量來做判斷,

是不是有什麼API能夠判斷本程序運行中,本程序是獨立觸發運行,還是由其他程序呼叫運行,

會不想用這種方法判斷,是因為我的模組內,有很多主程序都共用副程序,或副程序內還會再呼叫其他程序,

感謝您的指導

Dylan
Dylan67
剛又去Google了我的問題,想補充一下,因為K判斷變量在不同模組內的程序帶來帶去太不易維護,而我只想知道Test2是不是由其他程序呼叫,不用知道是不是由Test1呼叫,所以想請教您這個問題
Dylan67 wrote:
在Test2運行時判斷是否源自Test1呼叫,可是我不想用K變量來做判斷


Sub test()
Dim Sub_name As String: Sub_name = "test"
Call Name_test(Sub_name)
End Sub

Sub test99()
Dim Sub_name As String: Sub_name = "test99"
Call Name_test(Sub_name)
End Sub

Sub test2()
Call Name_test
End Sub


Sub Name_test(Optional Sub_name As String = "other sub")
MsgBox Sub_name
End Sub

Dylan67
特別感謝您,您的代碼解決了我的困惑,並找到了解決方案
snare大神

證交所又改版了 第一次碰到JSON格式
爬文爬了好久 也請教AI了 還是搞不懂
該如何擷取以下資料
也可以跟XMLHTTP的方式一樣只擷取某個特定的table嗎? 像最後一個? 還是要所有資料一次parse?

https://www.twse.com.tw/rwd/zh/afterTrading/MI_INDEX?date=20230317&type=ALL&response=json

謝謝
rainbowsperm wrote:
也可以跟XMLHTTP的方式一樣只擷取某個特定的table嗎? 像最後一個? 還是要所有資料一次parse?


沒分類的json可以用split...等等函數,切割取出需要的資料
但這個twse json,各表格資料有分類好,所以可以指定特定的表格














補充:
i as integer 要改成 i As Double
因為有時資料3萬多列會超出integer上限,出現溢位錯誤


謝謝snare大神
不過我跟1058樓一樣
出現 "automation 錯誤"在"Set DecodeJson = Jsondata.JsonParse(.Responsetext)"
不知您是否知道是什麼原因造成的

謝謝
snare
表格0~5,同一格式程式碼不用改。6~8,另一格式,可跑完,但排版會錯,需修正。9,json 內容格式不同,程式碼會出錯,callbyname、排版… 等等,都需修正。可從區域變數視窗看出不同的地方。
rainbowsperm
謝謝snare大神, 不過現在就是跑表格0就出錯了~~XDJSON對現在的我來說還是太難了不過還好發現只是網址改了 還是可以用html格式讀取~~^^
請問S大:
1.我想要把用EXCEL VBA是變動tick(n2,o2,p2欄),自動逐筆寫入ACCESS.
2.同一時間,access每分鐘最大,最小,成交價,[逐筆往下寫入]EXCEL(X2,Y2,Z2,AA2欄).
我要如何著手或想法寫出程式碼,謝謝你.


g80860 wrote:
我要如何著手或想法寫出程式碼


簡易範例、資料結構如下,但怎麼整合到您的程式中,只能自己加油。





Public Set_time As Double
Public DB As Object
Public RS As Object
Public check As String
Public LastRow As Double



Sub Start_test()

Set DB = CreateObject("ADODB.Connection")
Set RS = CreateObject("ADODB.Recordset")
DB.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.Path & "\testdata.accdb" & ";"

Columns("F:H").ClearContents
Columns("F:H").NumberFormatLocal = "@"
Range("a2:c2").NumberFormatLocal = "@"
Range("f1:h1") = Array("time", "max", "min")
LastRow = 2

Call Write_Simulation_data


End Sub

Sub Stop_test()

On Error Resume Next
Application.OnTime earliesttime:=Set_time, procedure:="Write_Simulation_data", schedule:=False

check = ""
RS.Close
DB.Close
Set RS = Nothing
Set DB = Nothing

On Error GoTo 0

End Sub

Sub Write_Simulation_data()

Dim sql As String

'==Simulation==
Randomize
Range("a2") = Range("a2") + 1
Range("b2") = Format(Now(), "hhmm")
Range("c2") = WorksheetFunction.Round((150 - 5 + 1) * Rnd() + 5, 3)
'===============

If check = "" Then check = Range("b2")

sql = "'" & Range("a2") & "','" & Format(Now(), "yyyymmdd") & "','" & Range("b2") & "','" & Range("c2") & "'"
DB.Execute = "INSERT INTO 資料表1 ([index],[day],[time],[price]) VALUES (" & sql & ")"

Set_time = Now + TimeValue("00:00:01")
Application.OnTime Set_time, "Write_Simulation_data"

If check <> Range("b2") Then
Call Read_Simulation_data
check = Range("b2")
End If

End Sub

Sub Read_Simulation_data()

'Debug.Print check

Dim sql As String

sql = "SELECT max(price),min(price) from 資料表1 WHERE time='" & check & "'" & " and day='" & Format(Now(), "yyyymmdd") & "'"
RS.Open sql, DB, 3, 3

If RS.RecordCount <> 0 Then
Cells(LastRow, 6) = check
Cells(LastRow, 7).CopyFromRecordset RS
LastRow = LastRow + 1
End If

RS.Close

End Sub





[點擊下載]
g80860
S大真的很強,而已是無私的,謝謝你幫助,謝謝.
各位先進好:
剛開始使用VBA,參考了前面的文章,但要抓取的是公開觀測站的當日重大訊息,發現跟即時與歷史訊息
有些許出入 https://mops.twse.com.tw/mops/web/t05st02
主要的問題還是在抓按鈕詳細資料裡的內容,無法試出正確的URL參數代法

外層的查詢就直接把詳細資料的內容帶出來了?,但後半段button的參數好像也不太夠?沒有日期,年,月?
想說直接對第6格用innerhtml,但欄位名每一列都不是固定h00,h01,h02....等,不知如何下手


苦惱好多天了
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 157)

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