ªð¦^¦Cªí ¤W¤@¥DÃD µo©«

ÃÒ¥æ©Ò¥þ³¡¤W¥«ªÑ²¼¥æ©ö©ú²Ó¤U¸ü

ÃÒ¥æ©Ò¥þ³¡¤W¥«ªÑ²¼¥æ©ö©ú²Ó¤U¸ü

ªá¤F¤@¨Ç®É¶¡¥HExcel VBA¼g¤F¤@­Ó¤U¸ü¥æ©ö©ú²ÓDebug version,¥D­n¦b°µ®É¶¡ªºÀu¤Æ³B²z,Release version¥i¯à»Ý­n¦A¦hÂI®É¶¡¶i¦æ°Ñ¼Æfinal duel
²{¦bªþ¤W¨Ï¥Îpython»PExcel VBA°õ¦æ§¹¦¨ªº¹Ï®×,python°õ¦æªº®É¶¡2603¬í,Excel VBA°õ¦æ®É¶¡7598¬í(¥¼Àu¤Æ«e),¨âªÌ¬Û®t¬ù2.9­¿
³o¨â­Ó³£¬O¦b¦³½uºô¸ô20M/4M, Âù®Ö¤ßÂù°õ¦æºü2G Hz CPU, 4G RAM, XP OS SP3³W«h©Ò¶]¥X¨Óªºµ²ªG
¤]¸Õ¹L¦bµL½u3.5G, i7¥|®Ö¤ß8°õ¦æºü 2.3G Hz CPU, 4G RAM, win7 OS SP1¶]¥X¬ù¬Û®t4­¿ªº®t¶Z,©Ò¥H¦pªG°õ¦æÀô¹Ò¶V®t,¶]¥X¨Óªºµ²ªG¬Û®t¶V¤j
¥Ø«e¸g¹L´X¤ÑªºÀ£¤O´ú¸Õ,µ²ªG¦b¥i±µ¨üªº½d³ò¤º,ÁöµM¤w¸g§V¤O¶i¦æÀu¤Æ¤F,¦ý¾ãÅéªá¶O®É¶¡¤ñ°_pythonªº®É¶¡,¤´»Ý­n°µÀu¤Æ
¦Ü©ó¤U¸ü©ú²Ó©ÒÀx¦sªºÀɮ׮榡¦b¤§«á¦p¨Ï¥ÎªÌ¦³»Ý­n¦A°µ½Õ¾ã

¥Ø«e¸ÓExcel VBA ¥æ©ö©ú²Ó.xls ¬°V1.0.0.1 T01
¨ä¥\¯à¦p¤U
1.¶}±Ò®É·|¦Û°Ê±N·í¤Ñªº¤é´Á³]©w,¨Ã±N±ý¨ú±oªº¤W¥«ªÑ²¼ID½s¸¹­«ÀY¶}©l(³o¸Ì¬O2)
2.¤U¸üÀx¦s¥æ©ö©ú²Ó¤é´Á»P¤W¥«ªÑ²¼ID½s¸¹,¥i¦Û¦æ³]©w
3.·í¸ê®Æ¨ú±o¹Lµ{µo¥Í¦b¬Y¤@­Óºô­¶¦³°ÝÃD®É,·|¦Û°Ê°O¿ý,¥H¨Ñ¦A¦¸¤U¸ü¦³°ÝÃDªÑ²¼¤§¥Î
4.·íºô­¶¶}±Ò¦³°ÝÃD®É,¤Î»·ºÝÃÒ¥æ©Ò¦øªA¾¹¹L¦£¸L®É,±N·|¶i¦æRetryª½¨ì¨ú±o¸ê®Æ
5.·íRetry 5¦¸µLªk¤U¸ü¥«ªÑ²¼IDªºÁ`­¶¼Æºô­¶®É,·|°O¿ý¸Ó¤é´Á»PªÑ²¼¥H¨Ñ°Ñ¦Ò
6.¦Û°Ê°O¿ý¦³¥æ©ö¤é´Á¦UªÑ²¼¦bÃÒ¥æ©Òºô­¶¤WªºÁ`­¶¼Æ
7.·|¦Û°Ê±NªÑ²¼ID»P¥æ©ö©ú²ÓÀx¦s¬°CSVÀÉ

