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

[µo°Ý] ½Ð°Ý¯à§_±N2­ÓVBA¥¨¶°¦X¨Ö¦¨1­ÓVBA¥¨¶°

¦^´_  azrael19

¤j¤j¦n
·d±o«ç»ò½ÆÂø
°Ê¥Î¤F¤j¶qªº Regular Expression
«Ü²Ö§a
jackyq µoªí©ó 2015-7-26 22:49


Regular Expression§Ú¦Û¤v¤]ı±o§Ú¼gªº¤S¯ä¤SªøÅý±z¨£¯º¤F¡A¨ä¹êºô¸ô¤W¦³²{¦¨ªºJSON ParserÃþ§O¥i¥H®³¨Ó¥Î¡A¥u¬Olcctno«e½ú§Æ±æµ{¦¡¥u¯à¦³¤@­Ó¥¨¶°¡A©Ò¥H¤~¥Î³oºØ¤è¦¡¨Ó³B²z

JSON Parser
https://code.google.com/p/vba-json/

TOP

¦^´_ 15# azrael19

¦Ñ¤H®a¦­ºÎ ©ú¦­¤S­n¦­°_¥~¥X¹B°Ê ±µµÛ¤S­n¨n½L °µ§Ú°Ñ»PªºªÑ(T50¤Ï1) ¤§¦¨¥æ¤Î²Î­p¨Ã¿é¤J ¦Ó±o¨ì¤ÀªR ¬Gµ¥§Ú¦³ªÅ®É(¬P´Á°²¤é) ¦A°µªñ¤@¨Bªº "Try Run" ÁٽШ£½Ì §Ú¬Û«H±zªº¯à¤O(¨Æ¹ê¤WÃÒ©ú±z¬O°ª¤â ¦æ®a¤@¥X¤â «Kª¾¦³¨S¦³) ¥u¬O§Ú­Ó¤Hªº¦]¯À µLªk§Y®ÉÅçÃÒ ÁٽШ£½Ì §Æ±æ¨Ó¤é¯à¦³¾÷·|¦^³ø±zªºÀ°§U (§Æ±æ¯à¦bªÑ¥«¤WÀ°¤W¦£) ¯uªº«Ü·PÁ±z

TOP

¦^´_ 15# azrael19

¤j¤j¦n
·d±o«ç»ò½ÆÂø
°Ê¥Î¤F¤j¶qªº Regular Expression
«Ü²Ö§a

TOP

¦^´_  azrael19

¦³¤@­Ó©µ¦ùªº°ÝÃD ¯à§_§PŪ¦pªþ¹Ï¤º¥kºÝ¾ã±Æ¸ê®Æ¤§º¦©Î¶^


©Î¥i±N¹ê»Ú¤§½bÀY¤è¦V¤@ ...
lcctno µoªí©ó 2015-7-26 11:13


¥Î­ì¥»ªº¤è¦¡§ÚÁÙ¤£ª¾¹D­n«ç»ò°µ¡A¦pªG§Aªº»Ý¨D¥u¬O­n§ì¸ê®Æ¡A¤U­±¬O¥t¤@ºØ¤è¦¡§A¸Õ¸Õ¬Ý...
  1. Option Explicit
  2. Option Base 1

  3. Sub Ex()
  4.     Dim HEAD As Variant, PARAM As Variant, PA As Variant, AR As Variant, v As Variant
  5.     Dim i As Integer, j As Integer, k As Integer
  6.     Dim s As String, ErrDescription As String
  7.     Dim objCol As Object
  8.    
  9.     '°Ñ¼Æ : ºô§},ªíÀY©ñ¸m¦ì§},¸ê®Æ©ñ¸mÀx¦s®æ¦ì§},¼ÐµùÃC¦âÀx¦s®æ¦ì§}
  10.     PARAM = [{"http://www.yuantaetfs.com/api/RtNav","B1","B5","D16:D17"; "http://www.yuantaetfs.com/Home/IndexPrice","","B27","C27:C28"}]
  11.    
  12.     '¸ê®ÆªíÀY°}¦C¦r¦ê
  13.     HEAD = Array("{""¸ê®Æ®É¶¡"","""","""","""","""","""","""","""","""","""","""","""","""","""","""";" & _
  14.                  """°ò¥»¸ê®Æ"","""",""²b­È"","""","""","""",""¥«»ù"","""","""","""",""§é·¸»ù"","""",""ªì¯Å¥«³õ"","""",""°òª÷"";" & _
  15.                  """ªÑ²¼"",""°òª÷"",""¬Q¦¬"",""¹w¦ô"",""º¦¶^"",""º¦¶^´T"",""¬Q¦¬"",""³Ì·s"",""º¦¶^"",""º¦¶^´T"",""§é·¸»ù"",""´T«×"",""¥i§_"",""¥i§_"",""Àç·~¤é"";" & _
  16.                  """¥N½X"",""¦WºÙ"",""²b­È"",""²b­È"","""","""",""¥«»ù"",""¥«»ù"","""","""","""","""",""¥ÓÁÊ"",""Å«¦^"",""""}", "")
  17.                  
  18.     'Regular Expression
  19.     PA = Array("{""fundId"":""[\d]+"",""etfId"":""(.+?)"",""name"":""(.+?)"",""ename"":""[^""]*"",""yestNav"":(.+?),""nav"":(.+?),""navFluct"":(.+?),""yestPrice"":(.+?),""price"":(.+?),""priceFluct"":(.+?),""yestIndex"":(.+?),""index"":(.+?),""indexFluct"":(.+?),""updateTime"":""(.+?)"",""AllowMark"":""(.+?)"",""RedemMark"":""(.+?)"",""BussMark"":""(.+?)"",[^}]+}", _
  20.                "{""fund_id"":null,""IndexCode"":""[^""]*"",""IndexName"":""([^""]+)"",""IndexEName"":""[^""]*"",""crncy"":""[^""]*"",""area"":""D"",""DayDate"":""[^""]*"",""Close"":(.+?),""yestClose"":(.+?),""Diff"":(.+?)}")

  21.     ActiveSheet.UsedRange.ClearContents
  22.    
  23.     For i = LBound(PARAM) To UBound(PARAM)
  24.    
  25.         '§ì¨úJSON¸ê®Æ
  26.         With CreateObject("WinHttp.WinHttpRequest.5.1")
  27.             .Open "GET", PARAM(i, 1), False
  28.             .send
  29.             If 200# <> .Status Then
  30.                 ErrDescription = "ºô­¶Åª¨ú¥¢±Ñ!"
  31.                 GoTo Catch
  32.             End If
  33.             s = .responseText
  34.         End With
  35.         
  36.         With ActiveSheet
  37.             If "" <> PARAM(i, 2) Then
  38.                 '©ñ¸mªíÀY¸ê®Æ
  39.                 AR = Application.Evaluate(HEAD(i))
  40.                 .Range(PARAM(i, 2)).Resize(UBound(AR, 1), UBound(AR, 2)).Value = AR
  41.                 Erase AR
  42.             End If
  43.             If "" <> PA(i) Then
  44.                 '¸ÑªRJSON¦r¦ê¤¤©Ò»Ý¸ê®Æ
  45.                 With CreateObject("VBScript.RegExp")
  46.                     .Global = True
  47.                     .Pattern = PA(i)
  48.                     If False = .test(s) Then: GoTo Catch
  49.                     Set objCol = Nothing
  50.                     Set objCol = .Execute(s)
  51.                 End With
  52.                 If 0 = objCol.Count Then
  53.                     ErrDescription = "¸ê®Æ®æ¦¡¸ÑªR¿ù»~!"
  54.                     GoTo Catch
  55.                 End If
  56.                 ReDim AR(1 To objCol.Count, 1 To objCol(1).SubMatches.Count) As Variant
  57.                 For j = 0 To objCol.Count - 1
  58.                     For k = 0 To objCol(0).SubMatches.Count - 1
  59.                         AR(j + 1, k + 1) = objCol(j).SubMatches(k)
  60.                     Next k
  61.                 Next
  62.             End If
  63.             
  64.             Select Case i
  65.                 Case 1
  66.                     '­«·s±Æ¦C¤Î­×¥¿¸ê®Æ¥H²Å¦Xºô­¶ªí®æ©Ò§e²{¼Ë»ª
  67.                     For j = 0 To objCol.Count - 1
  68.                         AR(j + 1, 9) = AR(j + 1, 8)                            'º¦¶^
  69.                         AR(j + 1, 8) = AR(j + 1, 7)                            '³Ì·s¥«»ù
  70.                         AR(j + 1, 7) = AR(j + 1, 6)                            '¬Q¦¬¥«»ù
  71.                         AR(j + 1, 6) = Round(AR(j + 1, 5) / AR(j + 1, 3), 4)   'º¦¶^´T
  72.                         AR(j + 1, 10) = Round(AR(j + 1, 9) / AR(j + 1, 7), 4)  'º¦¶^´T
  73.                         AR(j + 1, 11) = AR(j + 1, 8) - AR(j + 1, 4)            '§é·¸»ù
  74.                         AR(j + 1, 12) = Round(AR(j + 1, 11) / AR(j + 1, 4), 4) '´T«×
  75.                     Next j
  76.                     .Range("B1").Value = "¸ê®Æ®É¶¡:" & Trim(objCol(0).SubMatches(11))
  77.                     With .Range(PARAM(i, 3)).Resize(UBound(AR, 1), UBound(AR, 2))
  78.                         '³]©wÀx¦s®æ®æ¦¡
  79.                         v = Split("@,@,0.00,0.00,0.00,0.00%,0.00,0.00,0.00,0.00%,0.00,0.00%", ",")
  80.                         For j = LBound(v) To UBound(v)
  81.                             .Columns(j + 1).NumberFormat = v(j)
  82.                         Next
  83.                         .Value = AR
  84.                     End With
  85.                     Erase AR
  86.                 Case 2
  87.                     For j = 0 To objCol.Count - 1
  88.                         AR(j + 1, 3) = AR(j + 1, 4)                            '«ü¼Æº¦¶^
  89.                         AR(j + 1, 4) = Round(AR(j + 1, 3) / AR(j + 1, 2), 4)   'º¦¶^´T(%)
  90.                     Next
  91.                     With .Range(PARAM(i, 3)).Resize(UBound(AR, 1), UBound(AR, 2))
  92.                         '³]©wÀx¦s®æ®æ¦¡
  93.                         v = Split("@;#,##0.00;#,##0.00;0.00%", ";")
  94.                         For j = LBound(v) To UBound(v)
  95.                             .Columns(j + 1).NumberFormat = v(j)
  96.                         Next
  97.                         .Value = AR
  98.                     End With
  99.                     Erase AR
  100.                 Case Else
  101.             End Select
  102.         
  103.             '¼Ðµù³]©wÀx¦s®æ¦ì§}ÃC¦â
  104.             With .Range(PARAM(i, 4)).Interior
  105.                 .ColorIndex = 35
  106.                 .Pattern = xlSolid
  107.             End With
  108.         End With
  109.         
  110.     Next
  111.    
  112. Finally:
  113.     Set objCol = Nothing

  114.     Exit Sub
  115. Catch:

  116.     If "" <> ErrDescription Then: MsgBox ErrDescription, vbCritical
  117.     Err.Clear
  118.     Resume Finally

  119. End Sub
½Æ»s¥N½X

TOP

¦^´_ 8# no3-taco
¥Ñ©óµ¥ºô¯¸¹ïµæ³¾ªº¨C¤p®É¥u¯à¦^ÂÐ3¦¸ªº­­¨î ¬G±ß¤F¦^ÂÐ

¥Ñ©ó­Ó¤Hªì¾Ç¥¨¶° ¨S¯à¤O²Õ¦X½ÆÂøªºªF¦è ¤£¹LÁÙ¦n¦³¼ö¤ßªº°ª¤â¤l9¼Ó)¤w¸Ñ¨M¤F§Úªº°ÝÃD
ÁÙ¬O«D±`·PÁ±z¼ö¤ßªº°Ñ»P¦^´_ ÁÂÁ±z

TOP

¦^´_ 9# azrael19

¦³¤@­Ó©µ¦ùªº°ÝÃD ¯à§_§PŪ¦pªþ¹Ï¤º¥kºÝ¾ã±Æ¸ê®Æ¤§º¦©Î¶^


©Î¥i±N¹ê»Ú¤§½bÀY¤è¦V¤@¨Ö§e²{ §Ú¦b¥ÎIF§PÂ_

ÁÂÁ±z

TOP

¦^´_ 10# GBKEE
µLªk°õ¦æ(­ì¦]:§Ú¬Oµæ³¾µL¯à¤O­×§ï§¹¦¨)
1 »yªk¿ù»~


2.¿ù»~¤º®e


·PÁ±z¼ö¤ßªº°Ñ»P ÁÂÁ±z

TOP

¦^´_ 9# azrael19

¥i¥H¥¿±`¤F
    ·PÁ±zªº¥Î¤ß  ³o¼Ë´N¥i¥H¥¿±`Åã¥Ü2²Õ¦X¨Öªº¥¨¶°

TOP

¥»©«³Ì«á¥Ñ GBKEE ©ó 2015-7-27 09:53 ½s¿è

¦^´_ 7# lcctno

·í¤U¥uµo¥Í¦Û°Ê¶}±ÒIE11 °±¦b"5¼Óªº¹Ï1.
¦¹µ{¦¡°õ¦æ«á·|¦^¨ìVBA½s¿èµøµ¡,¨Ã¥´¶}'§Y®É¹Bºâ"ªºµøµ¡
½Ð²Ä¤@­ÓSTOP ¤§«á«ö¤UF5
¦p°±¯d¦bVBA½s¿èµøµ¡,"§Y®É¹Bºâ"¤@ª½¦³¦r¦ê¥X²{,¥Nªíµ{¦¡¤@ª½¦bµ¥«áIEªº¸ê®Æ,¬OIE ªº°ÝÃD
**½Ð­@¤ßµ¥­Ô¨ì¤U ¤@­Ó STOP ¤§«á«ö¤UF5 **
  1. Option Explicit
  2. Sub Ex()
  3.     Dim E As Object, Ar(), i As Integer
  4.     Ar = Array("http://www.yuantaetfs.com/#/RtNav/Index", "http://www.yuantaetfs.com/#/Home/Index")
  5.     'Ar = Array(ºô§}:§Y®É²b­È,ºô§}:°ê¤º«ü¼Æ) ºô§}¸m¤J°}¦C
  6.     ActiveSheet.UsedRange.Clear
  7.     For i = 0 To 1
  8.         With CreateObject("InternetExplorer.Application")
  9.             .Visible = True
  10.             .Navigate Ar(i)
  11.             Do While .Busy Or .readyState <> 4: DoEvents: Loop
  12.             If i = 0 Then  '°ê¤º«ü¼Æ:¤£»Ý«ö¤U¦P·NÁä
  13.                 Do
  14.                     Set E = .Document.getElementByid("Agree")
  15.                 Loop Until Not E Is Nothing
  16.                 E.Click
  17.             End If
  18.             .Visible = False
  19.             Application.VBE.MainWindow.Visible = True
  20.             Application.VBE.Windows("§Y®É¹Bºâ").Visible = True
  21.             Stop  '¤§«á«ö¤UF5
  22.             Do
  23.                 Do
  24.                     Set E = .Document.getElementsByTagName("TABLE")(21 + i)
  25.                     '§Y®É²b­È ²Ä21­Ó "TABLE" ,'°ê¤º«ü¼Æ ²Ä22­Ó "TABLE"
  26.                     Debug.Print i, "e Is Nothing ->", E Is Nothing
  27.                 Loop Until Not E Is Nothing
  28.                     Debug.Print i, "e Is Nothing ->", E Is Nothing, "e.all.Length", E.all.Length
  29.             Loop Until E.all.Length >= IIf(i = 0, 431, 150) '
  30.             Stop  '¤§«á«ö¤UF5
  31.             
  32.             Application.VBE.Windows("§Y®É¹Bºâ").Visible = False
  33.             Application.VBE.MainWindow.Visible = False
  34.             .Document.body.innerHTML = E.outerHTML
  35.             .ExecWB 17, 2       '  Select All
  36.             .ExecWB 12, 2       '  Copy selection
  37.             With ActiveSheet
  38.                 .Range("A" & IIf(i = 0, 1, 27)).Select
  39.                 .PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True
  40.                 With .Range(IIf(i = 0, "D16:D17", "C27:C28")).Interior
  41.                     .ColorIndex = 35
  42.                     .Pattern = xlSolid
  43.                 End With
  44.             End With
  45.             .Quit        'Ãö³¬ºô­¶
  46.         End With
  47.     Next
  48. End Sub
½Æ»s¥N½X
·P®¦ªº¤ß......(¦b³Â»¶®a±Ú°Q½×°Ï.¥Î¤ß¾Ç²ß·|¦³¶i¨Bªº)
¦ý¸ê·½µL­­,«á´©¦³­­,  ¤@¤Ñ1¤¸ªºÃÙ§U,¤H¤H¦³¯à¤O.

TOP

¦^´_  GBKEE

1.À³¸Ó¤£¬O¤U¸ü©Î¤W¶Ç³t«×ªº°ÝÃD §Ú¬O¨Ï¥Î¤¤µØ¹q«H¥ú¥@¥N¤Wºôªº

2.À³¸Ó¬O§Ú¹Lµ{±Ô­zªº¤£ ...
lcctno µoªí©ó 2015-7-26 08:23


¸Õ¸Õ¬Ý...
  1. Option Explicit
  2. Sub Ex()
  3.     Dim E As Object, Ar(), i As Integer
  4.     Ar = Array("http://www.yuantaetfs.com/#/RtNav/Index", "http://www.yuantaetfs.com/#/Home/Index")
  5.     'Ar = Array(ºô§}:§Y®É²b­È,ºô§}:°ê¤º«ü¼Æ) ºô§}¸m¤J°}¦C
  6.     ActiveSheet.UsedRange.Clear
  7.     For i = 0 To 1
  8.         With CreateObject("InternetExplorer.Application")
  9.             .Visible = True
  10.             .Navigate Ar(i)
  11.             Do While .Busy Or .readyState <> 4: DoEvents: Loop
  12.             If i = 0 Then  '°ê¤º«ü¼Æ:¤£»Ý«ö¤U¦P·NÁä
  13.                 Do
  14.                     Set E = .Document.getElementByid("Agree")
  15.                 Loop Until Not E Is Nothing
  16.                 E.Click
  17.             End If
  18.             Do
  19.                 Do
  20.                     Set E = .Document.getElementsByTagName("TABLE")(21 + i)
  21.                     '§Y®É²b­È ²Ä21­Ó "TABLE" ,'°ê¤º«ü¼Æ ²Ä22­Ó "TABLE"
  22.                 Loop Until Not E Is Nothing
  23.             'Loop Until E.all.Length >= IIf(i = 0, 431, 150) '
  24.             Loop Until 0 < InStr(1, E.outerHTML, IIf(i = 0, "°ò¥»¸ê®Æ", "¥xÆW¥[ÅvªÑ»ù«ü¼Æ"))  '§ï¥Î¬ÛÃö¦r¦ê½T»{¬O§_¦³¸ê®Æ
  25.             .Document.body.innerHTML = E.outerHTML
  26.             .ExecWB 17, 2       '  Select All
  27.             .ExecWB 12, 2       '  Copy selection
  28.             With ActiveSheet
  29.                 .Range("A" & IIf(i = 0, 1, 27)).Select
  30.                 .PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True
  31.                 With .Range(IIf(i = 0, "D16:D17", "C27:C28")).Interior
  32.                     .ColorIndex = 35
  33.                     .Pattern = xlSolid
  34.                 End With
  35.             End With
  36.             .Quit        'Ãö³¬ºô­¶
  37.         End With
  38.     Next
  39. End Sub
½Æ»s¥N½X

TOP

        ÀR«ä¦Û¦b : °µ¸Ó°µªº¨Æ¬O´¼¼z¡A°µ¤£¸Ó°µªº¨Æ¬O·Mè¡C
ªð¦^¦Cªí ¤W¤@¥DÃD