2014-02-17 62 views
0

我的公司需要重置超過1000人的用戶名和密碼,而不是通過手工完成,我希望VBA能夠爲我自動執行它。我有它連接到IE窗口罰款,但getElementsByTagName(「輸入」)只返回最後一個輸入標記。以下是我的代碼:Excel VBA getElementsByTagName()只返回最後一個輸入

Dim shellWins As ShellWindows 
Dim IE As InternetExplorer 
Dim HTMLdoc As HTMLDocument 
Dim objElement As Object 
Dim objCollection As IHTMLElementCollection 
Dim name As String 
Dim val As String, val2 As String 
Dim a 

Set shellWins = New ShellWindows 

If shellWins.Count > 0 Then 
    ' Get IE 
    Set IE = shellWins.Item(0) 
Else 
    ' Create IE 
    Set IE = New InternetExplorer 
    IE.Visible = True 
End If 

Set objCollection = IE.Document.getElementsByTagName("input") 


For i = 0 To objCollection.Length 
    name = objCollection(, i).name 
    If Left(name, 6) = username Then 
     val = objCollection(i).Value 
     a = Split(val, "@") 
     If Left(a(1), 1) <> "s" Then 
      val2 = a(0) & sa & a(1) 
     Else 
      val2 = val 
     End If 
     objCollection(i).Value = val2 
    ElseIf Left(name, 6) = pswd Then 
     objCollection(i).Value = nPswd 
    End If 
Next 

Set shellWins = Nothing 
Set IE = Nothing 

我想要的輸入標籤是在表標籤中,是否會導致它?如果是這樣,我將如何引用表中的標籤?

預先感謝您。

+0

你忽略了一些代碼嗎? –

回答

-1

另一種方法是使用查詢從網頁中檢索數據。例如下面的代碼從網站http://finance.yahoo.com/q?s=usdCAd=x檢索數據,並將其放置在單元格A1:

With Sheet1.QueryTables.Add(Connection:= _ 
    "URL;http://finance.yahoo.com/q?s=usdCAd=x", Destination:=Sheet1.Range("$A$1")) 
    .Name = "q?s=usdCAd=x_1" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .BackgroundQuery = True 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .WebSelectionType = xlEntirePage 
    .WebFormatting = xlWebFormattingNone 
    .WebPreFormattedTextToColumns = True 
    .WebConsecutiveDelimitersAsOne = True 
    .WebSingleBlockTextImport = False 
    .WebDisableDateRecognition = False 
    .WebDisableRedirections = False 
    .Refresh BackgroundQuery:=False 
End With 

你最終將有大量行,並從網站上檢索到的字符串的一些列。然後,您可以處理信息並檢索所需的數據。

+0

您鏈接的帖子是關於使用QueryTables,似乎對實際問題沒有影響。 –

+0

使用查詢表,您可以從網站檢索數據並處理從那裏檢索到的信息 – Pedrumj

+0

OP正在更新頁面上的信息並提交表單... –

1

試試這個循環,而不是:

Dim el as object 
Set objCollection = IE.document.getElementsByTagName("input") 
For Each el In objCollection 
    If Left(el.Name, 6) = UserName Then '?"username"? 
     a = Split(el.Value, "@") 
     If Left(a(1), 1) <> "s" Then 
      val2 = a(0) & sa & a(1) 
      el.Value = val2 
     End If 
    ElseIf Left(el.Name, 6) = pswd Then 
     el.Value = nPswd 
    End If 
Next el 

不太清楚不過:你似乎已經從你的問題省略了一些代碼。

+0

我意識到我確實省略了一些代碼,但唯一被省略的代碼是const聲明。我確實嘗試過這種方法,它仍然只返回文檔中的最後一個輸入標籤。 – JRLambert

+0

在這種情況下,你的頁面有些奇怪。任何框架例如?你可以發佈你想要填充的兩個輸入的源代碼HTML嗎? –