¥Ñ©ó¬ODebug version,­Y¬O¨Ï¥Î¤W¦³¥ô¦ó°ÝÃDÅwªï´£¥X©Î¬O»Ý­n²K¥[¦óºØ¥\¯à¤]¥i¥H´£¥X°Q½×

python_20120801.JPG (217.33 KB)

Python_20120801

python_20120801.JPG

ExcelVBA_20120801.JPG (232.55 KB)

ExcelVBA_20120801

ExcelVBA_20120801.JPG

¥æ©ö©ú²Ó.rar (189.27 KB)

¦^´_ 1# white5168


·PÁ¤À¨É!!
ÁöµM§ÚÅv­­¤£¨ìÁÙµLªk«ôŪ
¤£¹LÀ³¸Ó§Ö¤F...
·Q¥ý°Ý¤@¤U¤U¸ü¤U¨ÓªºÀɮפj·§¦h¤j©O(Á`¦@)?
¦³³o¤è­±ªº°ÝÃD·Q¸ò¤j¤j½Ð±Ð

TOP

¦^´_ 1# white5168

    ¤ÀªRªº«Ü¸Ô²Ó,ÁÂÁÂ!
«ôŪ¤F¤j§@,§Æ±æ¤j®v¦hÂIpython¤è­±ªº±Ð¾Ç«ü¾É
¥ý§O­p¸û¶}¤£¶} [±MÄݪ©] ; »y¨¥³o±ø¸ô,¤­ªá¤Kªù
¥u­n¦³ªù¸ô,¬Û«H¤j®a³£«Ü¼Ö·N¾Ç²ß
§ó¤£·|­p¸û¦b­þ¸Ì¾Ç²ß

¬Û«H§A¬O[·R¤§²`,³d¤§¤Á]
§_«h§A¤£·|Ä~Äò¦b³o¸Ì°Q½×python»y¨¥ªº¥\¤O

