返回列表 上一主題 發帖

[發問] vba 操作ie匯入資料

謝謝版大的問題,也謝謝g大的回覆,剛好我也在想要如何發問。

G大想請教一下,
我將你的表頭改為

For DQ = 1 To 5
    DQQ = 6
    Sheets(DQQ).Select
     co_id = Range("A" & DQ).Value
     Sheets(DQ).Select
    'If Not IsNumeric(Val(co_id)) Or Len(co_id) <> 4 Then Exit Sub              '不是四位數的數字
    isnew = 1

也就是說,我將個股的代號放在page6的a1∼a5,但是想請教一下,
為何只有第一項的資料會進入page1,其他的page2 ~ page5 均為空白,
不曉得您的程式哪裡還需要動到。
Thanks.

TOP

Dear G大謝謝您的費心,如上所提,我只修改表頭與endsub前的Next DQ,僅此而已,
實際上也看到IE的股票代號有動作,但page2 ~page5 並沒有將資料帶進來??

Sub Ex()
    Dim i As Integer, s As Integer, k As Integer, A, ii, j
    Dim co_id As String, isnew As String, season As String
    Dim DQ as Integer, DQQ As Integer
     For DQ = 1 To 5
    DQQ = 6
    Sheets(DQQ).Select
     co_id = Range("A" & DQ).Value
     Sheets(DQ).Select
    isnew = 1
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .Navigate "http://mops.twse.com.tw/mops/web/t164sb04"
        Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
        With .document
            For Each A In .getelementsbytagname("INPUT")
                If A.Name = "co_id" Then A.Value = co_id
            Next
            For Each A In .getelementsbytagname("SELECT")
                If A.Name = "isnew" Then
                    A.Value = True
                    If isnew = "2" Then
                        A.Focus
                        Application.Wait Now + #12:00:02 AM#
                        Application.SendKeys "{DOWN}"
                        Application.Wait Now + #12:00:02 AM#
                        Application.SendKeys "{ENTER}"
                    End If
                End If
                If A.Name = "year" And isnew = "2" Then A.Value = Split(season, ",")(0)
                If A.Name = "season" And isnew = "2" Then A.Value = Split(season, ",")(1)
            Next
            For Each A In .getelementsbytagname("INPUT")
                If Trim(A.Value) = "搜尋" And A.Name <> "rulesubmit" Then A.Click        '按下[搜索]鍵
            Next
        End With
        Application.Wait Now + #12:00:10 AM#                     '等待網頁下載資料
        Set A = .document.getelementsbytagname("table")
        On Error Resume Next       '***有些table沒Rows資料會產生錯誤 不理會它,程式繼續走
        With ActiveSheet
            .Cells.Clear
           '************************
           ' For ii = 0 To A.Length - 1        '不知道table範圍在何處: 從0開始
           '******************************
            For ii = 11 To A.Length - 1        ''從11開始 用 Debug.Print ii  找出所要資料的table範圍
                For i = 0 To A(ii).Rows.Length - 1      '寫入資料
                'Debug.Print ii  可找出所要資料的 table 範圍
                k = k + 1
                For j = 0 To 5
                    Cells(k, j + 1) = A(ii).Rows(i).Cells(j).innerText
                Next
            Next
            Next
            .Range("C5").Cut Range("D5")
            With .Range("B5:C5,D5:E5")
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .Merge
            End With
        End With
        .Quit        '關閉網頁
    End With
Next DQ
End Sub

TOP

Dear G大,

我找到問題了。
謝謝您送的這個武器,好用。
因為K值會遞增所影響,所以多加一行K=0即可。

For DQ = 1 To 5
    DQQ = 6
    Sheets(DQQ).Select
     co_id = Range("A" & DQ).Value
    Sheets(DQ).Select
    isnew = 1
    k = 0
    ...........
   Next DQ

TOP

謝謝g大∼∼

TOP

想再請教一下,
若是a20 的儲存格為中文字"如果",
假設我要判斷a1~a50 的儲存格是否有此一中文字"如果",
當條件發生時,則我的某個數值為B20,否則為c20的儲存格裡的數值。
請問要如何判斷?

謝謝∼

TOP

謝謝stillfish00大的回覆,

您說的沒錯,我寫的不夠清楚。
想再請教一下,
若是在A1 ~ A50裡,A20 的儲存格為"如果",則c55的值為B20,
但若是A21 的儲存格才為"如果",則C55的值為B21
也就是說"如果"不確定是存放在A1 ~A50的哪個地方,
而C55的值也跟著變動,不曉得這樣要如何修改?

繼續思考中~

謝謝!

TOP

謝謝stillfish00大的回覆,

這次又可以多學個指令了。
對於vba不熟,只能用些簡單的指令,看來要多學一點了。
通常我只會硬刻一套可用的vba,
比如,這次要是沒有人回覆,我就會用錄製新巨集的方式,
錄下取代"如果"的方法,然後以數字比對的方式來設定C55。

謝謝stillfish00∼

TOP

        靜思自在 : 一個人不怕錯,就怕不改過,改過並不難。
返回列表 上一主題