非常感謝您無私地分享教學,收益良多。我原本只是用QT下載收盤價,再利用Excel工作表統計我的股票損益。我也只在您這裡看到QT會有連線沒有關掉的問題。趕快從資料連線查看,天哪!還真有一大串的連線掛在那哩,數一數總共有197條連線,繼續使用下去那還得了。所以打算遵照大師指示參考相關樓層,重新改寫上市、上櫃、興櫃一般板和興櫃戰略新板的最新收盤價。
現在我想先解決興櫃歷史行情的下載問題,公司代號和資料年月先固定。
興櫃個股歷史行情的網址及資料年月和公司代號或名稱的原始碼如下:
興櫃 > 興櫃股票交易資訊 > 興櫃一般板 > 個股歷史行情網址:
https://www.tpex.org.tw/web/emergingstock/single_historical/history.php?l=zh-tw
<label for="input_month">資料年月:</label><input type="text" id="input_month" name="input_month" class="input-date ui-corner-all" onchange="query()" maxlength="9">
<label for="stk_code">公司代號或簡稱:</label><input id="stk_code" name="stk_code" type="text" class="input-stock ui-corner-all" size="10">
程式碼如下
Sub 下載興櫃CSVFile()
Dim IE As Object
Dim wsTarget As Worksheet
Dim downloadPath As String
Dim latestFile As String
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "https://www.tpex.org.tw/web/emergingstock/single_historical/history.php?l=zh-tw&d=112/10&stkno=6709&s=0,asc,0"
Do While IE.Busy Or IE.readyState <> 4
DoEvents
Loop
IE.document.getElementById("input_month").Value = "112/10"
IE.document.getElementById("stk_code").Value = "6709"
IE.document.querySelector("button.btn-download").Click ‘沒有動作
Application.Wait Now + TimeValue("00:00:10")
downloadPath = "C:\Users\" & Environ("Username") & "\Downloads\"
latestFile = GetLatestCSVFile(downloadPath)
Workbooks.Open latestFile
Set wsTarget = ThisWorkbook.Sheets("興櫃指定月份日成交資訊")
Workbooks(Replace(latestFile, downloadPath, "")).Sheets(1).UsedRange.Copy wsTarget.Cells(1, 1)
Workbooks(Replace(latestFile, downloadPath, "")).Close SaveChanges:=False
Application.CutCopyMode = False
End Sub
=================================================
Function GetLatestCSVFile(folderPath As String) As String
Dim latestFile As String
Dim latestDate As Date
Dim fileName As String
If Right(folderPath, 1) <> "\" Then
folderPath = folderPath & "\"
End If
latestDate = dateValue("1/1/1900")
fileName = Dir(folderPath & "*.csv")
Do While fileName <> ""
If FileDateTime(folderPath & fileName) > latestDate Then
latestDate = FileDateTime(folderPath & fileName)
latestFile = folderPath & fileName
End If
fileName = Dir
Loop
GetLatestCSVFile = latestFile
End Function
1. 因為查詢日期為11月1日,所以無歷史資料
2. 必須點開資料年月選擇,確定下載月份
3. 資料展開之後,點案另存CSV按鍵
4. 確認CSV檔案儲存
如同756樓的問題,我在個股歷史行情輸入代號”6709”後,按F12進入開發者工具,只看到資料年月和公司代號的原始碼,請問該如何找到
1. 另存CSV的真實下載網址
2. CSV下載檔案名稱 (確認CSV檔案儲存就有,但是原始碼可以看到嗎?)
3. 資料年月的下拉式選單可以VBA程式碼模擬點按選擇不同月份嗎?也就是說,附圖1-4的操作可以自動化嗎?謝謝您。
Morten Hsu wrote:
1. 因為查詢日期為11月1日,所以無歷史資料
2. 必須點開資料年月選擇,確定下載月份
3. 資料展開之後,點案另存CSV按鍵
4. 確認CSV檔案儲存
Morten Hsu wrote:
3. 資料年月的下拉式選單可以VBA程式碼模擬點按選擇不同月份嗎?也就是說,附圖1-4的操作可以自動化嗎?。
(我沒看到您的附圖)
方法同1350樓,直接下載網頁內容,或下載csv都行


想要自動換股、年、月,紅字部份,改用變數代替即可
URL = "https://www.tpex.org.tw/web/emergingstock/single_historical/history.php?l=zh-tw&d=112/11&stkno=6709&s=0,asc,0"
Morten Hsu wrote:
如同756樓的問題,我在個股歷史行情輸入代號”6709”後,按F12進入開發者工具,只看到資料年月和公司代號的原始碼,請問該如何找到
1. 另存CSV的真實下載網址
2. CSV下載檔案名稱 (確認CSV檔案儲存就有,但是原始碼可以看到嗎?)
這就是1347樓的範例
1、真實csv下載網址,先按F12,再按下載CSV
2、檔名存在Headers裡的Content-Disposition



同樣要自動換股,請把紅字改變數代替
…………
…………
.Open "POST", Url, False
…………
…………
.setRequestHeader "Referer", "https://www.tpex.org.tw/web/emergingstock/single_historical/history.php?l=zh-tw&code=6709"
…………
…………
'下面這行是圖片,請手動輸入
…………
…………
'debug
msgbox split(xmlhttp.getResponseHeader("Content-Disposition"),"filename=")(1)
Morten Hsu wrote:
即使用F12還是沒有找到下載new.csv的真實網址
這頁的網址是在popup視窗裡面,所以f12看不到
可直接在下載頁面中,複製連結網址

或是用其它瀏覽器,例如:Cent Browser
下載時,就有真實網址可看

也可以用fiddler這類的程式,去抓真實網址
nijawang wrote:
一直發生Automation錯誤(昨天還正常)
出錯的地方都在這個Array()的地方
Sheets("Sheet1").Range("A153:G186").Value = TempArray()
TempArray()是設Global
老實說,只看一行程式碼,我不知道該怎麼回答您
這種寫法會出錯,通常是忘了指定陣列大小
出現的應該是下面這種錯誤

正常來說不會有您的錯誤訊息出現
Global TestArray()
Sub test()
ReDim TestArray(1 To 10, 1 To 3)
For i = 1 To 10
For j = 1 To 3
TestArray(i, j) = Int(Rnd() * 100) + 1
Next j
Next i
Sheets("工作表1").Range("a1:c10").Value = TestArray()
End Sub
應該是別的地方出錯
如果程式碼中有 on error ,先把所有的 on error 停用
再重新執行程式,看看到底是那裡出錯
snare wrote:感謝snare大的回覆!
老實說,只看一行程式碼,我不知道該怎麼回答您
這種寫法會出錯,通常是忘了指定陣列大小
出現的應該是下面這種錯誤
因為原本的xlsm VBA都正常,只是後來發生錯誤都停在array()這個地方。
之後還變成只要一執行VBA時,Excel就一直當掉重開…
最後我是往前找比較早的檔案版本,試了幾版後,才找到可正常執行的版本。
應該是檔案不知道在何時被「污染」了。
不過這個xlsm檔案後來變成在筆電A打完一個值後,要等個10秒才能做下一個動作;
但在另一台筆電B上執行就都正常!?
目前還找不到原因…
※若不開這個有問題的xlsm檔時,則其它Excel檔都正常;
若開這個xlsm檔,同時再開其它檔時,則其它檔也會變很慢。
不知道是不是這個xlsm檔一直在做什麼事?
蔬食抗暖化,減碳救地球!
內文搜尋






























































