§Ú«Ü¥~¦æ,»¡ªº¤£¶K¤ÁÁٽЮü²[
¦ý¦³¤HÄ@·N¤À¨É±Ð¾Ç or ¸Ñ¨M»yªkbugªº§xÂZ
¤~¬O³o±ø¸ôªº«e¶i°Ê¤O

§_«h¥u¯à±æµÛ¤j®vªº§@«~¦Ó "´¨¤ß¨x"
¨Sªk¯uªº¤Jªù,³s¾Ç²ßªº°Ê¤O³£¨S¦³»¡

ÁٽФj¤jÄ~Äò [«ü¾É] ¤Jªù ¤Î ¨ä¥L¤À¨É
~~·P®¦!

TOP

Áö»¡°ò¦¤£¨¬,§l¦¬¦³­­,¦ý«D±`·PÁ¤j¤jåz¤ß¤À¨É敎¾Ç.!!!!

TOP

¦^´_ 1# white5168


    §A¦n¡A¬O¥i¥H¥Î¡A¥i¥H¼g»¡¶R½æ¤j©ó1000±i¥H¤Wªº¸ê®Æ¡A¥t¥~¥i¥H¤U¸ü¤­¤Ñ«eªº¸ê®Æ¶Ü?ÁÂÁ¡C
devidlin

TOP

¥»©«³Ì«á¥Ñ HSIEN6001 ©ó 2012-8-4 10:47 ½s¿è

¦^´_ 1# white5168

½Ð°Ý¤j®v    --->(¢Þ¢á¡G¤T¤H¦æ¥²¦³§Ú®v¡I¦b§Ú²´¸Ì¡A¦b³oÃ䪺³£¬O¾É®v¡C)
¦]¥½¾Ç¥ÎµL½u3.5G¤U¸ü,®É±`·|¥d¦í(°±¹y).¥¿¦b§ä»yªkbug ,©Î¶È¬O¬y¶q¤£Ã­©w°ÝÃD¡I¡I

¦b±zªº»yªk¤º(°w¹ï¤U¸ü³¡¤À),¦³´X­ÓºÃ°Ý¥ý½Ð±Ð
    Application.DisplayAlerts = False       'False ¤£·Q³Q´£¥Ü¸òĵ³ø,¨Ò¦p:Âл\ªºÀq»{---->¦b¦¹ºô­¶¦³¯S§O§@¥Î??  ½d¨Ò¤¤©|¥¼¬Ý¨ì³oÀ³¥Î;§ÚRUN·|¥d¦í(°±¹y).¬O¦]¬°¤Ö³o¬q?
....(¬Ù²¤)....
        .RefreshStyle = xlInsertDeleteCells    '´¡¤J·s¸ê®Æ,­ì¸ê®Æ¥k²¾----->????¬°¦ó¤£¬O¥ÎÂл\ªº¤è¦¡
....(¬Ù²¤)....
  1.         On Error Resume Next
  2.             Do
  3.                 Err.Clear      
  4.             .Refresh BackgroundQuery:=False     '¨ê·sªð¦^¬d¸ß(°õ¦æ§ó·s)
  5.             
  6.             If Err.Number Then  '------->¬O«ü¨ê·s¬d¸ß§ó·s,©µ¿ðªºµ¥­Ô¡H¡I
  7.                 Application.Wait Now + TimeValue("00:00:01")
  8.             End If
  9.             
  10.             Loop Until Err.Number = 0¡@¡@¡@'---->°j°é³B²zª½¨ìerr=0 ¤~ºâ§¹¦¨ (¸g¨å)
  11.         
  12.         'If Err.Number <> 0 Then Err.Clear: MsgBox Err.Number    '³Q§K¸ê®Æ§ì¨ú¤£¦¨¥\,¦ÓÅã¥Ü°T®§
  13.         On Error GoTo 0
  14.     End With
  15.         

  16.     If Err.Number = 0 Then
  17.         Application.DisplayAlerts = True    'True »Ý´£¥Ü¸òĵ³ø¡H ---->True ¤Î Flase ªºÀ³¥Î,ÁÙ¤£¬O«Ü²z¸Ñ.¥u¬Oª¦¤å©Ò±oªº¤j·N,±æ½Ðµy¥[»¡©ú
  18.         Exit Sub
  19.     End If
½Æ»s¥N½X

TOP

¥»©«³Ì«á¥Ñ GBKEE ©ó 2012-8-5 09:23 ½s¿è

¦^´_ 1# white5168
´ú¸Õ §¹¦¨¹Ï


2012/8/5 §ó·sµ{¦¡½X
   
  1. Option Explicit
  2. Dim SH(1 To 2) As Worksheet, IE As Object
  3. Dim xltheCsv As String, xLMsg As String, Rng As Range
  4. Const xlPath = "D:\Test1\"                  '¥i­×§ïCSV¦sÀɪº¸ô®|
  5. Sub ¥þ³¡¤é³øªí()                            '¬d¸ß¥þ³¡¤éªÑ²¼³øªí
  6.     Dim T As Date
  7.     ¦sÀɸê®Æ§¨
  8.     T = Time
  9.     xLMsg = ""                              '¬ö¿ý ªÑ²¼¥N¸¹¨S³øªí
  10.     ¤W¥«ªÑ²¼¥N¸¹                            '¨ú±o³Ì·s¤W¥«ªÑ²¼¥N¸¹ªí
  11.     ºô­¶                                    '¶}±Òºô­¶
  12.     Set Rng = SH(1).[A3]                    'ªÑ²¼¥N¸¹
  13.     Do
  14.         Rng.Select
  15.         ActiveWindow.ScrollRow = Rng.Row - 1
  16.         Application.ScreenUpdating = False
  17.         If Rng.Offset(, 1) <> "" Then ¶×¤J¤é³øªí Trim(Split(Rng, " ")(0))                                            'Trim(Split(Rng, " ")(0)):ªÑ²¼¥N¸¹
  18.         Set Rng = Rng.Offset(1)             '¤U¤@­Ó ªÑ²¼¥N¸¹
  19.         Application.ScreenUpdating = True
  20.     'Loop Until Rng = ""                    '<-§t   ¤W¥«ªÑ²¼,¤W¥«»{ÁÊ(°â)ÅvÃÒ,¨ü¯qÃÒ¨é-¤£°Ê²£§ë¸ê«H°U--
  21.     Loop Until Rng.Offset(, 1) = ""         '<-¶È¦³ ¤W¥«ªÑ²¼ : BÄæ¬OªÅ¥Õ®ÉÂ÷¶}°j°é
  22.     SH(1).Parent.Close 0                    'Ãö³¬ ³Ì·s¤W¥«ªÑ²¼¥N¸¹ªí
  23.     IE.Quit                                 'Ãö³¬ ºô­¶
  24.     Set IE = Nothing
  25.     Set Rng = Nothing
  26.     MsgBox "¥þ³¡¤é³øªí¤U¸ü§¹¦¨ ¶O®É" & Format(T - Time, "HH®Émm¤Àss¬í") & Chr(10) & xLMsg
  27.     If xLMsg <> "" Then µL³øªí¬ö¿ý
  28. End Sub
  29. Sub ¬d¸ßªÑ²¼¤é³øªí()                        '¬d¸ß³æ¤@ªÑ²¼¤é³øªí
  30.     Dim ªÑ²¼¥N¸¹ As String, ªÑ²¼ As String, T As Date
  31.     ¦sÀɸê®Æ§¨
  32.     xLMsg = ""
  33.     Do While ªÑ²¼¥N¸¹ = ""
  34.         ªÑ²¼¥N¸¹ = InputBox("ªÑ²¼¥N¸¹", "¿é¤J¬d¸ß¤§ªÑ²¼¥N¸¹", "1101")
  35.         If ªÑ²¼¥N¸¹ = "" Then End
  36.     Loop
  37.     T = Time
  38.     ºô­¶
  39.     ¶×¤J¤é³øªí ªÑ²¼¥N¸¹
  40.     IE.Quit
  41.     Set IE = Nothing
  42.     If xLMsg <> "" Then
  43.         MsgBox xLMsg
  44.         µL³øªí¬ö¿ý
  45.         Exit Sub
  46.     Else
  47.         ªÑ²¼ = Replace(Replace(xltheCsv, ".CSV", ""), xlPath, "")
  48.         MsgBox ªÑ²¼ & Chr(10) & "¤U¸ü®É¶¡" & Format(T - Time, "HH®Émm¤Àss¬í") _
  49.         & Chr(10) & "¦sÀɸô®|: " & xlPath
  50.     End If
  51.     Workbooks.Open xltheCsv
  52.     ActiveSheet.Cells.EntireColumn.AutoFit
  53. End Sub
  54. Private Sub ¶×¤J¤é³øªí(ªÑ²¼¥N¸¹ As String)      '³B¸Ì¶Ç°e¨Óªº --ªÑ²¼¥N¸¹--
  55.     Dim Xall As Integer, SubMsg As String, SubRng As Range
  56.     Xall = Val(³øªí­¶¼Æ(ªÑ²¼¥N¸¹))              '¶Ç¦^³øªí­¶¼Æ
  57.     If Xall = 0 Then                            'µL³øªí­¶¼Æ: ³øªí¤£¦s¦b
  58.         If Rng Is Nothing Then
  59.             SubMsg = "[ " & ªÑ²¼¥N¸¹ & " ] µL³øªí"
  60.         Else                                    '¥þ³¡¤é³øªíµ{¦¡: §tªÑ²¼¦WºÙ
  61.             SubMsg = Rng & " µL³øªí"
  62.         End If
  63.         xLMsg = IIf(xLMsg <> "", xLMsg & Chr(10) & SubMsg, SubMsg)
  64.         Exit Sub
  65.     End If
  66.     Set SH(2) = Workbooks.Add(1).Sheets(1)       '·s¼W¤@¬¡­¶Ã¯
  67.     With SH(2).QueryTables.Add(Connection:="URl;http://bsr.twse.com.tw/bshtm/bsContent.aspx?StartNumber=" & ªÑ²¼¥N¸¹ & "&FocusIndex=All_" & Xall, Destination:=SH(2).Range("A1"))
  68.             .WebFormatting = xlWebFormattingNone
  69.             .WebTables = "4,""table2"""
  70.             On Error Resume Next                'µ{¦¡ÁÙ¦³¿ù»~¤£³B¸Ì
  71.             Do
  72.             Err.Clear                           '²M°£¿ù»~­È
  73.             .Refresh BackgroundQuery:=False     'Refresh ¥¢±Ñ ·|¦³¿ù»~­È
  74.             Loop While Err > 0                  '¦³¿ù»~­ÈÄ~Äò°j°é ª½¨ì  Refresh ¦¨¥\
  75.             On Error GoTo 0                     '¦³¿ù»~­È ¤£³B¸Ì
  76.             '®ø°£: On Error Resume Next ¦pÁÙ¦³¿ù»~¤£³B¸Ì ·|¼vÅT¹B¦æªº¥¿½T©Ê
  77.             SH(2).Names(.Name).Delete
  78.     End With
  79.     If Xall > 1 Then                              '³B¸Ì­¶¼Æ > 1  '²M²zªÅ¥Õ¦C¤Î ¨C­¶ªºÄæ¦ì
  80.         With SH(2)
  81.             Set SubRng = .Range(.[A6], .Cells(.Rows.Count, "A").End(xlUp))
  82.             SubRng.Replace "§Ç", "", xlWhole
  83.             SubRng.SpecialCells(xlCellTypeBlanks).EntireRow.Delete xlUp
  84.         End With
  85.     End If
  86.     xltheCsv = xlPath & Format(SH(2).[B1], "yyyy_mm_dd ") & SH(2).[F1] & ".CSV"
  87.     On Error GoTo xlerr                             'xltheCsv  ¤w¶}±Ò·|¦³¿ù»~  ¨ìxLerr³B¸Ì
  88.     If Dir(xltheCsv) <> "" Then Kill xltheCsv
  89.     On Error GoTo 0
  90.     SH(2).Parent.SaveAs xltheCsv, xlCsv
  91.     SH(2).Parent.Close True
  92.     Exit Sub
  93. xlerr:
  94. If Err = 70 Then
  95.     Workbooks(Format(SH(2).[B1], "yyyy_mm_dd ") & SH(2).[F1] & ".CSV").Close 0   'Ãö³¬xltheCsv ¥i²M°£¿ù»~
  96.     Resume                                                                       '¤Ï¦^¿ù»~¦æ
  97. Else
  98.     MsgBox "¿ù»~­È " & Err & " »Ý°»¿ù!!"
  99.     End
  100. End If
  101. End Sub
  102. Private Sub ¤W¥«ªÑ²¼¥N¸¹()  '¤U¸ü³Ì·s¥N¸¹ ( ¤W¥«ªÑ²¼,¤W¥«»{ÁÊ(°â)ÅvÃÒ,¨ü¯qÃÒ¨é-¤£°Ê²£§ë¸ê«H°U )
  103.     Dim SstockId  As String
  104.     SstockId = "URL;http://brk.twse.com.tw:8000/isin/C_public.jsp?strMode=2"
  105.     Set SH(1) = Workbooks.Add(1).Sheets(1)
  106.     With SH(1).QueryTables.Add(SstockId, SH(1).[A1])
  107.         .WebFormatting = xlWebFormattingNone
  108.         .WebTables = "2"
  109.         .Refresh 0
  110.     End With
  111. End Sub
  112. Private Sub ºô­¶()             '¶}±Òºô­¶
  113.     Dim Url As String
  114.     Set IE = CreateObject("InternetExplorer.Application")
  115.     Url = "http://bsr.twse.com.tw/bshtm/bsMenu.aspx"
  116.     With IE
  117.         '.Visible = False   ''¥i¥H¤£Åã¥Ü IE
  118.           .Visible = True
  119.         .Navigate "http://bsr.twse.com.tw/bshtm/bsMenu.aspx"
  120.         Do While .Busy Or .ReadyState <> 4
  121.             DoEvents
  122.         Loop
  123.     End With
  124. End Sub
  125. Private Sub ¦sÀɸê®Æ§¨()     '¨S¦³CSV¦sÀɪº¸ô®|: ³]¥ßCSV¦sÀɪº¸ô®|
  126.     If Dir(xlPath, vbDirectory) = "" Then MkDir xlPath
  127. End Sub
  128. Private Sub µL³øªí¬ö¿ý()   '¤u§@ªí¤W¬ö¿ý ¨S³øªíªºªÑ²¼¥N¸¹
  129.     With ThisWorkbook.Sheets(1)
  130.         .Activate
  131.         If .[A1] = "" Then .[A1] = "ªÑ²¼: µL³øªí"
  132.         .Cells(.Rows.Count, "a").End(xlUp).Offset(1).Resize(UBound(Split(xLMsg, Chr(10))) + 1) = Application.Transpose(Split(xLMsg, Chr(10)))
  133.     End With
  134. End Sub
  135. Private Function ³øªí­¶¼Æ(Sstock_N0 As String)
  136.     Dim element As Object
  137.     On Error GoTo xlerr:
  138. xlAgain:
  139.     Set element = IE.Document.getElementsByName("txtTASKNO")
  140.     element.Item(0).Value = Sstock_N0
  141.     Set element = IE.Document.getElementsByName("btnOK")
  142.     element.Item(0).Click
  143.     With IE
  144.         Do While .Busy Or .ReadyState <> 4
  145.             DoEvents
  146.         Loop
  147.     End With
  148.     Set element = IE.Document.getElementsByName("sp_ListCount")
  149.     ³øªí­¶¼Æ = element.Item(0).innertext
  150.     Exit Function
  151. xlerr:        '³B¸Ìºô­¶¤¤Â_
  152.     IE.Quit
  153.     ºô­¶
  154.     Err.Clear
  155.     GoTo xlAgain
  156. End Function
½Æ»s¥N½X

TOP

¦^´_ 7# GBKEE


    ¦n´Î!°õ¦æ³t«×¶W§Öªº!
³ø§i:
¥Ø«e¦³­Ó¤¤Â_ÂI¦b¥N¸¹1414
??

TOP

¦^´_ 8# HSIEN6001


    ªþµùÂ_ÂI:    ³øªí­¶¼Æ = element.Item(0).innertext

TOP

¦^´_ 7# GBKEE


    §A¦n¡A§¹¾ãexcelÀÉ®×¥i¥H¤À¨É¶Ü?ÁÂÁ¡C
devidlin

TOP

        ÀR«ä¦Û¦b : ¤@¥y·Å·xªº¸Ü¡A´N¹³©¹§O¤H¨­¤WÅx­»¤ô¡A¦Û¤v·|ªg¨ì¨â¤Tºw¡C
ªð¦^¦Cªí ¤W¤@¥DÃD